Appendix A. Pattern List
A Different Road: You have discovered that the direction you want to go is different from the path toward software craftsmanship.
Be the Worst: Your learning has decelerated as you’ve quickly surpassed everyone around you.
Breakable Toys: You work in an environment that does not allow for failure, yet you need a safe place to learn.
Concrete Skills: You want to work on a great development team, yet you have very little practical experience.
Confront Your Ignorance: You have discovered wide gaps in your knowledge, and your work requires that you understand these topics.
Craft over Art: You need to deliver a solution for your customer, and you can choose from a simpler, proven solution or take the opportunity to create something novel and fantastic.
Create Feedback Loops: You can’t tell if you’re suffering from “unconscious incompetence.”
Dig Deeper: You have only superficial knowledge of many tools, technologies, and techniques and keep hitting roadblocks as you try to tackle tougher problems.
Draw Your Own Map: None of the career paths that your employer provides is a fit for you.
Expand Your Bandwidth: Your understanding of software development is narrow and focused only on the low-level details of what you’ve worked on in your day job.
Expose Your Ignorance: You have discovered wide gaps in your knowledge and are afraid that people will think that you don’t know what you’re doing.
Familiar Tools: You are finding it difficult to estimate your work because your toolset and technology stack are changing so rapidly.
Find Mentors: You find that you’re spending a lot of time reinventing wheels and hitting roadblocks, but you aren’t sure where to turn for guidance.
Kindred Spirits: You find yourself stranded without mentors and in an atmosphere that seems at odds with your aspirations.
Learn How You Fail: Your learning skills have enhanced your successes, but your failures and weaknesses remain.
Nurture Your Passion: You work in an environment that stifles your passion for the craft.
Practice, Practice, Practice: The performance of your daily programming activities does not give you room to learn by making mistakes.
Read Constantly: There seems to be an endless stream of deeper and more fundamental concepts that are eluding you despite your quickly acquired proficiency.
Reading List: The number of books you need to read is increasing faster than you can read them.
Record What You Learn: You learn the same lessons again and again, but they never seem to stick.
Reflect as You Work: As the number of years and projects you have under your belt increases, you find yourself awaiting the epiphany that will magically make you “experienced.”
Retreat into Competence: You feel overwhelmed as you are faced with the vast reaches of your ignorance.
Rubbing Elbows: You have the feeling that there are superior techniques and approaches to the craft that are eluding you.
Share What You Learn: You are frustrated that the people around you are not learning as quickly as you are.
Stay in the Trenches: You have been offered a promotion into a role that will pull you away from programming.
Study the Classics: The experienced people around you are constantly referencing concepts from books that they assume you have read.
Sustainable Motivations: You find yourself working in the frustrating world of ambiguously specified projects for customers with shifting and conflicting demands.
Sweep the Floor: You are an inexperienced developer and need to earn your team’s trust.
The Deep End: You’re beginning to fear that your career is not resting on a plateau, but is in fact stuck in a rut.
The Long Road: You aspire to become a master software craftsman, yet your aspiration conflicts with what people expect from you.
The White Belt: You are struggling to learn, because the experience you have seems to have somehow made it harder to acquire new skills.
Unleash Your Enthusiasm: You find yourself holding back your excitement and curiosity about software development in order to fit in with your team.
Use the Source: How do you find out if your work is any good given that those around you may not have the ability to tell good code from bad?
Use Your Title: When you introduce yourself in a professional setting, you feel you have to apologize or explain away the difference between your skill level and your job description.
Your First Language: You are familiar with a few languages, but lack fluency in any of them.