The Case for Craftsmanship in Software Development
The adage that software makes the world go round is not hyperbole. Our lives literally rely on the stability of thousands of (mostly) unseen software systems in industries as diverse as banking, healthcare, and air traffic control. But because they operate out of sight, they’re usually also out of mind and easy to take for granted.
Even software that manages a seemingly simple collection of tasks (keeping track of your appointments on a digital calendar, for example) can be enormously complex and require the consideration of—and solutions for—thousands of use cases. Solving for each use case requires careful thought, planning, and execution. A single overlooked detail can derail an otherwise robust and useful application.
It’s a worthwhile reminder that the computers, smartphones, and other sophisticated machines in our lives don’t (yet) think for themselves. This means that every task a machine accomplishes—from gee-whiz to humdrum and every stop between—is only possible because of software that was planned, designed, and written by a human being.
It is here that we meet one of the great paradoxes of our modern tech-centric age: we rely heavily on software to manage tasks our brains simply aren’t capable of undertaking (keeping track of all commercial aircraft in flight at any given moment, for example), but the software charged with taking over those tasks too complex for human brains must ultimately be created BY a human brain. It’s a mental Mobius loop that would make Christopher Nolan proud.
This paradox shines a bright light on the fact that the human element is the single most important variable in software creation. The previous experiences, methodologies, and sheer skill of the developers tasked with creating or maintaining a software system comprise over 90% of the variable factors that will determine if software succeeds or fails. If you’re the buyer of software development services, it’s incumbent upon you to dig deep and ask the right questions about the capability and character of the team you’re contemplating hiring.
A More Artisanal Approach to Software Development
The harsh sink-or-swim nature of software development is the biggest reason you should seek out a partner who adheres to the tenets of craftsmanship to deliver superior applications. It may seem like a malapropism to apply a word like “craftsman” in a software context, but consider the complexity and expense of most software projects: wouldn’t you prefer to have “a person who practices or is highly skilled in a craft; an artisan or artist” (to quote the Oxford definition of craftsman) working on something that is typically mission-critical to your company?
In software development, a craftsman prides him or herself on getting the details exactly right in every circumstance. They take time to construct their code in a clear and concise manner that promotes efficiency and reusability. They stay up to date on best practices and emerging technologies that can help them build better systems. They never settle for sloppy hacks or lazy workarounds when they encounter a frustrating new challenge. In short, they care about you, about your product, and about delivering a product shot through with integrity.
Many of these traits exist below the surface and are hard to discern during initial vetting meet-and-greets. Fortunately, other telltale artifacts of top-level craftsmanship are easy to spot. A great team will use the following processes and tools to ensure that the product you’re seeking matches what’s delivered:
A dedicated technical project manager who understands every facet of your project, communicates natively with the development team, serves as your primary day-to-day contact, and delivers regular progress updates
An in-depth project exploration meeting to discuss and record all functional and aesthetic requirements
A clear functional requirements document that “reads back” to you everything you expect the software to do once deployed
A well-defined development plan with accompanying timeline for each phase
Wireframes or a similar visual representation of your software interface that demonstrates all workflows and their component key interactions
Frequent collaborative reviews of work accomplished to ensure everything is on the right track
A dedicated code repository with multiple daily offsite backups to protect your investment
A dedicated quality assurance (QA) engineer who focuses solely on testing each day’s code commits, performing regression testing (making sure new code doesn’t conflict with previously delivered code), and ensuring that the required functionality matches what is delivered
Getting the underlying details right is critical to creating software that does what you need it to do. It ensures that your project will come in on time and on budget, and it dramatically reduces the likelihood of expensive and time-consuming redesigns and refactors down the road. Doggedly seek a development partner who practices craftsmanship, and ask them to show you examples of how they approach their work. People who love what they do and take pride in how they do it will be eager to share everything with you.