Sharpening your Axe

There’s a famous quote by Abraham Lincoln that reads, “Give me six hours to chop down a tree and I will spend the first four sharpening the ax.”  What good ol’ Abe was trying to communicate with this saying is that proper preparation is key to successfully completing a task. Not only will sharpening the blade require you to assemble the necessary tools, it also saves you work when it comes time to chop down the tree.

I often think of this old adage when I am given a new report to build or feature to develop.  Instead of an axe, the tool I have to sharpen is my brain and instead of chopping down a tree, I am building software.  I am often tempted to start writing queries and assembling data before I even have a firm grip on the core of the problem.  I remember when I first started writing software, I would start furiously typing out queries and tests only to realize I was writing code that didn’t directly fix the initial problem.

Thankfully, there have been others who suffered from this lack of preparation who studied development cycles and established best practices for proper software development.  Some of the leading software development practices today are Agile, Waterfall and TDD (test driven development).

Most of the development cycles take root in waterfall which illustrated a cascading model of processes, in which progress is achieved through flowing downwards through some core main stages: requirements, specifications, design, implementation, verification, maintenance.

The waterfall methodology is appealing because specifications and designs can be created before implementation begins.  Waterfall is great concept as long as both the problem and solution are well known.  With this flow, the waterfall almost becomes an assembly line and code can be written easily.   If Abe were following the Waterfall methodology, he would have spent the first 3 hours buying the best ax, sharpening it and looking up effective youtube tutorials on how to swing an ax.  The next 3 hours would have been spent chopping down the tree.

Although waterfall provides a very clear road map to a successful launch, what happens when the solution isn’t 100% understood before development beings?  What happens when the designs and specifications made in steps two and three end up being poor choices?   For our analogy, what if Abe sharpened his ax incorrectly or discovered the YouTube video showing best chopping techniques was horribly inaccurate?

Enter the Agile Product Development Cycle.  The Agile Development Cycle starts with user stories as the driving force behind production.  Filling in the phrase, “As a ____ user, I want to ______” gives developers a clear understanding of the end goal.  In addition to starting with a customer first mindset, agile incorporates feedback loops that include testing, bug fixes and release planning.  The agile methodology takes the best part of waterfall development but starts with a solution-first approach that challenges developers to sharpen before building, test before striking and the freedom to readjust after every swing.