Let me tell you a story about my first job: a long ago I was hired for my very first software development job. I worked with some really talented people on a cutting edge technology and it was fun.
After a few weeks at work I’ve noticed something odd – Although I was hired to write code I’ve spent more than 50% of my time doing other things - I’ve administered development machines, created test environments, built installers and such.
Being a junior developer I accepted this as a necessary evil that must be done in order to produce value for the organization…
Fast forward a few years I’m no longer a junior developer but the overhead is still the same – but something changed, I no longer spend my valuable time doing repetitive tasks.
The change didn't happen overnight, I wasn’t even aware that I had a problem until while complaining about the hassle of releasing a new product and how long it took – my team lead asked my why I didn’t automate the process.
A few words about the release process: it was well documented and consisted from multiple stages - from building multiple installers based on the product offering to uploading the results to our site using FTP.
Automating this process seemed like a lot of work most of it pretty trivial when done by hand - it seemed like a bad tradeoff to work two days to create an automatic release process instead of two to four hours to release the product manually. To my amazement my team lead insisted I drop what I was doing and do exactly that, after two days I had a release process that with a click of a button – fire and forget style. Since then I no longer needed to do the tasks that was the manual release – and looking back at it I know today that it was an error infested waste of time.
I’ve understood my lesson – and nowadays when I find myself frustrated with a task I do I immediately look for a way to automate it, not only is it a waste of my time but because manual steps need to be documented while an automatic script is self documenting.
One example for a process that must be automatic is Continuous integration - It always amazes me when a development team fails to automate it’s CI process – Instead of trusting all of the developers in all of the teams to remember to run all of the unit tests each time – have a server that gets the latest version of the code and runs all of the tests for you. Although it’s still a good practice to run the tests on your machine before commit/check-in we’re human and so we err.
My advice to you is - next time you feel like you’re wasting your time doing a boring repetitive task, just ask yourself how you can automate it…