Wednesday, 16 February 2011

The pros and cons of rolling your own software

There comes a time in every engineer's life when you see a problem and think, "I could make a good solution for that. I just need to create a program that would do xyz, and I'd be sorted!".  There's some solutions out on the market but yours will be better. And it will be just the way you wanted it because you coded it yourself. With love and tenderness...

Most of the time, I'm opposed to IT Operations building software that's anything like a commercial or free alternative. Because 9 times out of ten, it won't be better, or cheaper. Just different, and most likely a bit crap in the long term.

Here's my pros and cons of rolling your own solution vs customizing something off the shelf

  • You have the opportunity to design something that is tailor made to your needs. There's nothing like a solution that fits perfectly. I didn't think much of tailor made suits until I bought one - and I looked gooooood....
  • You have to make it. This is a lot of time and effort which might be better spent dealing with other problem you could have solved in less time. Also, designing software is actually quite hard. If its not your strength, you need to think twice.
  • You have to support it. Once the pleasure in creating the first usable release is over, you've got to deal with every day life. Bug fixes, documentation, extra features. It's not a one night stand, it's a relationship you have to commit to.And the day may come, when you're blamed for every problem with the software, and you'll curse the day you ever conceived such a monstrous child.
  • Someone else will have to support it when you're gone. This is one of the biggest reason NOT to write important software that your team will rely upon. Coping with the loss of the creator is something that is never really planned for in IT Ops. I've seen too many pieces of software that caused pain on a regular basis but nobody knew enough about the code to make any fixes. Normally it continued being a pain until it was replaced with a commercial product.
  • It might do one thing better than the alternative, but it won't do most things better. Homegrown software is often made when an engineer has a particular feature or style of working that they are passionate about. But software is about more than a cool feature that you like, it's about fulfilling business requirements. Can you really put down on paper why it's an all-round better product that the alternative?
  • You can't 'Google' it. If you're dealing with well known software, and you've got a task you want to complete or an error, you'll almost certainly find some help on some forum. But if you're the only person using the software, it means you have to solve the problem yourself. This sucks.
My general recommendation for customized solutions
  • Stand on the shoulders of giants, and have a look around. See what can be achieved if you work with something already on the market. They've been in your place before and done a lot of the groundwork. Anything you do extra is now truly adding value to the solution.
  • Design it before you make it. You can hack small thing together in a few days or even a week or so. But bigger projects need to have some sort of plan so you can specify what you're going to achieve and how it's going to be done. It's much, much easier to find that it doesn't work on paper, than to build it and find out the same thing.
  • Present it to the team. If you're project is worth it's salt, it should stand up to a little scrutiny from your peers. This doesn't necessarily mean they'll agree - people can object for a variety of non-business reasons. Typical one's being a general lethargy towards improving services, uninformed bias towards a particular product or programming language (e.g "MySQL is for amateurs, you need Postgres"), or a general fear of something new. But either way, it's a useful process.


  1. Nice post you nailed a few points . I'm currently making a version of Outlook + OneNote for myself .

    I'm doing this because MS's software has some problems that they will always ignore ( ie. managing Yahoo e-mails , security and so on).

    I'm using Adobe's AIR with JavaScript and HTML.

    What do you think ?

  2. Thanks for commenting, I'm glad someone found it useful!

    Now, Outlook + OneNote... I tried using OneNote before but it's never quite grabbed me as something I *need* to have. Now Outlook is a pretty large program with many features so writing something as extensive as Outlook AND OneNote sounds impossible (A number of well funded commercial and open source organisations have tried and ultimately come up short).

    But really you need to ask yourself what is the specific problem that you're trying to solve and for who? Make things easy for yourself, you don't have to rewrite a mail client because it's been done many times over. Would you be better off extending an existing project? That way you can spend time on the real issue. Always try and make things easy for yourself.

    By the way, while I don't use One Note, I do love note taking and Evernote is my current favourite. I also use mindmapping a lot.