Contemplating success
22 Feb 2007
Getting out of the never-ending mad dash that ruled my life for much of last year is starting to give me time to think about and hopefully learn from the events from that time.
Lately this thinking has revolved around how to do technology right, and how technology should be treated by business. There's always lip service about what technology should be to a business, and how the engagements should work, and so forth. But I think we so often find ourselves working from a flawed understanding of what success is to the business that is initiating the project.
A common position I end up in is taking over what pretty much anyone would call a failed project - a project where a lot of money has been spent and the resultant product is not even of sufficient quality to expose to others, let alone started to make money. Aspects of the project that have already been paid for have been found not to be of sufficient quality (or even delivered at all), and need to have more money spent on them.
But I hack on the existing project for a few months to get it to the point where I wouldn't put a bag over my head to avoid being associated with it. The project launches, and after a few rough patches and late nights, I get the last major kinks out, and the project starts making money. Some might even call it a "success".
But is it? If I'd been on the project from the beginning, my arrogance forces me to insist that the project would have been delivered properly the first time, with less back and forth to QA, with fewer publically-visible problems post-launch, and thus would be cheaper in terms of direct costs and indirect costs to regain the confidence lost during this whole process. So, while the second part of the project (which some may call another project entirely) in itself is successful, the entire process of developing the technology was more expensive than it needed to be.
And that's not even the most damning difference. If I'd been on the project from the beginning, my arrogance forces me to believe that the end result would be better in the way that most matters about technology in the long run - how it facilitates or hinders changes in future. Or, put simply, a solution I'm involved in would give the company agility.
Many companies have a great idea, and get to market by the skin of the teeth of the people they could find and afford to do their initial technology. And, because of the way the technology was rushed and was cobbled together, changing it is often scarily hard. Which isn't a problem at first (when they have the existing developers who remember all the ins and outs of the system), and so the company's great idea and timing and efforts make them profitable and renowned. Fast forward a few years, and they're cursing their main source of income and often the thing they're most famous for (if you're talking a web site, for example).
Why?
The developers are usually gone by now. Even if they aren't, they no longer have the ability to keep in their heads all the hacks they've been forced to put in to the original system to keep it ticking over "until we rebuild it all". There's entire pages of code dedicated to special cases for particular user names, groups, and so forth. When changes do happen, all effort is put into reducing the intrusion on the original system, because the company has been bitten by the hard-to-detect consequences of previous changes.
Success or failure?
At the beginning, a great idea was all that was needed to get into the market, and delivery could be made timeously. Now, there are more people available, and there's more money available. Sounds good... But, despite the additional people and money, even small ideas and small changes take a long time to make, and the next great idea is near impossible to implement. These are the small and big ideas and changes necessary to continue being relevant - to not become an also-ran of the very area they once owned.
Unless your business usage of the technology is once-off - a gimmick web site that has a specified shelf life - then you have got to think about the cost of change built into that technology. (By the way, this is also why open source and/or open standards are such a no-brainer in the long term - you never end up having your data and processes tied up in some proprietary system that makes the cost of change too high when you need to change something about your business.)
I don't claim to have the answer to how one can define success, but this is the simplest way to describe what I'm feeling now:
Success can't be measured only by what you have achieved - the resources, the accolades, and the good will. More important than those, it should be measured also by what you can achieve from this point on.
(This also applies to any development project independently of the business that initiates it. Taking the laziness as a virtue approach, you can measure your success by how much effort you save yourself by building something that's easy to maintain and extend in future.)
2 Responses
jerith — February 23, 2007 at 12:41 PM.
In other words, "do things right the first time" and "maintainability is key". I concur wholeheartedly.
I often find myself writing quick hacks to do something, trying to use the hack a second time and refactoring it into something I wouldn't be embarrassed to show other people. Usually, the refactoring makes it much less painful to use and extend.
Neil Blakey-Milner — February 23, 2007 at 10:21 PM.
Well, except "right" depends on what makes the project most successful.
Often, it's impossible to do what is technically the best solution, because you don't have the time or money to achieve what you want. If you go over budget or hit the market too late, then the business won't be a success, which ultimately means the project isn't a success. Even if it's pretty, and it is extensible.
Even if you don't do things "right" the first time - either in terms of technology prettiness or in terms of maintainability, it doesn't stop you from fixing it later. Which, I'm afraid, means rewriting things.
All too often, I see a core service remain hobbling along seemingly just passing the time when a rewrite would allow the company to regain its innovative growth in their area. It's always too expensive to do it "now", but many years on, way after I've gone, the same "it's too expensive to do it now" excuse is being given to those that followed me. And while it's nice to know I was right in terms of how the paralysis is making the business increasingly irrelevant and more easy to compete against, I'd much prefer to be able to be proud of how I've helped the business succeed. ("Told you so" is not something I think one should say in anything other than a joking fashion.)
Even if you can't do things technically right in terms of good, robust, elegant, and extensible code because you can't afford to hire the sort of programmers you need to do this, what you really can't afford to do is not get someone involved to make sure the design of the software is going to not make it hard for you to rebuild.
(Just a hint - it'll be hard if you end up forced to continue to use a particular database or data structure or data format, or a particular programming language, "framework" or operating system.)
Neil
Have your say