Feeds:
Posts
Comments

Ok, so for the last couple weeks I have been using three location-based social networking tools, trying to determine which I like best.  The contendors are foursqure, Gowalla, and brightkite.

First, let’s talk about the concept.  Using these tools you “check in” at locations you visit.  Seems like a neat way to see what your friends are doing and find interesting places to go and things to see.  Each of these tools will post to Facebook and Twitter so all of your followers on those services will see updates.  And each of these tools have great iPhone apps.  The problem is that they each of great features, and several shortcomings.  So, I’m having trouble picking one.

foursqure

Foursqure is the most popular of the three.  I love the concept of becoming a Mayor of a location and collecting Badges.  But, it doesn’t give you an easy way to see on a page what your friends are doing, or who is currently near you.  Both of these seem obvious features that I just cannot find on their website.  Actually, on the home screen of the iPhone app you see where your friends currently are, but I cannot find it anywhere on the website.  However, the majority of my friends using one of these tools is using foursqure, so that is a plus for it.

Gowalla

Gowalla is the next most popular.  Unlike foursqure, on the Gowalla home page you can easily see what your friends are doing.  It also has the concept of Creators and Founders, which seems very similar to the Mayors on foursquare.  I love the large locaiton icons it uses and the stamps you earn and items you can drop.  Gowalla was really looking like it would come out in first place for me, but it does something strange with the Twitter posts.  When it posts to twitter it seems to insert a random “@” username in for the location name.  I can’t find on the locations where these twitter usernames are set.  Seems like a pretty major bug to me, so I don’t think this is going to be the one I end up using.

brightkite

Brightkite is the least popular of the three, but surprisingly the most feature rich.  You can easily see people near you at any radius you select.  You can also easily see what your friends are doing.  It also gives you the ability to upload a picture when you checkin.  You can set it up to automatically push that picture to Flick or your Facebook photo album.  It doesn’t seem to have any concept like a Mayor or Founder.  But that’s not a huge deal.  Really, the biggest downside for me on brightkite is the fact that I only have a few friends on it, and almost all of them have switched exclusively to foursqure or Gowalla.

So, in my personal opinion, brightkite should win the war of the location based social networking tools.  Do I think it will?  Probably not.  Foursqure and Gowalla are currently much more popular.  But brightkite is the most feature rich and seems the most stable.  So, everyone out there who is looking at these tools, let’s all switch to brightkite and call this war over!

If you are using any of these three, add me as a friend.  Here are the links to my profiles:

Ok, so I’ve been thinking a lot over night about what’s going on in Lost, and here are my current thoughts.  Do not read if you haven’t seen last night’s episodes yet, there ars spoilers below.

What’s with the Alternate Timeline?

When Juliet set off the Nuke in 1977, the alternate timeline was created.  Why?  Because it had to be.  If you think about cause and effect, a paradox would have been created otherwise.  If the alternate timeline were not created, then setting off the nuke would have caused the plane never to crash in 2004.  If they plane never crashed in 2004, then Jack and team never went back in time to set off the nuke that caused the plane to not crash.  You have a paradox.

So, instead of creating a paradox, the alternate timeline was created.  The whole Infinite Universes theory.  The effect of them setting off the nuke in the main timeline was the nuke going off in the alternate timeline.  Though in the main timeline the nuke did not go off because it couldn’t.

So, in the main timeline, the group jumps back to where they are supposed to be in time: 2007.  This catches them back up to where the rest of their group was.  And now everyone is back together in the main timeline.

In the alternate timeline, the island has now sunk in 1977 because of the nuke.  This causes the plane never to crash in 2004.  But, it also causes a series of effects beginning in 1977 which ultimately cause the little differences we see on the plane in 2004.  Differences such as Shannon not getting on the plane with Boone to go home, Hurley having good luck instead of bad, Michael and Walt not being on the plane, etc.  However, everyone on the plane is going to have a strange sense of deja-vu because of what has happened in the main timeline.  Jack experienced this when he saw Desmond.

What’s up with Jacob, his Nemesis, and the Other Others?

First of all, the Other Others.  These are simply part of the Others who live at the Temple.  We’ve seen Cindy, Zach, and Emma (who were from the tail section) before with the Others. They are preparing for an attack by Jacob’s Nemesis, as the Smoke Monster, now that they have heard Jacob (thier spiritual leader) is dead.

