Developing software is a complex task. Ask any developer. It’s made even harder by the three competing goals of software development: Time, Money and Features.
In an ideal world every software development project would be delivered on time, within budget and with all the features originally requested. Unfortunately this is very rarely the case.
Managers know that delivering the holy trifecta of time, money and features all at the same time is impossible. Why is this? The answer is simple. All three of these goals compete against each other.
The three goals combined create a negative downward spiral. More features means the project takes more time. More time means the project costs more money. More money means the client wants more features. This cycle goes round and round, and is a major factor in why so many large scale software projects fail.
To stop the cycle you need to lower your expectations: only try to achieve two of the goals. As a manager I’d suggest you look at features and time.
Features are the real drivers behind any software development project. If you can limit the feature set, you can deliver your project on time and enjoy the accolades of your colleagues and superiors
Unfortunately most software projects throw every idea possible into the mix because “it must have this feature”. Of course this results in a mammoth feature set and the project is doomed before it has even begun.
A wiser way to determine the features required is to only pick the ones that will help achieve the primary purpose of the software.
For a new system this should be the minimum features required to ship and provide value. For an existing system there should be no more than three new main features per release.
Got some obscure feature you think will be useful? Don’t do it! Once enough of your paying customers have asked for it reconsider whether you want to do it or not. Stay focused on the core features for the product!
You can use time to your advantage as a software development manager. It’s all about making the a project deadline work for you instead of against you.
Whenever a deadline is set, reevaluate which features can and cannot be achieved by then. Then get the customer to sign off on it.
As a manager you need to be negotiating with the customer all the time on what is realistically achievable. This is what you get paid for and should set you apart from your developers.
Your average developer is going to try and code up every feature. It’s in their blood. It’s a technical challenge that they must defeat. It’s a great trait for a technician but not a great trait for a business or organization.
A business or organization wants to complete projects to make profit and release resources for other projects. Helping a customer get ‘every feature’ they want doesn’t achieve this.
Now I’m not suggesting we develop crappy software or take a churn ‘em out attitude. I don’t advocate that for one second! All software we write should be error free and provide value to the customer.
But that’s the thing. In my experience what the customer thought they needed and what they actually needed where two entirely different things. All the extra time and money spent developing those extra features was a complete and utter waste of everyone’s time, effort and energy.
I’ve used this technique dozens of times. As a deadline looms closer or is bought forward I cut the feature set and say they’ll be included in the next release. In 90% of cases the cut features are never required.
You will ship your software project.
Once your product has shipped you will quickly tell what is right, wrong or missing. I cannot stress how important and invaluable this information will be!
By reducing your feature set and shipping on time you won’t have wasted years developing a product then finding out you got it wrong or all those “must have features” are not even used. This will save you money, time and your sanity.
You will also know exactly what you must do next for version 2 of your product. Again you pick the 2-3 most important features and ship them. Then you will receive more information and a positive feedback cycle is starting to occur!
Your developers will thank you
As a manager one of your primary responsibilities is to make your developers job easier. One of the ways you do this is by not making them waste mental energy on stuff they don’t need to!
So if a deadline has been brought forward but you managed to get the feature set reduced you’ve helped your developers!
It’s relieving for developers when the scope of a project adjusts in line with deadline changes. You actions will have saved them much unnecessary stress and likely long hours slaving away.
What are your thoughts? Let me know in the comments below!
You’ll get articles like the ones you see here on ManagingSmartly.com, along with some extra content that I only send to my list.