Been eating and hawking stuffs related to Application Lifecycle Management lately, especially Microsoft Solution Framework, Visual Studio Team System and Team Foundation Server.  During the workshop that I delivered, I often mentioned certain things that seem to be very useful to know.

Amazingly, they all have 3 sides to them.  I’m sure you all have heard about it somewhere during your career as a developer or what not, but nevertheless, I think I’ll share what I’ve learnt and I’m sure you can benefit from this if you don’t already know them.

1. The Iron Triangle of Time, Scope and Cost


Most development project owner will want to control all three sides of this “Iron Triangle” and they sometime can be unreasonable about it.  It’s your job as the development team to educate / reason with the project owner that in all eventually, they realistically can only control two out of three and will have to sacrifice the third to achieve the other two.

So, if the project owner want all the features implemented and at a fixed monetary cost, they will have to compromise on time needed to complete the project. 

If he / she chooses to have the project completed with all the scope specified and within a fixed time (according to their schedule, not what is estimated by the development team), then they will have to pay extra cost (it will be more expensive since you might need to get a more proficient team member or tooling).

fast_good_cheapAnother variation of this triangle is Cheap, Good, and Fast (heard it from Chad Hower in TechEd SEA 2007).  If you want it done Cheap and get it done Fast, then for certain you won’t get a Good product.  If you want it Cheap and Good, then be prepare to wait for it (perhaps due to your cheap labor will need to ramp up on the technology to deliver your product first).  If you want it Good and want it delivered Fast, then be prepared to pay a lot more (it’s not going to be Cheap).

One other note on this, adding more human resources in a middle of an ongoing project will NOT help you speed up the delivery time most of the time since the new resources will need to time to get up to date on the current project situation, technology, etc.  There will be some knowledge transfer time incurred when you do this that will impact the deadline.
In most development project, it is often suggested to cut scope in favor of paying additional cost and time (Cost & Time are fixed, since most of the time it will be a fixed cost contract and the client have certain timeframe in mind).

Amazingly, one promise of Scrum (heard from Jeff Sutherland’s InfoQ Root of Scrum presentation) is the ability to break this triangle and basically offer the project owner the ability to “have the cake and eat it too”, so to speak.  Some people argued whether such thing is really possible or not, but I’ll leave it out to you to decide if it’s true or not.

2. The Three Legged Stool of People, Process and Tool

People Process Tools

There are a lot of factors in play in software development project which are:

  1. Tools
  2. Method & Process (I often think these two are actually one and the same)
  3. People

Each of these three can be viewed as the each leg of the three legged stool.  If any one of them is not present, your stool will certainly become unbalanced and will fall down.

For example, you have the best tool and the best process in the world, but the people doesn’t want to use the tool or the process (too complicated or what not).  Your project will not be successful.  Or you have the best people and the best tool in the world, but your process is a mess, you will also fail, etc.

As one of my mentors said to me, keep them in your pocket and pull them out when you need them :).  I hope you can use these two three sided tools / knowledge to your advantage and success of your project.