Jacob and his Nemesis represent the battle between good and evil.  Jacob has his Nemesis somehow trapped at the island so he cannot leave.  The Nemesis wants desperately to leave and the only way he can is by killing Jacob.  So, he arranges the series of events we saw last season with Jacob ultimately being killed by Ben.

Jacob and his Nemesis are disputing over the ultimate good or evil in man.  Jacob keeps bringing people to the island trying to show that a good, peaceful civilization can live there.  This results in the Others.  The Nemesis keeps corrupting groups of people causing the endless fighting that is occurring there over the years.

So, in both timelines, Jacob is dead.  Evil has won.  What we’re going to see this season is Jacob, speaking through Hurley, arranging events to send Jack and team back in time to stop Ben from killing Jacob.  I think Sayid will ultimately be the one to stop Ben.  When this happens, it will create another alternate timeline where the balance between good and evil, Jacob and his Nemesis, is restored.

So, that’s my current thoughts on what’s going on.  I’ve excited to see what happens over the rest of the season.

This post is part of my series on Software Project Estimation: 

Today’s I’d like to dive into another software estimation methodology.  I’ll refer to this only simply as Counting.  Using this technique you find something to count and base your estimation upon that count.

So, the first step is to find something to count.  What should this be?  Here are some examples of things you could count:

  1. Requirements
  2. User Screens or Web Pages
  3. Function Points
  4. Use Cases or User Stories
  5. Database Tables

Whatever you decide to count needs to satisfy a couple requirements:

  1. It must be available early on in the project (preferably at the Requirements stage, not the Technical Design one).
  2. It should be highly correlated to the actual effort invovled to execute the project.
  3. You should have historical data available telling you how long it will take for you to construct it.

Let’s say, for instance, you are creating a web site and you decide that you are going to count the web pages to try to get an estimate for the project.  Looking at your historical data, you determine that the web pages you have created have fallen into three categories: 1. Simple (static text), 2. Avarage (simple data input / retrieve), and 3. Complex (more difficult data input or retrieve).  Your historical data reveals the following average construction times for these web pages:

  1. Simple: 4 hours
  2. Average: 16 hours
  3. Complex: 40 hours

To come up with your estimat, you simply have to inventory the web pages you are going to create as part of this project, and assign them to those categories.  Using these counts, you can come up with the total amount of time for coding and unit testing.  Based on your project breakdown percentages you can then derive the time for the other phases and get your complete estimate for the project.

This technique can be further refined by breaking your components into those that are being Created or just Modified and getting afterage times for Simple, Average, and Complex components in those two categories.

An additional factor can be added to this estimate to take into account the skill level of the developer doing the construction.  Say, for instance, you estimate what it would take for an Average developer to do the coding.  From your historical data it my be clear that it takes a Novice 50% longer to do the construction and an Expert only 3/4 the time.  So, you could break your components down by the skill level of the person doing the development, muliply the Novice ones by 1.5 and the Expert by 0.75.

So far I have been describing this estimation technique in a way that relies heavily on having your own historical data available.  But, what if you do not have this information?  In that case I would recommend using an industry standard metric to count that has associated industry historical data avaiable.  Function Point Analysis is a perfect example of a very refined Counting technique.  I will explore this in detail in a later post.

This post is part of my series on Software Project Estimation:

Expert Judgement is the first estimation technique I’m going to explore. Normally when a team is trying to come up with an estimate for a project, they do something very similar. Someone will sit down with a list of features and guess how long it will take for the team to do the development. Most of the time these estimates vary widely from actuality. But, there are things that can be done to make them more accurate. 

The first step is to be carefull when picking your expert to do the estimate. The export should satisfy the following qualifications:

  1. They must be an expert in the problem domain. That is, they should understand the business and technical side of the problem.
  2. They must be an expert in the technical domain. They should have a deep understand of the systems that this project will integrate with. They should have been invovled with several projects in the past in this domain.
  3. They must be an expert in the tools and technologies being used in the construction of the project.

