A few weeks ago I visited an amazing city that has become one of my favourites, Barcelona. Whenever I visit a new city, I try to see it not only as a tourist but also from the point of view of people living there. As such, I prepare by reading about its history, daily life, local food, industry, status. I was expecting to have a great time in Barcelona, a city well-known for its good food, nice walks and many opportunities for leisure. What I didn’t expect at all was to learn more about being a software craftsman.
You may have heard about Antoni Gaudí, the architect that gave Barcelona some of its most interesting tourist attractions. I had read about him. I’d read about his naturalistic style and of his monumental design for “La Sagrada Família“. I thought I was well-prepared, but I was in for a big surprise. Antoni Gaudí was a revelation: he wasn’t only an architect, but a complete craftsman.
It’s impossible for me to explain in words what I’ve seen in his work. I can only hope to give you a hint of his craftsmanship by picking a few facts about him:
- Gaudí was first a master of iron. He learned this craft from his father, and used it all his life to design and build metal decorations for his buildings. He then learned other crafts: ceramics, stained glass, carpentry
- When he graduated the School of Architecture, he told his friend “they say I’m an architect now”, showing more interest for the job than the certificate
- Unlike most architects, he disliked sketches and preferred building detailed 3D models. This allowed him to spot issues and see design improvements early
- He viewed architecture as a complete art. He was on the building site, working with a (cross-functional) team of craftsmen filling various roles in the construction. He was thinking of every little detail: the windows were fit for the natural light in the site, the look of the staircase handles, the anatomical shapes of the door handles (custom-made, and different, based on his designs), the furniture and even the font for the apartment letters in the house.
- He was pragmatic. Many of his solutions are brilliant combinations of simplicity and aesthetics done for a low price – sometimes from recycled materials, otherwise just applied genius.
To sum it up, Antoni Gaudí was an architect that believed in painstaking attention to detail, simplicity and aesthetics in every single thing found in his buildings.
This is the type of software craftsman that I want to become. What this means to me is that I should:
- Know the programming languages and techniques of the day (like Gaudí mastered the materials and building techniques of his day)
- Have the attitude that what I realize is more important than my title (he was always the same person, didn’t become an architect after getting a certificate)
- Think at different levels, from the strategical view of software architecture to the short-term view of software design (much like he could think of the building architecture and consider all the small details such as the door handles)
- Only by considering the triad of form, interaction and implementation on every decision I make can I hope to create amazing products. This means taking into account user interface, interaction design and code as a whole, not as separate parts
- Be pragmatic every time. Just because I know a tool doesn’t mean I have to use it. Just because I like a certain technique doesn’t mean it’s always useful. Simple solutions that create the required feature and make economies on the short and long-term are the most useful.
- Build an aesthetic sense from examples of high quality software that helps me make fast decisions. You might call it intuition.
- Gather a team of craftsmen that will not only work together but also learn and grow together over the long-term
- Deliver working software that delights users and customers. This is not only the job of the graphical designer, interaction designer, product owner. It’s also my job as a developer
- Write only the technical and functional documentation that is useful. Favour working software over detailed diagrams. (Gaudí had to work with real materials and build 3D models; we are lucky to work with code, easier to sculpt than stone – when written so that it’s easy to change)
- Learn throughout my life. Gaudí was a keen observer of nature, and copied its patterns in his works. A naturalistic style of writing code might be interesting too (we have adopted concepts such as fractals, growth, branches of code). More importantly is to learn from any other domain techniques that advance the craft.
- Always adapt to the medium and the customer context. Gaudí showed a high adaptability to the site, that allowed him to design parks, houses, utility rooms and cathedrals.
This is my ideal view of a software craftsman. As any ideal, I can only hope to get closer to it without ever reaching it. It’s useful for me because it gives me clarity and purpose and it defines my values.
Do you find this useful? Let’s see if we can advance together towards this ideal.
PS: Please don’t see this as a “certification” that you “have to meet” to become a “craftsman”. This is my list, and I will apply it to myself. If, by any chance, you find it useful, I’d be happy to work with you and advance in this direction. If you don’t, my only piece of advice is: clarify to yourself what you want to become; it will help you get clarity, purpose and values.
PPS: This list is far from perfect – it’s at best a first draft – and will probably get clearer in time. I felt it’s important for me to write it down now. I will appreciate any questions or feedback that will help me clarify it.