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.

Get Apprenticeship Patterns now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.