What is software craftsmanship?

What is software craftsmanship?

One of the words that’s quite widespread but not very well-defined in Software Development space, is craftsmanship.

Just like with Agile, which is significantly better defined and more discussed topic, software craftsmanship doesn’t have exact definition. I will take my chance to define it here and today.

Let me start with a couple of things I consider axioms:

1. Software Development is neither manufacturing, nor art nor science. It’s a craft. It’s less predictable, but not unpredictable. It depends on individuals. There are many correct solutions. High-level of craftsmanship exists and people who are interested in this craft for long enough can recognize it.

2. The result of a craftsman is a product that is made for a purpose. If the purpose or context is different, so will the product and often the process. Some craftsmen are better at some products and contexts than others. You might get bespoke made shoes and the process and tools might be different when you get official Oxford style leather shoes from outdoorsy leather boots.

3. Craftsmanship is about quality. But a bit different quality than in manufacturing. In manufacturing, you care about making thousands and millions of products with as few defects as possible. In craftsmanship, you make significantly fewer products that are unique, purpose built, but of high quality.

4. Aesthetics matter. Well crafted thing is pleasant to use. A big part of craftsmanship is knowing what doesn’t work, what is hard to use, and a lot of respect for the user’s habits and tastes.

5. Craftsmanship depends on good knowledge of tools, materials, and processes that lead to good or spoiled products. Sometimes craftsmen use ancient tools and achieve awesome results. Stradivari had tools that are nowhere near as good as what we have now. Yet, he achieved great results.

6. Craftsmen learn from other craftsmen. There’s a lot of value in seeing the great ones doing their jobs. Speaking of Stradivari, he was learning at Nicola Amati, another master luthier. And Nicola Amati was learning from his father Andrea and uncle Antonio, both of them luthiers and students of their father Andrea Amati. Developing craft takes years and is relationship between an apprentice and a master craftsman is important and having one can accelerate apprentices’ growth.

To put is short:

A craftsman makes high quality low batch or single-piece items.

A craftsman knows his tools extremely well.

A craftsman overall knows what works or doesn’t work well for users.

A craftsman is teaching and learning from other craftsmen.

So when you are a software developer, what makes you a software craftsman?

1. First thing is, you design and build great systems.

2. You are building things that work great for your users.

3. You are expert in your tools, libraries, frameworks, and programming language.

4. You work with other craftsmen, apprentices, and you learn and teach.

Doing bad systems is not craftsmanship.

Creating solutions that don’t work for your users is not craftsmanship, even if the system had clean code, plenty of tests and was implemented quickly.

Not being interested in mastering your tools is not craftsmanship.

Hiding best practices from others and refusing to spend time learning is not craftsmanship. You might not share your best secrets with competitors, but you should help your colleagues to get better.

Craftsmanship in Flexiana

When I started Flexiana, I did a couple of decisions to support craftsmanship at Flexiana. So I did a couple of decisions and implemented a lot of measures to support craftsmen in our company.

First thing is, we hire only senior developers. Everyone at Flexiana has at least 5 years of professional experience, average is 11 years. People might not be experts on Clojure when they join us. They are experts on web app development, databases, building and maintaining applications, speaking with users and customers and managing a team.

We work in autonomous teams. These teams own their own methodology and can improve how they operate. If the team wants to do estimates, it can. If the team wants to do Scrum, it can. If the team wants to do mob programming, it can. However, I realize without being senior-only, we couldn’t allow this level of autonomy.

We have a craftsmanship guild, where people meet and discuss topics related to testing, clean code, tools (like Emacs) and best practices.

There are a couple of expectations from everyone. We expect everyone to write clean code and test their work. We provide training on service design, usability testing, and we work with UX designers and people who run usability tests with end users.

There is no limit on testing and refactoring. In almost 8 years of our existence, we haven’t stopped anyone from refactoring or testing. Not! Even! Once!

Before I started Flexiana, I was implementing Agile technique, methodologies, and mindset at various companies. I knew all of these things work. But I have never seen a company that has all of those things at the same time. So even when it sounded risky, it wasn’t.

Now, when we work with our customers across the world, we build teams that are like this. It works perfectly every single time.

Do I believe Software Craftsmanship is a good way to build apps? No, I have absolutely no doubts.

要查看或添加评论,请登录

Jiri Knesl的更多文章

社区洞察

其他会员也浏览了