The Software Craftsman (Part I)
Why this book?
During the last years, I had been in Software Craftsmanship conferences in Pamplona, Madrid and Barcelona, and some editions of the Socrates Canaries (Software Crafters and Testers Conference). I have participated in some editions of the Global Day of Coderetreat, and some Coding Dojos of the local Gran Canaria local community of developers.
Nobody ever asks me for a software crafter license, or if I know everything about Software craftsmanship about. To be part of the community, the only requirement I found is to be motivated to learn and share.
Over time, I discovered things like what is an open space, what is that of the Software Craftsmanship manifesto, what is code of conduct, what are the values, the practices, etc…
There is a lot of content on the internet about this topic, other books related like Apprenship Patterns, The Clean Coder, or The Pragmatic Programmer, which I also recommend.
Many people recommend this book, and nowadays it has become a reference in Software Craftsmanship.
Why have I decided to read it now?
I decided to read this book to go deeper into Software Craftsmanship.
But, not only about content. Sometimes when you feel a little lost, read a behavioral/philosophy book allows you to seat many butterflies that are fluttering in your head. I decided to stop, take a step back and look around, and ask myself: What I’m doing?
I think it’s important to do this exercise, once every six months. Because when you are in your daily routine, your daily work, the daily compromise you get focused in the company environment. And this does not let you think with clarity and see the big picture.
It’s important to look at the sector, the technologies, the practices and things that happened. That’s why you need to keep in touch with the community, events, and colleagues around the world…
Thease are my notes and thoughts about the book:
1. Software Development in the Twenty-First Century
This view of the profession is not much different from what the university showed me few years ago. Bad times for the Software Engineering, big architects telling low paid developers what they have to do through extensive documentation and incomprehensible UML diagrams. I had never work in this environment but is interesting that 30 years before it’s still common to see companies that still have this vision.
I like the way that Sandro describes the seniority levels. This topic is a lot of controversial everywhere, every company understands a different thing.
When I started someone told me that the seniority level depends on the years working on the industry, or even the number of programming languages you know. Before that, someone told me that the seniority level are levels of knowledge that you unlock whit the past of the projects in your professional career. And that has a direct relation with your responsibility and salary.
But as Sandro sais, this is not true. It’s important to keep in mind that seniority levels are not achievements that you unlock and last forever. Skils and technologies change a lot over the years. A 10 years Pascal developer does maybe has nothing to do in a react project vs a 1-year junior React developer and vice-versa. It’s not a rule of three. It depends on the required skills/Knowledge by the current project and the current skills/Knowledge of the developers.
2. Agile
I like to see how fast the industry has changed over the years. It’s important to put dates and names to the people who started the “Agile revolution” and other movements. I like to see it as a Netflix series, where behind every conference talk or publication from the “main cast” there is a lot of corridors conversations, dinners and discussions behind. All connected.
On the other hand, I have the feeling that every time I read the Agile manifesto in my apprenticeship road I learn something different. Probably because over time you are part of other parts of projects and see other values reflected in your daily work practices.
3. Software Craftmanship
The metaphor craftmanship has always seemed artificial to me. No one of us was in the middle ages watching how the guilds act like the metaphor sais.
I believe that metaphors work better when are about daily things. But in this case, do we really need a metaphor? It cannot only be just a different movement?
If this movement it’s about professionalism, quality, apprenticeship, and communication, why not approach it in another way? Why don’t make people talk about these values? For me, it’s very strange to start talking about the middle ages when someone asks me about, what its Software Craftmanship?
Besides that, it’s better than the traditional Software Engineering approach.
The manifesto:
Not only working software, but also well-crafted software
The good software must not only work, its important to define what does well-crafted software means. What about testability? What about extensibility? What about maintenance? What about usability? It’s important to keep this in mind.
Not only responding to change, but also steadily adding value
Responding to change is the key to Agile, but it’s important to increment value. Improving technically the software increments his value in the future. Remember that save money and time in the future its value too. Remember that we do not have to predict the future, we have to embrace it.
Not only individuals and interactions, but also a community of professionals
This movement emphasizes that you are not alone in your profession, this means that you are in a community of professionals.
When I started in the Craftmanship, I listen a lot to the word elitism, sect, etc. As a normal law, society subconsciously trends to be away, or attack everything that is different, just because in some primitive way we see it as a threat.
In the movements, there are a lot of kind of people. But if you only listen to these people, you will never live the movement pure experience, and you will lose all the good parts.
I have never had a problem in learning from another developer, independently of their experience. On the other hand, I had learned a lot teaching others. In my experience, I had found a very inclusive, diverse and transparent community.
But, despite of being a great professional movement, it’s a people movement, made by persons. And you know, there are many kinds of persons, good and bad, like in every place.
Not only customer collaboration, but also productive partnerships
You are a professional, you are hired to be professional with your customers, even when you are employed by someone directly, that’s your customer. It’s your responsibility to actively contribute to the success of projects, understanding business and questioning requirements.
Profesional at this point means that its our obligation to help our clients to run a software project in the best way possible, they are not experts building software.
Its not a traditional employer/employee model, you are part of the projects and want to reach the success of the project. “It’s not my money”, “Its, not my problem”, “The business guy contradicts the development team, but it’s him wich pay us”, are common wrong attitudes at this point.
It’s your responsibility as a professional to find a good partnership with your customers/employers.
4. The Software Craftsmanship Attitude
Own your career. Build your apprenticeship journey, not your CV. Only you are responsible as a professional to keep up to date in the current changing world. Pay attention to technologies, books, events, good practices, companies, etc. Never stop discovering, distilling, practicing and sharing.
Life balance is important, you have to be proactive, you have to take care of yourself and those around you, your family. But also, you have to create time for your apprenticeship too.
This chapter transmits to me a selfish attitude about apprenticeship. Wich, it’s ok in many contexts, but I think the attitude attached to a “crafter” it’s much more than that.
When I think in a “crafter” person, I think in a very fidget person about his apprenticeship, It’s curious, and does not have fear to ask about something that does not understand. And of course, It’s open to share what he knows and to teach others. I have seen too many values in common in the people related to the software craftsmanship movement, like honesty, humility, inclusion, diversity, and so on.
5. Heroes, Goodwil and Profesionalims
Some good lessons here that I like are: learn to say no when a project decision is going wrong. The importance to explore many different options to build a solid and useful answer. Or, the importance to invest time in things when you apparently do not have time to, but in the end, not only you had that time but also you spent it.
6. Working software
The most you can automate now to make easy ways for feedback loops will exponentially make you save time and money in the future. For example, prepare an easy local testing environment for all newcomers developers, continuous integration, etc.
Work with legacy code it’s the most common in the industry, so you have to feel comfortable with that. Hating the legacy code makes you want to quit for your job every 15 days. If you do not want to feel like that, just learn how you can improve the existing and make it better or more comfortable, and drive the change. This will make you feel good.
You have to avoid to be hostage from your software. Pay much attention to technical debt. Try to not use solutions who will generate it. The idea is to increase the value of software with quality, not to increase the cost. Try to never include it for future iterations in backlog, because we all know that backlogs are back holes to technical debt, and once there, it will be never prioritized.
7. Technical Practice
Practices are the way of methodologies to bring values to projects.
Pragmatism is important in software craftmanship cause probably good practices change over time, its important to keep in mind that this ideology implies delivering quality software, the practices to archive this value can evolve. Do not be dogmatic.
8. The long Road
Prioritize your professional career according to Autonomy, Mastery, Purpose.
This movement exposes that a big part of your professional happiness or comfort is conditioned to these values. If you focus on these values, you can find a job where you will feel good every day at work. Because you can constantly improve your mastery in learning and practicing. Your daily contribution has a purpose. And, you can be a professional with autonomy, which means that you can use your abilities and your creativity at 100% with no restrictions.
But, what about your personal time? What about money? What about prestige?
They are conditioning, but they are in second place. In the end, you want to be happy. Happiness depends on many things, not only when you are at work and also when you arrive at home. You have to evaluate all these aspects based on your needs.