Software development is a career in defeating your own spirit. We walk on tightrope project plans with no safety net below us. We navigate through seas of software development lifecycles, often never reaching land and we sometimes remain lost at sea forever.
Yet we still assemble for the next journey, chart new courses which "guarantee" a speedy and safe trip, haul in the best equipment, get an expert skipper and... get knocked out again.
In all of this, our human spirit is sacrificed and our personal contentment is forsaken for tight budgets and due dates that oscillate like a dull ache between our ears.
School and university graduates often ask me about the merits of pursuing a career in software development. Often the expectation from the graduate is that I have some life-inspiring piece of wisdom that will propel that young person into the economically active labour force. I am always hesitant to answer. I have no inspiring wisdom because I know full well that I may very well condemn that bright mind to a life of masochistic hell.
But recently my answer goes along the lines of: "Yes, it is a heck of a lot of fun... if you want it to be!"
Software development is a career in defeating your own spirit... if you have forgotten how to have fun while doing it. Many of us began our careers in software development tinkering with "Hello World" programs on tiny little home computers with 64K RAM with a TV for a monitor. The thrill of displaying a few words on screen in your first program was nothing short of ecstatic. Those two lines of code gave you even more confidence to display them in colour. Next step, scrolling text and before you knew it, displaying text stored in files with word wrap turned on was on the cards.
That simple coding methodology of baby steps which instil confidence to go forward is exactly what agile methodologies promote. Short, sharp coding iterations many times in an hour that take you ever closer to your goal. You can bring back the fun by increasing your confidence and that of your team by adopting a few simple agile practices.
* Test your code all the time by writing code that will test your code. If your test fails, then that code is not good for production (red light moment). If all your tests pass (green light moment) you are good to go. If production code fails (the dreaded bug moment), don`t haul out the debugger and take that self-defeating journey. Instead, write a test that proves the failure. Then fix your code so that the test passes. Test-driven development lifts your spirit and increases your confidence. And it`s a heck of a lot of fun...
* Refactor your code all the time. Refactoring is the art of changing the structure of your code without breaking it. The compiler is really not impressed with fancy code and neither will your team be when it comes to maintaining that uber-cool five line code snippet that achieves six things. You really do not want the burden of being the only person on earth that can understand that five liner. Refactor it, get that monkey off your back and lift your spirit.
* Co-own all code. Taking collective responsibility for all code creates a team responsibility. Some of best teams have average players that know that they have to win. Period! Software development teams are no different. If there is a bug in a piece of code (by the way, you know this because a test failed) and you did not write it and the author is not available, fix it yourself and check it back in. There is only one version of all code and everyone owns it. But remember that this is not an excuse for not being courageous enough to acknowledge your own errors. Courage removes fear and lifts your spirit.
So what do we need to pack for this new journey and what will it cost? Not much, actually. In fact, everything that you need is available at no cost. There are excellent open source offerings that you can take on board, right now, that will help you every step of the way. All of the products mentioned below are available under open source licences and will only cost you download time.
* To start with test-driven development, you can try jUnit (http://www.junit.org/) for Java or nUnit (http://www.nunit.org) for C#. In fact, many languages from C to Ruby to Python offer test-driven libraries today.
* In the spirit of the team responsibility, continuous integration products like CruiseControl (http://cruisecontrol.sourceforge.net) will automate your builds, check out code from version control, run all your tests and report the results.
* If you don`t use a version control product, then you better take on CVS (http://www.nongnu.org/cvs) or Subversion (http://subversion.tigris.org).
* Development tools that offer intelligent and strong refactoring capabilities will also help. For Java development, you can try out Eclipse (http://www.eclipse.org).
Software development is a career in fun. It helps you achieve a state of mental contentment and peace, individually, and as a team... if you are prepared to change your lifestyle by writing tests for your code, refactoring your code to make it simpler and having the courage to own all code with the rest of your team. Are you having fun yet?

