Even if we use terms such as software engineering and software architecture, software development is really much more of an art form than a science.
Simply put, the software craft is about more than just software development and software engineering:
After 15+ years in the field, software development feels much more like an art than like a science to me. In IT, each problem has an almost infinite number of solutions. Some are better than others, and it takes experience to know. To me, that's the fun part of the job. Every day is filled with new interesting puzzles to solve. It can be frustrating at times, but when approached with the right mindset, it can be a real pleasure.
I personally consider myself as a software crafter. Much more so than as a software developer/engineer. The word craft has a very profound meaning for me.
I consider it as a combination of the following definitions:
- Skill in planning, making, or executing
- Make or produce with care, skill, or ingenuity
As a crafter, I don't just want to be a coder, generating endless lines of meaningless code. I don't want to be a generator of one-line wizardry that nobody can understand. Writing working software is simply not enough.
I don't want to deliver solutions that are very costly or even impossible to maintain. I don't want to create solutions that don't deliver real value to their users. Collaborating with customers is not enough for me.
That is why I've signed the Manifest for Software Craftsmanship, along with at least 30K other crafters.
What I want is to be a professional, part of a community of professionals. What I want is to craft beautiful code that stands the test of time. I want to help raise the bar higher for everyone. I also want to help others learn the craft. Finally, I want to build partnerships with my customers, so that I can continually bring value to them. If you're familiar with the Agile Manifesto, then I would say that I value the craft over simple "execution". I've called my company DeveloPassion precisely because I have a passion for software development and want to leverage that passion to build great software for my customers.
Your work is craft, and if you hone your ability and apply it with respect and care, then like the skilled wheelwright you can generate meaning in the daily efforts of your professional life. Cal Newport, Deep Work
Creating what I consider to be well-crafted (or beautiful) code/software requires careful thought and attention, which in turn requires sharp skills. Developers that don't consider software development as a craft won't put in the efforts required to fully grasp what they're doing and will be satisfied with much lower quality results.
Considering software development/engineering as a craft has an important impact on what you want to deliver: not only value, but also quality, maintainability, beauty, and even elegance. Beautiful/high-quality software is multi-faceted, as I explain in Dev Concepts. Approaching software development as a craft also deeply influences the pride that you can feel in your work.
I want to encourage each and every single one of you to really consider software development/engineering as a craft rather than as a "production" job, and to raise the bar higher by aiming for quality over quantity. Crafters should also be able to communicate effectively with customers, and subject matter experts. Professionals understand that strong communication skills are paramount for success. It's not only a question of execution! The net results will be happier customers, less costly developments, and pride for achieving great results.
Becoming a software crafter is not easy. In the next articles, I'll tell you everything I know about how to become one. It takes time and effort, but you can aim to become one on the very first day; simply by truly caring. Caring not only for the end result, but for everything in and around the development (i.e., tooling, methodology, approach, collaboration, documentation, etc).
- Manifesto for Software Craftsmanship
- The Pragmatic Programmer: From Journeyman to Master by Andrew Hunt
- Software Craftsmanship: The New Imperative by Mike Hendrickson
- The Craftsman by Richard Sennett
- Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman by Dave Hoove and Adewale Oshineye
- What is Software Craftsmanship
- Craftsmanship - the Fifth Agile Manifesto Value?
- What happened to Software Craftsmanship
In this article, I've tried to share my vision of what it means to be a software crafter. It means different things to different people, but there's a core element to it: the constant focus on going above and beyond, and improving constantly.
You can approach software development as a job, like any other, something that brings food on the table. At that's fine, really. But approaching this job as a craft will help you achieve better results, and take pride in your work.
What is your opinion about this topic? Are you also a software crafter? Do you want to become one?
That’s it for today!