Building your own software? Make sure you include ‘tests’!
October 30, 2007
Turns out everyone thinks it is easy to develop software these days (including us). What, with the Ruby on Rails framework anyone can write beautiful code, right? Sure, but do you know what to include with your code? Two years ago we built a number of ‘web 2.0′-style applications using Ruby on Rails. Want to know a secret? We didn’t have any idea what we were doing. Sure, we thought we knew what we were doing, but at the end of the day we built a load of crap (we released the crap using the GPL so if you want to see the source code you are welcome to it).
We had to get serious about our software development efforts because our clients were serious about keeping their applications up and running. After we got ‘real‘, we realized that only 50% of our software development effort is related to the code that makes the application run, while the other 50% of the effort is related to ‘tests’ to make sure the application keeps running as things change.
On the Architel side I have encountered more and more customers who rely on software developed either in-house or by a third-party. In three cases this week I have encountered source code in ‘make or break’ web applications (i.e. the company’s revenue is directly tied to their applications), but in all three cases no provisions were made for ‘tests’. Applications are becoming more and more complex, requiring integration with third-party APIs, remote database servers, Amazon S3 and so on. Make a single change and and application might not work, but the fact that it is no longer working might not be that obvious. Of course these customers want Architel to monitor their applications and keep them running despite the fact that they have multiple developers and managers make changes all of the time? If you are having software built for your company, make sure your scope of work includes various methods to ensuring the application works (i.e. notifications for failures) and also include as many tests as possible so that when you make changes or additions to your code you will understand how those changes affect functionality. Just my two cents…
