What happens when you decide to embark on the craftsman’s journey, but have the misfortune of being at your dream job? Is this a irreconcilable incompatibility? Are you forced with either abandoning your dream job, or abandoning the craftsman journey? If you decide to stay, will the path still take you forward, or are you doomed to peak and plateau, if not spiral downward?
I argue here that one can journey to Software Craftsmanship while remaining at one company. In fact, I do not argue for the sake of arguing, rather because this is just the journey I plan to embark on.
While I feel I already had many characteristics of a Software Craftsman even before knowing of such a thing, I am only now becoming familiar with the concept and everything it includes. This is my best attempt to capture what I feel is important in Software Craftsmanship within the context of staying within one company for a long time. While I start my journey and meet other Craftsman, I hope to learn much, tweaking my ideas and methods along the way. I look forward to feedback and conversation about my thoughts.
A Non-Traditional Craftsman Journey
In most cases, I agree it is likely easiest to progress on your craftsman journey by changing experiences, as described by Sandro Mancuso in “The Software Craftsman: Professionalism, Pragmatism, Pride”:
“Moving from project to project, experiencing different environments, companies, industries, technologies, and approaches to software”
-Sandro Mancuso, The Software Craftsman: Professionalism, Pragmatism, Pride
The reason this route is easiest is because changing companies is the most natural and easiest way to change environments. However, through self-discipline, and with support from the company, you can create this environment of growth for your career and enjoy your Craftsman journey while sticking it out with your company for the long haul.
I identify a few factors, behaviors, and personal characteristics important for a Craftsman journey within one company. I plan to strive to achieve each of these identified factors in my career, and will share with you some goals and methods I plan to follow at my own company, updating my blog along the journey. Of course, the future is unwritten, and while I cannot foresee it now, my journey could always diverge from my current company.
The definition of ambition, as found on dictionary.reference.com, is the following:
- A strong desire to do or achieve something, typically requiring determination and hard work.
- Desire and determination to achieve success
This is the exact definition of ambition we should be striving for. You will not succeed in your craftsman journey without ambition. This is true whether you decide to embark in a one-company career, or if you decide on the more typical company-jumping route.
You’ll need ambition to create an environment of change within your company. In creating an environment of change, it will be critically important to balance this with other focuses of a Software Craftsman: customer satisfaction, professionalism, and pragmatism. You cannot, as a professional seeking respect and customer satisfaction, choose different technologies and change work environments with the sole and selfish goal of personal-development. As your most important customer, your decisions must be beneficial to the your company.
So how do we reconcile this conflict of creating an environment of change with choosing the best solution for your customers? The answer lies in my next focus, support.
You will need the support of your manager, coworkers, and company for your Craftsman journey. You will need support for creating an environment of change, for having access to end-users, and for investing in well-crafted software.
Creating an Environment of Change at the Company
Creating an environment of change involves exploring different technologies and working on different projects of different sizes and across different teams. To achieve this, you will have to convince your manager that this is in the best interest of the company. You shall strive to reveal to your manager that exploring different technologies is in fact a long-term benefit for the company. This will provide you the ability to choose the best technology within your toolbox for the job.
Of course, you should not experiment with new technology on large, important projects, which could end up sabotaging its success. This is why you should strive for an environment of experimentation. Use new technologies on small one-off projects, or small non-critical projects. Learn a new language or tool at home with your pet projects. When done correctly, I believe this is in the best interest for the company, as well as yourself. The company will be investing in its future while avoiding technical debt, allowing you to blossom as a Software Craftsman.
Access to End-Users
One virtue of Software Craftsmanship is customer satisfaction and building relationships. This involves having access to end-users, which allows you to verify that you are building the right thing, via short feedback loops. It is vital to your journey that you can get access to end-users for all projects, big and small.
Staying at one company will likely result in meeting fewer Software Engineers throughout your career, and hence having less opportunity to learn from your coworkers. You will also be in danger of getting overly comfortable with your job and skills, wrongly making you feel you know everything there is to know. This will critically handicap your Craftsman journey, a journey with no ending.
There is always room for improvement, and you must recognize this and strive to get better every day. Having less opportunity due to lowered exposure to other Craftsman means you’ll need to actively seek alternatives by getting involved in other communities outside your job, such as Meetups, clubs, conferences, and reading and writing blogs. This will keep you connected and help you realize just how much you do not know, and act as an incentive to improve and not fall behind. Building your career in one company makes it all the more critical for you to stay connected, remain challenged, and remain humble.
Now that we’ve identified some key factors required for your Craftsman journey at your one-company career, lets turn our focus on how to put this in to practice. It is of utmost importance to plan your journey well from the start. Hoping to remain at one company for a long time, should you promise changes and fail, you may permanently handicap your ability to foster a healthy environment for a Craftsman journey, and worse, may even sabotage your entire career.
The journey as a Software Craftsman is one to be shared with others. It is impossible to achieve without support. That is why one of your first tasks at your company should be to find companions. This includes Software Engineers companions as Software Craftsman, as well as supporting companions, such as your customers, managers, and other coworkers. It is important to also find companions outside of your company in the form of Meetups, conferences, and writing and following blogs.
I will be buying “The Software Craftsman: Professionalism, Pragmatism, Pride” for the other Software Engineers on my team. I also plan on starting a Software Craftsman Book Club at my work, and inviting Software Engineers at all teams at the company. I have also recently joined a Meetup Software Craftsmanship group, to which I will be inviting my colleagues. Since we cannot force anyone to start the Software Craftsman journey, it is important to lead by example. My hopes are that once my colleagues see my enthusiasm and notice improvement in my work, they will willingly join as companions.
Collaborations and Experimenting
One idea I’ve been using to try out new languages and technologies is inspired by Google’s “20 Percent Time”. Using Google as a reference, I was able to get permission to work on projects of my choosing for 10-20% of my time. The projects of course should be somehow related and beneficial to the company.
I also was able to convince my manager and the manager of another team to be able to collaborate with them by working on their projects during that 10-20% time. This will help in changing environment, learning other technologies and languages, and in learning from other Software Engineers.
Considering again the virtue of customer satisfaction, it is important to build a relationship with your customers. One result of this should be a shortened feedback loop. You need to include your clients throughout the development cycle of your projects, as advocated in both Software Craftsmanship and the Agile methodology.
This was a pretty easy sale for me, since this meant avoiding huge investment from the client upfront to develop specifications and requirements for a system. By communicating to the client that we would meet every 2-4 weeks to show progress and to plan the next steps, the client can feel they ae critical to the success of the project, and that they shouldn’t worry about anticipating every detail of the final product upfront.
With this, I hope I have properly set up myself and my company to benefit from the Craftsman journey.
Please follow my progress, and please feel free to share your thoughts and opinions.