Revenue – Costs = Profit (AKA the bottom line). Every businessman knows this formula. If you’re in the software business, your goal is to sell software for more than it costs to create it.
Most companies I’ve worked for are obsessed with selling more software to increase their revenue. One way they do this by adding more features to the product so it’s more appealing to customers. If you can release that new feature faster than your competitor, it will give you an advantage over them.
The problem is, most places I’ve worked at ignore the cost of adding new features. Software is like a car in that it needs to be maintained to run properly. If your company is obsessed about getting to the next checkpoint and ignores how long its gone without adding oil to the engine, it will eventually break down.
This is a gradual process. When the project starts, new features can be added in a reasonable amount of time. As time progresses, it takes longer and longer to add new features. Eventually, after adding a new feature you may discover that an old feature breaks. If things get bad enough, it may seem like fixing one bug creates two new ones.
At this point, a lot of software engineers will try to convince management that the whole product needs to be rewritten. If you go that route, you’ve probably noticed that it starts off great but over time you end up exactly where you were: The whole system breaks down and your development team is saying that it needs to be rewritten again. If you don’t understand what put you in this situation, you’re doomed to repeat it.
How did you get here? The problem is the company focused solely on revenue (e.g. adding features) when it should have focused on the bottom line. You have to expend effort to reduce costs once in a while. Every time a developer modifies some software he should put a little effort into making the code a little easier to maintain. This is called the Boy Scout Rule and it says: “Always leave the campground cleaner than you found it.” If you don’t, eventually the place will become a dump and nobody will be able to camp there. In other words, if your software is not regularly maintained, it will become prohibitively expensive to change.