“Just get it to work”! We have said this many a times and even been at the receiving end a couple of times. We think that just getting something to work is enough. Just because something works now ensures it would continue to work even in the future. Well, life is full of surprises, some very nasty.
We have seen how things have been held together with gum and bailing wire and they “seem” to work at the moment. After some time, one piece begins to fall apart; you try to fix it; another part comes loose; and ergo begins the downward spiral towards certain death. At least for the object in question. Software is not very different. If you focus on just getting things to work, you invariably and inadvertently slip in a small bug. Or maybe, the code become uglier and less maintainable. So each small fix adds to the list of hidden bugs further. Some bugs do surface occasionally and get fixed in the same “just get it to work” spirit thereby reducing the quality of the overall code.
You might be aware of the above phenomena albeit in a different field altogether – managing your finance. In order to pay off some debt, you start a new debt with another lender; in order to pay him off, you approach another lender and you begin to look down the spiral. Software world recognises this problem and calls a similar scenario (as described in the paragraph above) as technical debt. You might incur some technical debt in the short run but you must consider paying it back as soon as you can. In fact, sometimes you would have to prioritise it over the new features you are planning to have built.
So, while one focusses on just getting the software to work, one should also look at the mess one is creating in the process. Take some time to repay the debt. This is where good programming practices like code review, unit testing, etc. come into play. Unit testing acts like a safety net ensuring that in the haste to fix one thing, you have not broken another.
At Appster, we frequently do code reviews to ensure that the code being written follows the generally standards and is easily maintainable. We are also beginning to take up unit testing on mission critical projects or mission critical components of regular projects.