Craftsmanship is one of our four core values here at Creative Mines. It influences everything we do, from finding the right team members to delivering final products. We choose team members based on their values, passion for mastering software craftsmanship, and willingness to share that experience with others.
The idea of craftsmanship seems like it’s one of those things that people talk about but don’t know what it means. This post will discuss what it means to implement craftsmanship as part of a software process.
When people talk about craftsmanship, what comes to mind is doing good work and producing an excellent final product. For the Creative Mines team, it means taking the time to do every step right and taking pride in what we’re building.
To us, it’s about everything that our developers do as part of the process that’s reflected in the final product. It’s about how we approach every step of the process we’re involved in, whether it’s writing the code, writing unit tests, or doing pull request reviews (and everything in between). Ultimately, it’s how we orchestrate everything in the software process to create an excellent end product for the user.
One of my favorite quotes is from Vince Lombardi:
“Practice does not make perfect. Perfect practice makes perfect.”
I’ve always loved that because many people know that the more they practice something, the better they will get. However, it’s easy to develop bad habits during practice and see them reflected in the final product.
So when applying that to software development, what does perfect practice look like? In most agile practices, developers work on one thing at a time. And that one thing is usually a story. While we’re writing code, unit tests, or documentation, we constantly ask ourselves if any of it could be improved or done the right way.
For example, a developer has always written unit tests one way because someone else did it that way. They never stopped to ask themselves why it’s done that way or if it could be done any better. They could’ve performed a data-driven test that creates some kind of easy wrapper around the logic of the test and just keeps throwing different parts of data. So it’s the idea of constantly perfecting the way you do things and having that show up in the final product.
Another good quote that comes to mind is what the Navy SEALs say:
“Slow is smooth, and smooth is fast.”
This quote reminds us that the best way to move fast is to take your time, slow down, plan things out, and do the job right.
New developers starting with a two-week sprint shouldn’t rush through a story to get to the next story. They need to slow down and figure out how to take that story and do it right. A developer should organize things well and look at what could be cleaned up in the code as they go along. Every piece of code they touch should be left in a better place. Next time they come back to code, they won’t have any warnings to clean up. Everything will be in a good state and make the next task even faster. And that’s what craftsmanship means to us at Creative Mines.