|
Only Try to Predict the Near FuturePosted by admin admin in Untagged |
Believe it or not, building software is not like building a bridge. An engineer can pretty much predict how many tons of steel it will take, how much labor, how long depending upon weather, etc. It’s a science. It’s predictable and repeatable.
Software, not so much. Yes, we can build predictable and repeatable processes, but development is more art than science. The only absolute is that the further out in the future you look, the more unfocused your vision becomes.
Most software development projects play a game of “gotcha” between the business and development sides. The business stuffs as many requirements and as little funding into the project as they can, and the developers try to narrowly interpret the requirements to meet their own goals. It usually doesn’t work out so well — software is delivered that technically meets the requirements, but it doesn’t do what the user needs.
Longer projects insert even more uncertainty into the process. When you’re taking large leaps, it’s hard to see where you’re going to land.
I’ve been running software development projects for the last 20 years, but I’m still surprised at how many experienced people just don’t get this concept. 18 months ago I flew across the country to attend a five day meeting on behalf of a client to evaluate the prospects for a huge software implementation being undertaken by a Global 1000 company. This project would involve hundreds of people, millions of dollars, and every line of business. And by the way, it’s a mission critical function for the company.
The meeting started off well enough. They had built a near consensus among all of the business groups that they needed to do the project, and they laid out a schedule starting with a set of “meta-meetings” that would refine the process that would be used to perform the implementation. They had roughly set out 6 months of requirements gathering and analysis, and had a vague idea that the development of customizations would be another 6 months, so the project would take a year.
The last day, a senior VP from the technical side gave his presentation. He obviously had not attended any of the earlier meetings. He laid out a detailed project plan for development of the customizations that would take place in parallel with the requirements analysis (overlapping development with requirements by 4 months). If they coded like crazy, they could have things ready for testing one month before the go-live date that the CEO seemed to think was a good idea. Mr. Senior VP really wanted to impress the CEO, so he wasn’t about to deliver a message that the schedule was outside of what the CEO was thinking.
I was absolutely flabbergasted. It wasn’t my job to stand up and call him a blithering idiot, but it was by far the greatest display of sheer stupidity I have ever seen from someone that calls themselves a developer. I so badly wanted to shout out “How can you possibly predict your development times when you don’t even know what the requirements are?”
Instead, I flew home, called my client, and said “This project is DOA.” 18 months later they’ve missed their first go-live by 6 months, the second by 3 months, and all indications are that they’re going to force a go-live a year late with a system that in all probability won’t work. By the way, the resource load is double what they thought it would be, so they’re 400% over the predicted budget.
Most projects suffer from a Catch-22. They really run on politics, not engineering. You can’t get an open ended project funded — the CEO will want to know that you’re going to spend $X to get $Y benefit before you can start. So you have to make a wild guess at what you’ll need to get the job done, and then hope that things go well. Unfortunately, hope is not a strategy.
Imagine sitting down with a builder and saying “I’d like to build a house.” He answers, “I can build a house for $100,000 in 6 months.” You answer “Great!” and then draw up the plans for the house you’re going to build. The catch is that Biltmore House is also a house, but it’s going to take more than $100K and 6 months to build. Holding a developer to a schedule like that makes about as much sense.
Smart developers know that they best they can do is predict ranges, and then modify their ranges as the dates approach. Ideally, you get the funding to do the requirements phase before you even talk about ranges. Whenever my upper management wanted to jump into a large project, my answer was always that we’d need X months to put together requirements and estimates. I was usually able to get away with that, because what most developers don’t understand is that the business people just want reliable answers, not pie in the sky.
The key is to constantly evaluate where you are. When we started our development project for Promote My Site the end vision was very different from what it is today. I think our vision has gotten better — the product will be much better, but it is also a lot less complex because we’ve been able to get rid of things that we don’t really need. We don’t have a cast of thousands working on this, but the team is big enough that it’s complex.
We recently decided to try for a stretch goal of a go-live in a window that would fit with some other things we were doing. We didn’t commit to a certain date, we just said we’d like to be able to go live on Month X, and a month before that we’d have a better idea of how it would be going. The planning side (stuff like burn rates) is well taken care of — we’ve got lots of runway there. The benefit of flexible goals is that you can bring your delivery dates in if your team is functioning well.
We had initially thought of outsourcing the development of this entire project. In retrospect, that would have been a disaster. We’ve had so many iterative changes that it would have been impossible to pull it off when everyone isn’t on the same team.
I can predict what my team will get done today with near certainty. It’s not that often that a disaster jumps up and destroys that schedule. The prediction for this week is still pretty clear, and you’ve always got the weekend to make up for slips. And if one team member hits something, the chances are that others can help out.
A month out is a lot tougher — if there’s a 1% chance that you’re going to hit a snag in a given day, then there’s a 20% chance you’ll hit a snag in 20 days. It’s all just a matter of how big the snag is. 3 months out is still very doable, but you have to really know your team and your subject area. If you’re breaking new ground, the best you can do over 3 months is say it’s a 3-4 month project.
So consider the wisdom of committing to a specific date for the end of a year long project, before you even know the scope. And frankly, I’ve never known a developer that hasn’t had to deal with that kind of project.
There’s a much better way to do it. Plan small, iterate, pay close attention all the time, and be reasonable. So far, the Promote My Site project has been pretty fun and I think we’re going to do a good job of hitting our goals.
Blog 
