I have always been able to deliver what was asked and I was able to understand and pick up new project quickly, but the code base I would work on would always grow into something people would fear to touch, working with it would become difficult and painful in the long run. It seemed to be the normal way of working with software, projects would be late, developers stressed and pressured, managers angry and clients raising bugs. And naturally we would talk about the rewrite of the application within two or three years. And this would seem normal. But I felt there must be another way. Firefighting is not a sustainable activity, and if it is what software development is about I just need to switch career again. But first I needed to find another way.
Why Software Craftsmanship
I had been attending LSCC meetups for more than a year, and around April last year I decided to apply for an apprenticeship position at Codurance: it is one of the best move I took career wise after deciding to learn to code. I hated my job at that time, I was working on a five headed monster application that would break every time I made a change to it. Going to LSCC and talking to other developers, I realised I was not alone feeling that there must be another way, that having to debug an application for hours does not feel right. That not being confident about the state of the code base such as making any change to it would be synonymous of fear and stress does not feel normal. I heard about the Software Craftsman book and I read The Pragmatic Programmer book and I realised what was missing in my career: professionalism.
The application process
My cover letter, or rather my application email to Codurance, was one of the most passionate letter I’ve ever written. I had all my hopes there, this was the chance for me to take my professional life to something better and meaningful. This was the way for me to find a career and stop having a job. Sandro got back with a nice email, with plenty of information regarding the apprenticeship and the instructions for the coding exercise. I appreciated the transparency regarding the salary straight up front, it makes the discussion much easier and removes the awkward negotiation over money. Two weeks later, as I had little time on weekdays to work on it, I submitted my code for the interview, which is a part of the interview process.
The code review: I am not going to code anymore!
And a bit less than a week later, I received the code reviews from Sandro and Steve. I never had such a thorough code review, actually I never got a code review from an interview process. It felt like a big slap in the face, and I felt quite bad as I did not realise how big my knowledge gap was. I just had to go for a run to get over it. And energized more than ever, I wrote back to thank them for their time and said I was willing to put the effort to learn and study hard to become a great programer and a software craftswoman. And I was determined; be it at Codurance or not.
The Apprenticeship: My mentor is amazing
As an apprentice at Codurance, you get to choose a mentor amongst software craftsmen willing and available to coach you. I met with Alex in a pub near the office after work, before joining; we just clicked. I knew he would be pushing me and his level of expectations were exactly what I needed. The apprenticeship at Codurance is different for every individual. It depends on the level of experience and knowledge of the apprentice, the relationship with the mentor and the skills needed to be worked on.
Skill gap analysis
My second reality check was going through the apprenticeship criteria with my mentor and trying to see where I stand.
At Codurance, we have a list of criteria to be met before an apprentice can become eligible for graduation. They consist in three main skill sets:
- Consultancy (facilitation, technical writing, mediation, ...);
- Coding (TDD classicist and Outside In, SOLID principles, refactoring and code smells, pair programming, …) and
- Engineering (continuous integration, data modelling, architecture and macro design, security)
With different level of mastery required for each skill, based on the Dreyfus model of skill acquisition. There was a lot of work to do in my case. My mentor and I agreed on a strategy for learning; with test driven development as the main goal. We did set up a work plan for each week, and reviewed my progress weekly. The usual workload was roughly as: TDD katas in C# every week, in javascript every other week; reading a number of chapters of various books every week, studying a cloud design pattern and when possible implementing it; one blog post every two weeks (I did not always made this one); do a lightning talk every fortnight at the Codurance catch ups.
Each week, after his day of work at the client, Alex would come to the Codurance office and spend an evening of about 3 hours or more and sit with me, reviewing my learnings asking questions, answering mines, and pair programming with me.
Every week, each week for six months, not only would he spend an evening with me, but also he would review my code on the exercises I would complete during that week, go through my slides for the readings and studying I wrote down and find the words to motivate me and help me grow.
I am so glad and grateful for all the time he gave me and all the skills I acquired with him.
I am grateful for being at Codurance surrounded with people who care about the state and the future of their industry, the level of their craft, and the skills of their peers.
I am not a Software craftsman, I am a journeyman
Being around skilled people is thrilling and challenging. I struggle to say that I am a software craftsman. When I think about the word, I picture my mentor, my colleagues, the founders of Codurance; one of whom is the author of the Software Craftsman; and I know I am nowhere near that level of craft yet. And that is alright.
This is what generally happens in all artisanal trades: one starts as an apprentice, study and learn from other craftsmen, “through education, supervised experience, and examination”. Then becomes a journeyman,”considered competent and authorized to work in that field as a fully qualified employee”. Then after years of experiences, recognition and evaluation from other craftsmen; “[a] journeyman, as a qualified tradesman could become a master”.
There are so many things that I am yet to master. And that is alright.
I believe this can only be achieved through many years of experience in the field with skilled professional and deliberate practice. And that is alright.
This is what makes our craft so fascinating, rich and fulfilling.