The next step is to not just take a single estimate from the expert for each feature. The export should give the following estimates:

  1. Best Case: If everything goes just right, how quickly could the feature be built.
  2. Worst Case: Assuming everything goes wrong and road blocks are encountered at every turn, how long with the feature take.
  3. Most Likely Case: Based on the previous two estimates and his past experience, how long does the expert really think the feature will take.

Based on these three numbers, an industry-standard “Program Evaluation Review Technique” (PERT) can be used to calculate the Expected Case. PERT does this by putting a different weight on each of the three numbers with the following formula:

  • Expected Case = (Best Case + (3 x Most Likely Case) + (2 x Worst Case)) / 6

By adding up the Expected Case for each feature, the total amount of time for coding and unit testing can be determined. The percentages assigned to each phase of the project can then be used to determine how long the entire project will take.

Using this technique, you are still dependent on one person’s opinion. Often times you can’t find a single person that meets all of the qualifications of the expert that you need to do the estimate. This technique can be improved by having several experts independently use the above technique to come up with their own estimates. Then, have all of the experts come together an discuss each of their estimates. By talking about the reasons for the differences, the experts should work together to come up with a consensus estimate. The numbers from this consensus are then applied to the above formulas to determine an estimate for the project.

Expert and Group Expert Judgement are great methodologies to use early on in the project when the required features are known, but little about exactly how the solution will be constructed.

In the next post, I’ll investigate another estimation technique that works early on but does not require experts in the domain to do the estimate.

This post is part of my series on Software Project Estimation:

The Cone of Uncertainty is another point that is very important to understand when trying to come up with an estimate for the execution of a software development project.  I originally planned on going pretty deep into the topic, but I found an article online that does a better job at it.  So, I’m going to cover it at a high level and then point you to that other article.

Early on in the project, very little is known about the detailed functional requirements and exactly how the solution is going to be constructed. Because of this lack of information, you need to understand that your estimate could be off by a certain percentage. As the project progresses, more is known about it so estimates get more accurate.

The following shows the amount of variance in estimates in different phases of the project:

  1. Scoping: -50% to +100%
  2. Requirements: 20% -33% to +50%
  3. Design: 20% to +25%

There are, however, techniques that can be utilized while putting together your esitimate that can help to make it more accourate.  In the following posts I’ll be addressing several different estimation techniques.  Each have their pluses and minues and are more appropriate at different phases of the project.

A very good article on the Cone of Uncertainty can be found on the Construx website here.

Many people have been emailing me asking about the estimation techniques that I am going to cover.  I’ll begin diving into those in the next post.  The first one will be ‘Expert Judgement’.

This post is part of my series on Software Project Estimation: 

To come up with an estimate for completing a software development project, first you need to really understand the process of completing a project.  This concept should be obvious, but too many times it is not.  People who have only been involved in the coding piece of a project sometimes do not understand all of the other steps that go into a project.  They will come up with an estimate for completing the coding, and not communicate to their management that their estimate did not include the other pieces.  This will lead to an estimate that is very small.

Typically a software development project will have six phases.  You may have  a couple more, or you may call these something a little different, but typically these are the main six phases:

  1. Scoping: The purpose of this phase is to put a high level boundary around the purpose of the project.  What is the customer asking for?  It’s a good idea to make a high level list of business goals, what features are in scope, and what is out of scope.
  2. Requirements: The purpose of this phase is to completely flesh out exactly what the customer is wanting.  The result of this phase will be a very detailed requirements document with the following sections: Business Requirements, Functional Requirements, Nonfunctional Requirements, Dependencies, Assumptions, Out of Scope.
  3. Design: You have now defined exactly what the customer wants.  The purpose of this phase is to detail exactly how the solution to the problem is going to be constructed.  The result will be a very detailed Technical Specification that will be a blueprint for developing the software.  My goal here is to make it so detailed that someone only moderately familiar with the technology and problem domain could pick up the document and complete the project.  Its always easiest to figure out the difficult parts of the project there before a single line of code has been written.
  4. Development: This is the phase where the actual coding is being done.  If the requirements and design were solid, then it should be a very smooth process for the development team to complete the construction.
  5. Testing: This is the phase where the test team takes the requirements and tests every aspect of the application to ensure that every requirement is met by the application.  Unit Testing should occur in the Development phase.  The testing that should occur here are: Functional Testing, Integration Testing, Performance and Load Testing, and User Acceptance Testing.
  6. Deployment:  This the phase where the application is actually rolled out and made available to the end users.

