In this article, we’d like to present the case for apprenticeship schemes within Software development. Our apprenticeship program (or the Codurance Academy as we refer to it nowadays) is at the very heart of the Organisation and through this article, we aim to convey just why we place so much importance on it and why we believe the software development industry as a whole should be doing the same. Up skilling is often an important element in our Software Modernisation approach for our clients, establishing an academy based up skilling programme in your organisation can become the foundation for a great culture and effective skill-set. As well as presenting this argument, we’d like to also share some of the learnings Codurance has picked up over the years through our academy program. Our hope is that sharing these learnings will enable others to build upon our experiences when setting up and growing their own software apprenticeship programs.
Codurance has its genesis in the London Software Craftsmanship Community (LSCC). The LSCC was started with the aim to raise the bar in how software is built. Codurance carries the same mission. This culture of learning and continuous improvement is at the very heart of our company. Our first 4 hires consisted of 2 craftspeople and 2 apprentices. Basically, each craftsperson had an apprentice to mentor from the very start. Training people in good software development skills, before they work for our clients, is at the centre of how we provide excellence to our clients. It is also central to our mission to raise the bar in our industry. Proudly, our former apprentices have gone on to become the very core of our organisation and those that have moved on are in various leadership positions in other organisations.
The Codurance Apprenticeship program has evolved throughout and we also changed the name to Codurance Academy. Primarily because we used the word apprenticeship not in the traditional sense and neither in the way apprenticeships are offered through the Government schemes. Our apprentices are already accomplished developers and our training takes them from good to great. They are paid the market rate according to their knowledge and their only job is to learn. We don't assign our apprentices to billable client work. The other reason we prefer the name change is that we believe learning is perpetual at all levels of seniority and Codurance Academy aims to nurture our people at all levels through the organisation. In this article, however, we will concentrate on how we up skill our people so that they meet the minimum standard that our clients can expect from us.
Apprenticeship within the Software Craftsmanship Movement
At the very heart of the software craftsmanship movement is learning. The Software Craftsmanship Manifesto starts with :
As aspiring Software Craftspeople we are raising the bar of professional software development by practicing it and helping others learn the craft.
Codurance embodies the same purpose of raising the bar of professional software development. In the same year that the Software Craftsmanship Manifesto was written (2009), Dave Hoover and Adewale Oshineye wrote the book Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman. Whilst the book itself is now over 10 years old, many of the concepts discussed in the book still very much apply today. The major theme in the book is continual learning and having the mindset of an apprentice, with a thirst for knowledge and open to learning. In a similar vein but written some ten years earlier, The Pragmatic Programmer written by Andrew Hunt and David Thomas talks about how software developers are very much craftspeople and as such should be continuously working to hone their craft. Both of these books whilst not overly technical in nature are key writings within the Software Craftsmanship movement. They plot out a potential pathway for professional craftspeople and some tools and techniques to use along the way.
As the above quote demonstrates, the concept of an apprenticeship dovetails nicely with the Software Craftsmanship Manifesto and by extension the Software Craftsmanship movement, by providing a platform for more experienced craftspeople to pass on their knowledge and experience to the next generation and by doing so, raising the overall standard of software development across the wider industry.
This was the very reason our founders established the London Software Craftsmanship Community (LSCC), which had over 5000 members at the time this article was published. Codurance was founded 4 years after that and we like to think that our genesis was within LSCC. The community is still largely organised and run by Codurance craftspeople to promote quality software development processes and practices. Since then Codurance has been involved in the creation of many such communities across Europe and the rest of the world.
The Codurance Academy
As mentioned in the introduction of this article, the apprenticeship program at Codurance has evolved over time along with the Organisation. The founders of Codurance placed the apprenticeship program at the core of the Organisation from the very outset. The initial setup of the program saw apprentices assigned a mentor on a one-to-one basis. The focus was on passing on the core Software Craftsmanship principles that are at the very heart of Codurance and in turn the London Software Craftsmanship Community (LSCC). These include Agile technical practices such as Test Driven Development but also wider software design concepts and known best practices, to instill the pragmatic value-focussed mindset and interpersonal skills required to be successful in a software development team.
Whilst this enabled our apprenticeships to benefit from our more experienced craftspeople there were some shortcomings from this setup. The core skills were being passed on but there was no consistency in the approach followed by mentors. As a result we saw mentors focussing more on those areas where they had a particular strength or interest and less in areas where they did not. This meant that whilst the basic skills were being covered, apprentices were perhaps coming out the program having gaps in certain areas. At that time, the apprenticeships did not have a formal curriculum, it was left to the mentor as to what should be taught and indeed how that should be taught. So apprentices were experiencing different programmes depending on the mentor they had been assigned.
At Codurance, we are very strong believers in continual learning and development and we wanted to apply this to our academy program. We noticed that the program lacked some consistency. One of the reasons we value the academy program so much is that we feel it brings a certain level of professional standard when our people work with our clients. In order to fully achieve this, we felt that we needed to make some adjustments to the program to make sure that all of our apprentices were exposed to the same learning program and that at the end of the program, we could be confident that they were all able to operate at the same level that we, as Codurance pride ourselves in. There were a number of key changes that we introduced, which we believe have significantly improved the program :
To try and bring a level of consistency, we initially introduced a minimum set of criteria that should be covered during the programme. This criteria would then be shared with mentors to ensure they covered key areas during their time with an apprentice. This included topics such as SOLID Object-Oriented software design principles, Agile and Software Craftsmanship, Continuous Integration, Domain Driven Design and more. As well as introducing this minimum criteria, we also started to adopt the Dreyfus model to measure the development of apprentices.
The model is discussed by Andrew Hunt in his book Pragmatic Thinking and Learning, but was developed by Stuart and Hubert Dreyfus in 1980. The Dreyfus model of skill acquisition (to give it its full name), provides a model which proposes that a student progresses through five distinct phases of learning: novice, competence, proficiency, expertise, and mastery and the model provides definitions for each stage. We used this with apprentices to track their learning process across the different topics.
Whilst the introduction of a minimum set of criteria, was useful the problem still remained that the approach for teaching the content was mostly left to individual mentors. In order to bring a greater level of consistency we felt it was important to introduce a formal curriculum of learning that could be followed. This would ensure that all of our apprentices were exposed to the same topics and at the same level of detail.
Another adjustment we made was to move away from the one-to-one relationship between mentor and apprentice throughout the program. Instead, we moved towards a group learning model. There have been numerous studies conducted over the years that have found there to be benefits to group learning over individual learning. It tends to promote improved communication skills and provides a platform for people to learn from each other in the group as well as the teacher, challenge assumptions and refine understanding through discussion and explanation.
Previously, apprentices were assigned a single mentor throughout their program. Whilst all of our people have the core Software Craftsmanship principles and are able to teach them, there are other areas where people have a deeper knowledge or speciality. The converse is also true of course, some people may have a working knowledge in some areas but unable to teach in greater detail. This was leading to some apprentices gaining more or less knowledge in certain areas depending on their mentor.
To correct this, we embraced the fact that our people have specialist skills at times and are able to go far deeper in a certain area and perhaps less in another. This is commonly referred to as “T-Shaped Skills” within the Software Development industry (and increasingly in other industries too). The vertical bar on the letter ‘T’ represents the depth of a person’s expertise in a single area, whereas the horizontal bar is their ability to collaborate across disciplines with experts in other areas and to apply their knowledge in areas of expertise other than their own.
With that in mind, rather than assigning an apprentice one single mentor, we assigned multiple mentors one for each discipline of our curriculum. For example, Test Driven Development, Quality Assurance, Infrastructure as Code and so on. This allowed our apprentices to learn each area from people within our Organisation that were strongest in each of those areas, to ensure that the right level of knowledge could be passed on.
Entry / Exit Criteria
Good Software Development teams define entry and exit criteria for their work, for example by defining what “Ready” and “Done” means for User Stories. This helps to ensure consistency both in terms of the work that is being started but also the quality of the work produced at the end of the process. We were keen to apply the same principle to our academy program. By defining an entry criteria we were able to set a minimum bar of entry for our apprentices joining Codurance and make that explicit from the outset. We then incorporated this entry criteria into our recruitment process. This meant that not only could our recruitment team better identify suitable candidates for the program but potential candidates also had a clear understanding of the initial set of skills we were looking for in those individuals interested in joining our academy program. Our entry criteria was carefully put together based on the key skills that we believed were important for candidates to be successful and to get the most out of the academy program.
Perhaps more importantly, we also defined an exit criteria too. What this meant was that for an apprentice to pass through the program, they would have to demonstrate learning across some defined outcomes. We feel this benefits not just the apprentice, but also Codurance and our clients too. It gives our apprentices a ‘checkpoint’ to ensure they’ve taken onboard the content from the program and understand it fully before they ultimately join a project with a client. In short, we want to ensure that our apprentices are best set up for success. It benefits Codurance because we can be confident that our apprentices are able to be successful when working with our clients and are able to uphold and champion our Software Craftsmanship values. Finally, it benefits our clients because they can also have confidence that all of our people meet a certain level of excellence and professionalism.
Finally, we know that Software Development is a team endeavour. As such, we wanted to incorporate that in our apprenticeship program and ensure that our apprentices were also taught the importance of teamwork and able to demonstrate collaboration with their peers and client. The way we achieved this is through introducing a project simulation to the program. Our apprentices get the chance to work on an internal project that is run in the same way we would expect our software delivery teams to operate with our clients. So, not only do they get exposed to the Agile delivery practices such as daily stand ups, retrospectives, User Story backlogs but also to working within a team environment. For example, Pair Programming with fellow apprentices, interacting with Product Owners, facilitating meetings, and so on. Teamwork skills are vitally important within Software Development and we wanted to give our apprentices the opportunity to hone that side of their skills as well as their technical skills.
All of the above improvements now form the current academy program at Codurance.
Academy beyond the apprenticeship
For our apprentices, the end of the programme is only the start of their learning journey within Codurance. These apprentices are recognised at the craftsperson level. At this point they are considered to have the minimum required to join our teams. Individually, they are evaluated to understand their varying level of seniority based on their previous experience and how they can bring that to bear in the work that we do. They’re also supported to find a mentor who can help them along the way. We provide many learning opportunities and a skills based development path for them. It is important to understand that a training programme (even one as extensive as ours) is only the starting point to create a baseline for the skills needed. These skills must be nurtured and honed with assisted development and experience to create truly skilled software professionals.
A skills path is essential to allow your people to develop the skills that are valuable to you organisation. At Codurance we created a skills path that is described around the following areas:
Consultancy: The skill to advise and help our clients through technical and organisational change.
Leadership: Ability to take ownership and support people towards a common goal.
Client Engagement: ability to maintain a productive partnership with the client based on trust.
Coaching and Mentoring: Coaching client teams in technology, practices, and processes that inspires their personal and professional potential. Mentoring: Sharing knowledge, skills & perspectives that foster the personal and professional growth of individuals and teams within our clients.
Teamwork & Effectiveness: Ability to organise yourself, and manage the time effectively so that you are prioritising the right things within the context of your individual and team responsibilities. Helping keep the team effective, focused, happy, supported, and growing.
Technology: Technical expertise as a hands-on expert in designing, coding, testing, or performing some other technical practice, with a focus on promoting technical craftsmanship through example and teaching-by-doing.
Business: Expert at customer and value-driven innovation and product development. Able to provide deep technical and business analysis.
Transformation: Ability to facilitate and (as appropriate) lead organisational change and transformation.
The Case for Academy Programmes in IT Organisations
As mentioned earlier in this article, Codurance was born out of the Software Craftsmanship Community. It’s founders Sandro Mancuso and Mashooq Badar, wanted to create an Organisation built with these Software Craftsmanship principles at the very core. Sandro Mancuso writes in his book, The Software Craftsman -
“Constantly finding ways to become better professionals is a lifetime commitment.”
That is at the heart of everything within Codurance, but it’s not just about improving at an individual Organisation level. As professionals at Codurance we believe we have a duty to improve the Software Development industry as a whole. Furthermore, we believe that all our Software Development colleagues within the wider industry also share that duty - that’s part of being a professional. We strongly believe that apprenticeship (or academy) programmes are a very good way of doing this.
When you hire a new apprentice into your Organisation, they are often making their first steps into the software development industry. These apprentices will one day become the experienced professionals who will pass on their knowledge and experience to the next generation of apprentices. What do we want them to pass on these new apprentices? If we want them to pass on the Software Craftsmanship culture and principles that underpin it we need to ensure that today’s apprentices are given the time and space to learn them. Let’s not forget - Software Craftsmanship is all about increasing the bar of excellence within Software Development.
Many Organisations approach Codurance to help them deliver on a Software Modernisation programme. An integral part of any sustainable modernisation programme is the evaluation of skills gaps within the software development team and establishing a platform to grow those skills. These may include Agile technical practices such as Test Driven Development, Refactoring, Domain Driven Design but also embedding good software delivery methodologies such as XP practices, Continuous Delivery, and DevOps. Often apprenticeship programs are a great way for Organisations to do this as they create the required space and time needed for learning.
Continuous Development Mindset
One of the things we value deeply at Codurance is having a continuous development mindset. In the book Apprenticeship Patterns: Guidance for the Aspiring Software Craftsman, Dave Hoover retells the story of a young philosopher who travelled a long distance to visit a renowned zen master, to learn from him. The story ends with the quote:
“If you come to me with a cup that is already full, how can you expect me to give you something to drink?”
The moral here being, the young philosopher was so keen to impress and share his learnings with the zen master that he wasn’t open to accept learnings from him.
At Codurance, we encourage our people to be constantly open to learning new things and to grow their skills and abilities. Having this mindset is important for apprentices looking to embark on an apprenticeship program and as such is one of the entry criteria that we look for in potential apprentice hires. However, this mindset isn’t just important for apprentices - it’s key for people throughout our Organisation and throughout the varying levels of experience. In effect, at Codurance we promote the concept of an “academy throughout the levels” ensuring that people at all levels of the Organisation are being nurtured and building their skills to ensure that they can fully realise their potential and become the best they can be. As Andrew Hunt said in his book, The Pragmatic Programmer: From Journeyman to Master:
“An investment in knowledge always pays the best interest.”
The concept of an “academy for all levels” is something that is in its relative infancy within Codurance. Whilst we have a formal programme and curriculum for our apprentices, we are still very much learning what the best model is providing a continuous learning platform across the whole Organisation. That being said, there are numerous activities that we do regularly within Codurance that have proven to be successful. These include establishing a mentorship programme, a Community of Practice and providing platforms where our engineers can pair (or mob) on coding katas (usually from our library of katas hosted at https://katalyst.codurance.com).
Creating an academy programme in your organisation
Hopefully, having read up to this point we have conveyed why we believe having an academy program is important. In this section, we’d like to outline how you can go about setting up a software development apprenticeship at your organisation.
One of the first things to articulate are the Organisational needs. What are the skills that are important to your organisation and what underlying principles are there? As mentioned earlier in the article, Codurance was founded on the back of the London Software Craftsmanship Community. As such, the principles and values of software craftsmanship are at the very core of Codurance and something that forms an integral part of our academy program.
In a modern Agile organisation there are a set of core skills that every software developer must have. At Codurance our core set of skills are related to Agile Development Process, Extreme Programming, Software Design and Architecture, Cloud Platforms, Automation, DevOps, Automation, Teamwork and Effectiveness, Feedback, Consultancy, and Leadership. These are a good set of skills to start from at any software development organisation.
You will also need to understand if there are suitable teachers available within the organisation. Here you can create custom training, use online training, and shortlist external training courses that will help you create a baseline. On-the-job coaching and mentoring is the next step and is absolutely necessary in order to establish these skill sets within your organisation. At Codurance we rely on our more experienced craftspeople within teams to actively coach the more junior members. You’ll need to identify such coaches and mentors within the organisation and carefully place them in teams and provide space for them to be able to coach other team members. If such people are not available in the organisation then consider hiring people with the right skills to seed these teams. Companies like Codurance can help you create and establish such programmes.
This article has intended to convey why we as Codurance value software apprenticeship programs so much and why we believe that they are key in raising the overall level of quality and professionalism within the software development industry. Below are some key takeaways on how to build a successful apprenticeship program, based on our experience :
Run it as a formal programme
Have an explicit curriculum of topics to be covered
Dedicated teachers for each topic within the curriculum
Formalise a set of entry and exit criteria for the programme
Foster a community of continuous learning throughout the organisation