The way to mastery is a long journey. Yet if you’re passionate about your craft, be it writing, designing, building virtual products, building physical products, or just want to become a master at whatever you’re currently doing, pick up this book – Apprenticeship Patterns. Guidance for the Aspiring Software Craftsman, by David D. Hoover and Adewale Oshineye.
This book is not only for software developers. If that “Software” in the title made you avoid it so far, go back to it. Read it, then reread it. The book offers advice on accelerating your growth and tools for inexperienced software developers or apprentices. The book also benefits experienced developers and anyone who wants to master specific skills. I’ll show below why.
Dave and Ade (the authors) interviewed people worldwide to create apprenticeship patterns, adding research into current learning literature and the psychology of optimal performance and mastery.
I will first clarify some of the concepts in the book – patterns, software craftsmanship, apprentice, journeyman, Master – then I’ll describe the practices.
I have created a matrix for better visibility of the patterns, so if you have already read the book, jump straight to the overview here. I will also explain how to use this matrix for your growth and coach your team.
What are the patterns?
“A pattern is a named description of a recurring solution to a problem in a given context. The description should give readers a deep enough understanding of the problem to either apply the stated solution to their own context or decide that a particular pattern is inappropriate for their situation.” (excerpt from the book).
Otherwise, no matter what learning stage you are in as an apprentice on your way to software craftsmanship, there is a solution to help you grow out of it and continue on your path to becoming a Master. Dave and Ade have used the collective intelligence of many experienced (and inexperienced) software developers and created the right solutions for you. Or patterns, if you’d like.
Software Craftsmanship Manifesto
Before jumping into the patterns, the authors define software craftsmanship; in a true Agile spirit, they put together a Software Craftsmanship Manifesto (in March 2009, after a prolonged discussion with their community):
“As aspiring Software Craftsmen, we are raising the bar of professional software development by practicing it and helping others learn the craft. Through this work we have come to value:
Not only working software, but also well-crafted software.
Not only responding to change, but also steadily adding value.
Not only individuals and interactions, but also a community of professionals.
Not only customer collaboration, but also productive partnerships.
That is, in pursuit of the items on the left, we have found the items on the right to be indispensable”.
The inspiration for defining software craftsmanship comes from the medieval apprentice practice. In those times, the Masters of a craft owned the workshops and controlled the apprentices who worked for them. They had absolute authority over all their workers; the journeymen followed immediately underneath in source. The journeymen were also travellers, thus taking their skills and knowledge to other places and sharing them with other journeymen.
Thankfully, the software craftsmanship concept refers to a modern working studio where the journeymen improve upon past knowledge, not imitate it. Following Agile software development, the book is to be used as a learning tool, not to be followed as an absolute rule. This book aims at helping apprentices learn and create new practices, and together, apprentices and masters, to drive the software development discipline forward.
“So software craftsmanship refers to a community of practice united and defined by overlapping values, including”:
- As Carol Dweck’s research presents, the concept of “growth mindset“. According to Dweck, we can constantly grow through practice and effort; there is no “fixed” talent and skill set we’re born with and can’t overcome.
- Using constant feedback from the world around you to adapt and change.
- A desire to be pragmatic rather than dogmatic.
- Sharing what you know helps you more than hoarding information and knowledge.
- A willingness to experiment and fail.
- A dedication to an internal locus of control. Locus of control refers to owning the outcome of events in your life over external forces driving them.
- A focus on individuals rather than groups.
- A commitment to inclusiveness.
- Skill-centric rather than process-centric.
- A strong preference for “situated learning“. The concept promotes learning through communities of practice: the best way to learn is being in the same place with people with the skills you need to learn and solve a problem together.
Learn more about situated learning here:
What is an Apprentice?
“I guess it basically means having the attitude that there’s always a better/smarter/faster way to do what you just did and what you’re currently doing. So apprenticeship is the state/process of evolving and looking for better ways and finding people, companies and situations that force you to learn those better/smarter/faster ways”.
An Apprentice is beginning his journey towards becoming a software craftsman. However, her focus will be within, and she will have to learn to grow and learn.
What is a Journeyman?
The journeyman keeps the focus inward and continues the learning path she started as an apprentice. But at the same time, the journeymen will build connections between practitioners, communities, and communication channels within and outside the team.
In medieval times, journeymen would work with different masters to learn the craft and share their knowledge and skills with others. In modern times, they will continuously grow their portfolio, community and status in the community, so they are ready to become masters. So their responsibilities are broader than those of an apprentice.
What is a Master?
Defining mastery is simple: “Mastery involves performing all the roles of an apprentice or a journeyman as well as focusing on moving the industry forward.”
Masters have gone through apprenticeship and journeyman paths and now are helping others grow their skills by orders of magnitude. They can create new tools or train journeymen to know more than themselves. “In short, masters view the acquisition, usage, and sharing of superior skill as the most important part of being a software craftsman.”
What is an Apprenticeship Pattern?
An Apprenticeship Pattern is meant to guide someone working with the craftsman model on how they can grow and improve their skills (and careers).
The patterns are:
- a result of the experience of the authors and the community they interviewed
- unoriginal because people around you are already using them
- generative, giving different results every time you use them
- going to improve your working environment if used appropriately
The Apprenticeship Patterns Matrix
There are 35 patterns. For a better visibility, I created a matrix here.
The matrix is structured in five categories, which I will explain below, while the detailed patterns are in the attached sheet:
1. Emptying the Cup: if your cup is complete – if you already think you know a lot – it’s tough to fill in; it’s hard to get new knowledge; your ego is your most significant impediment to growth. All the patterns in this category are tools to start your apprenticeship with an open mind:
- Your First Language
- The White Belt
- Unleash Your Enthusiasm
- Concrete Skills
- Expose Your Ignorance
- Confront Your Ignorance
- The Deep End
- Retreat into Competence
2. Walking the Long Road: the more you learn, the more you recognise how far you have to go. There is an immense pool of knowledge that you are yet to get the more you dive deeper into a craft. When you start collaborating with exceptional people, you will see that you are walking the same road, even though they are miles ahead of you:
- Walking the Long Road
- Craft over Art
- Sustainable Motivations
- Nurture Your Passion
- Draw Your Own Map
- Use Your Title
- Stay in the Trenches
- A Different Road
3. Accurate Self Assessment: if you’re a big fish in a small pond (e.g. the expert on a topic in your organisation), remember there are a lot of ponds out there where you can find fish that are way bigger than your entire pond. “You must be able to let go of your perceived competence and allow yourself to recognise that you have travelled only a short distance on The Long Road.” :
- Be the Worst
- Find Mentors
- Kindred Spirits
- Rubbing Elbows
- Sweep the Floor
4. Perpetual Learning: any craft has two primary activities: 1) learning and 2) communicating. The Perpetual Learning patterns are essential throughout your entire journey (becoming a master is all about learning and growing), but it’s essential at the beginning of your journey:
- Expand Your Bandwidth
- Practice, Practice, Practice
- Breakable Toys
- Use the Source
- Reflect As You Work
- Record What You Learn
- Share What You Learn
- Create Feedback Loops
- Learn How You Fail
5. Construct Your Curriculum: don’t get caught up in the new information for your craft; remember, there is a vast amount of wisdom in classic books written by experienced craftsmen. So, you must read books and dedicate time to studying and practising your learning. Then, construct your own curriculum based on the path you designed for yourself.
- Reading List
- Read Constantly
- Study the Classics
- Dig Deeper
- Familiar Tools
So how can you use the Apprenticeship Patterns?
There are two ways you can make great use of the Apprenticeship Patterns:
- First, on a personal level: take control of your growth, check the matrix, and see where you are in your journey towards mastery. Then, use the tools, do the actions, and iterate. I do a review every other month at least, whenever I am blocked into my learning and growth, and use any of the tools that fit my craft journey needs to push myself further.
- On a team level: the Apprenticeship Patterns are to be used by individuals to master their growth journey, but it is a wonderful coaching tool at the same time. Our devs have Apprenticeship Patterns as mandatory reading during induction. We value developers who see software development as a craft and want to grow their skills towards mastery continuously. Leaders and coaches guide them through their journey: we work with each dev to see where they are, help them set the next objective for themselves and review their goals and growth with them (monthly). Then, the regular performance coaching is guided by Apprenticeship Patterns on the established cadence.
I can’t recommend this book highly enough. So grab a copy of it now; it’s the first step to becoming a master of your craft.