The above list is very high level.  But, from it you can see that there are a lot of different tasks and phases that go into the process of completing a software development project.  An estimate put together should include all of these.

One good way to make sure you allocate enough time to each of the phases is to keep records of how you do at previous projects.  If this is your first project, lean on some industry averages.  But, from then on out, keep records on your execution time and adjust future estimates accordingly.

The following outlines what I’m talking about.  Let’s say your project delivery rate normally falls out as follows:

  1. Scoping: 5%
  2. Requirements: 20%
  3. Design: 20%
  4. Development: 30%
  5. Testing: 20%
  6. Deployment: 5%

Having these statistics on hand is very powerful.  If you are completing a project very similar than several you have done in the past and you have these numbers, you can estimate just the construction of the project and from that extrapolate how much time the other phases will take.

So, while putting together a project estimate, the first key is to keep in mind the entire process of software development.  If you do not do this, you will miss pieces and your estimate will be too small.  The next key is to keep detailed data on your completed projects so you can use those numbers to aide in estimating future projects.

In the next post, I will talk about the Cone of Uncertainty, and how the accuracy of your estimate varies based on when you make the estimate.

This post is part of my series on Software Project Estimation:

One of the biggest challenges I have run into in the course of my career is coming up with good estimates for completing software projects. So many times I am overly optimistic when coming up with an estimate, or I completely forget about certain pieces or steps, and the resulting estimate is insufficient.

When the estimate for a project is too small, one or more of the following will always happen:

  1. Requirements will be either intentionally or unintentially left out of the finished product.
  2. The team will rush through the construction of the project. This rushing will cause the quality of what is being developed to suffer.
  3. Time will be stole from later phases of the project to allow more time during construction. Most of the time this time will be taken from the Testing phase.
  4. The project  will be completed, but it will be delivered late.

In all of these cases, the project should be considered a failure. The customer will not be happy with the product they have received.

An estimate for a project that is too large can also be a problem.  The customer may reject the project because they don’t think they can afford it, or too much budget may get allocated to this project causing other projects to not be funded.  Another danger is that Parkinson’s Law may come into play.  This law states that the amount of time required to complete a task will always expand to fill the amount of time available for it’s completion. So people begin working slower on this project when they could be completing it and beginning to work on other things.

All of this can be avoided by establishing good estimates early on in the project.  But how can you come up with a good estimate to execute the project? There are a wide variety of methodologies for doing this, some of which are more accurate than others, and some can be applied earlier in the project than others.

This series of posts will address different aspects of project estimation and dive into several techniques.

The following posts will deal exclusively with the software development projects.  That’s where my experience lies.  But, I’m sure there are concepts and principles here that apply to the completion of any type of project.

One question I’ve been unable to answer about this blog is the standard, “what’s it about?”  Is it about technology?  Software development? Business? Music? Books? My family?  Well, the short answer is: it’s about everything I’m interested in, which would be all of the above and more.

Well, I’m finally branching off the family posts into a blog that we are going to be sharing as a family.  Introducing petersfive.com.

So, I’m starting a new job tomorrow. Today is my last day with StoneHenge Partners and I begin a new job back at Dollar Thrifty Automotive Group tomorrow.

My time at StoneHenge has been great. For those that have been in this industry a while, you know how different the corporate and consulting worlds are. There are great things and challenges about both. I’ve learned a ton from the consulting world by working with lots of different companies, and StoneHenge has given me lots of opportunities to grow in my career. Leaving StoneHenge was very hard; I feel like we are a family. But, sometimes I just becomes clear that it’s time to move on.

I formerly worked for Dollar Thrifty for about 3 1/2 years. DTAG then outsourced IT to EDS and I became an EDS employee. I worked for EDS for about 6 months, then left and came to work for StoneHenge.

Recently, however, DTAG has become bringing parts of IT back in house. They then announced the hiring of 19 new IT managers. I applied for one of these positions and was offered the job.

I’m excited for the change, it seems the IT department is moving in the right direction. It will be a lot of work, and a big change from the consulting world. but I’m ready for it.

A new blog post of mine has just been published to my company’s blog. You can find it here: The difference between project success & failure

Older Posts »