Tech training at ASOS
One of the many benefits of working at ASOS Tech
One nice benefit available to ASOS engineers is free technical training. We deliver monthly sessions in Docker, Kubernetes, AKS and CI/CD. We also offer “software crafters” courses, “lightning talks” and design patterns courses.
There’s an amazing concentration of great engineers at ASOS, with a wide variety of expertise, who are keen to share their knowledge. The training program is growing and evolving, and it’s exciting to be part of it.
Well… how did I get here?
I’m a self-taught programmer who started coding in the late 1980s in San Francisco, while studying music at university. Since then I’ve maintained two careers, working professionally as a software engineer and musician.
I learned .NET in the mid-2000s, moved to London in 2008, and worked permanent and contract roles, mostly doing back-end work with Microsoft tech (C#, .NET), but also front-end with ASP.NET / MVC, React and Angular.
In early 2020 I became a Senior Software Engineer for ASOS, working in the Browse team on microservices like the Search and Category APIs.
Like many teams at ASOS, at that time we were migrating classic Azure Cloud services to Kubernetes and AKS, but the Browse team was on the leading edge. I realized I needed to learn more about this tech stack, so I took advantage of the free in-house tech training courses on offer.
Then the pandemic happened. The training program faltered a bit, then we began teaching sessions online over MS Teams. A call went out for more volunteers to teach. Getting involved with teaching, I thought, would be a good way to force myself to study these technologies more thoroughly, with a view toward being more effective in my day job.
The typical learning path for students is to first take the course; then “shadow train” (see how the teaching is done, learn from the leads); then, with some training and preparation, become a Lead Trainer. I started doing that with a couple of subjects (mainly Docker and Kubernetes), found I really enjoyed it, and became very active in the training program.
ASOS Tech actively encourages people to become trainers — to mentor other engineers, as well as for personal development — but naturally, it’s in the company’s interest too. Having a better-educated team of engineers helps ASOS Tech deliver great software more effectively.
We’re gonna need a bigger app
At first, the admin bit was all manual; we were keeping track of the sessions and trainees on a wiki page in Confluence. I thought “This cries out for an app”. So in my spare time, I built a full-stack internal website with a React front-end, .NET Core back-end and a SQL database with Entity Framework. I manually migrated the data off the wiki page into the DB, whipped it into a shape good enough to demo, and thus built the MVP of the “Training Course Manager” app (“TCM”).
Another cool aspect of ASOS is that inner-source projects are very much encouraged. So I was pretty thrilled when TCM was embraced and accepted by the team. With a little help from Principal Engineers and infrastructure people, we containerized it, wrote the DevOps pipelines and Helm charts, and deployed it to AKS. Like all software, it’s still eternally a work in progress, but it was a happy day for me when TCM went live!
Dave gets the gig
Then, in early 2022, I learned ASOS was creating an official “Engineering Trainer” role. I thought it would be a great opportunity to carry on the work I’d previously been doing in my spare time.
Part of the interview was delivering a mini training course session; I’d done so much of that already, I felt pretty comfortable delivering a little Docker session. Between that and showing the app that I’d built, as well as my general enthusiasm and some ideas I had to expand the program, I was pleased ASOS felt that I had what it takes to be the Engineering Trainer.
It’s been almost a year now, and I’m really enjoying the role and the challenge of building a world-class tech training program. I’ve tried to apply a few simple ideas to my work in this role:
- Treat training like production code, with an emphasis on high quality.
- Continuously improve training delivery and the training material.
- Make things more consistent for easier maintenance.
- Improve automation of admin and continuously improve the app.
- Let trainees “learn by doing” — hands-on labs are the best way to learn.
Living in the material world
The material was originally developed by ASOS in conjunction with external partners Microsoft and Codurance. Since those days technology has moved on, and our ways of delivering have too. The material was good, but it had to be adapted to online learning. Also, some of it read like it was written by a committee, and some were just getting a bit outdated or stale, so a big part of the first year has been just tidying up the material, and editing lab exercises, slides and speaker notes.
The material is a combination of PowerPoint decks, demos and hands-on labs. We continuously evaluate whether the material is still current, we update versions of software used in the training and ensure the material is in line with our current best practices. We treat all this material like production code, so we keep it in GitHub and do pull requests when something changes. Typically we do a pull request after we’ve delivered a session because that’s when the things that need to change are fresh in our minds.
Make things consistent
One important aspect of making maintenance easier is establishing standards for how course material is structured, regardless of the subject being taught. A typical course material directory will contain a trainer plan markdown file (showing the agenda for a one or two-day course); a useful links file (containing hyperlinks to pertinent further reading on the topics); “labs” and “demos” folders containing the hands-on lab exercises and demo scripts; a “slides” directory containing markdown files that represent the source material for slide decks; and a “published slides” directory containing the PPTX output.
It’s like magic
It’s difficult to see the diffs when changing a PowerPoint file. In other words, when something changes, and you’re trying to review the pull request, it’s impossible to see what the PowerPoint slide or speaker notes looked like before, versus what they look like now.
To solve this problem, we decided we needed a text-based solution from which we could auto-generate the PPTX files. There are a number of solutions to this out there (e.g. we’ve also tried Reveal.js); but we ended up choosing Marp. It lets you edit .md files which are a mix of markdown, HTML and CSS. Speaker notes are written as HTML comments. CSS makes the decks look like standard ASOS slide decks.
We still present in PowerPoint (sharing in Microsoft Teams). When developing the deck locally, you can manually export to PPTX, but we automate it with a GitHub Action — upon merging, the Marp commands auto-generate the PPTX files. We also have another set of GitHub Actions to publish a “release” — so when a student is taking the Docker course for example, they don’t need to clone the entire training material repo; the release is published in the form of a zip file which contains the latest course material.
Come up to the lab
Trainees do hands-on lab exercises, which require regular maintenance and updating. For instance, versions of Docker and Kubernetes change; Microsoft changes the way it handles identity in AKS; licensing policies change, etc. And, we change the way we do things as our core AKS and Kubernetes teams develop new artifacts, templates and improve our best practices. For instance, they’ve established “core container base images” that can be used for applications on Azure Kubernetes Service, Azure App Services or other container-based apps. All these things require regularly running the lab exercises ourselves, to ensure they’re still current.
Automatic for the people
We’re always looking at ways to improve and automate how we administer the courses, to make life easier for the trainers and trainees alike. For instance, the app maintains a waiting list of people interested in taking a course, and when a session is run, the admin person can send an email to everyone on the waiting list with a button click. Another click creates the Outlook calendar event and Teams channel that will be used for delivering the session. The app knows about prerequisites, so for example, it checks you’ve already taken the Docker course before you can join a Kubernetes session.
Goal!
In the end, the goal is to help engineers through a tech training program that is rigorous, but also fun, so when they come out the other side they feel more confident of their knowledge of our tech stack and have a greater understanding and appreciation of the craft of building great software. Ideally, it becomes a virtuous cycle, as they go on to share that knowledge with their fellow engineers. Ultimately we want a culture that naturally spreads because people are passionate about quality.
Looking for a few good trainers
It’s not all unicorns and rainbows. One of the challenges we’re working on is to expand our team of trainers. Because (apart from me, whose job it is to deliver training), for my fellow trainers, it’s essentially voluntary. There tends to be a core group of dedicated Principal, Lead and Senior Engineers who do training because they want to; but the reality is, we need more trainers. Why should someone take time off to deliver training when they’ve got a busy day job delivering great production software for ASOS? Every month I need four or five trainers to pair with me to deliver the required courses. How do I get the people I need in a sustainable way?
It’s not just an ASOS thing; the industry as a whole sometimes struggles to encourage engineers to step into roles. There might be a lack of capacity, time and resources, or a challenge aligning the company’s needs and requirements versus individual career aspirations.
We are trying to make ASOS a more inclusive place to work and that starts from the very top — we seek to recruit tech trainers internally from all backgrounds, in terms of neurodiversity, gender, ethnicity and sexuality.
ASOS has made a commitment to diversity, equity and inclusion with the launch of the FWI (“Fashion with Integrity”) strategy — “Be Diverse”. Our initial targets are focused on achieving 50% female and over 15% ethnic minority representation across our combined leadership team by 2023, and at every leadership level by 2030. We aim to have over 40% female representation in Engineering, Product and Science (Technology) roles by 2030. Find out more at https://www.asosplc.com/news/asos-announces-ambitious-new-2030-esg-goals/
You’ve got to believe
So, why are people hesitant to become a trainer? Maybe they lack confidence, or perhaps believe they need to be a master of the material in order to become a trainer.
That’s not really true. We want well-prepared, knowledgeable trainers, but you don’t need to be the world’s leading expert. We have aspiring trainers pairing with other experienced trainers, so for a given course you only present half the material. You need to be able to read speaker notes, and you do need to familiarize yourself with the topic and material. And you should go through the lab exercises, so they’re fresh in your mind.
But if you get a question you don’t know the answer to, you don’t have to feel embarrassed about it; nobody knows everything. You can simply say you don’t know; you’ll look into it and get back to the trainee; then, follow up and do it, ideally before the course ends. That will teach you both something you didn’t know. The student will (hopefully!) respect you for admitting you didn’t know, but then followed up; and, having learned something the hard way, in the end, it’s something you’re unlikely to forget!
Delivering tech training is also great for getting experience in public speaking, gaining more confidence and belief in yourself, mentoring others, and obtaining a deeper understanding of the topic; all of which can only help you in your day job, and your career in general. And we’re not just looking for seniors and above; mid-level engineers are also encouraged to become trainers.
Game on!
We’re looking at ways to address our trainer supply problem, e.g. “game-ify” the app, create leader boards for individuals and teams and giving out free swag (free lunches, coffee, t-shirts, mugs, etc). But that’s still not really enough. We’re also working with engineers and engineering managers to create more tangible incentives to ensure the training program has a steady supply of trainers. So far the program has done well with our dedicated core group, but we need to expand the training team — and we’re actively working on that problem. Watch this space.
Other questions and challenges
The fact is, it’s just hard to develop a high-quality training course. We’ve learned this by trying to resurrect our “software crafters” course, which lost some momentum during the pandemic. What do you include, and what do you leave out? How do you structure the material into bite-sized chunks, maybe with a short talk and a longer lab exercise, kata, or pair-programming exercise? People have different styles of learning; how do you accommodate them? How do you reconcile differing opinions on what constitutes good practice for TDD, for example? How do you keep people’s knowledge fresh, keep them practising after they’ve left the course, and keep the material from getting stale? We’re working with our partners and also looking at real-world examples of successful training programs and learning apps, and taking some lessons from those who have already been down this road.
Conclusions
I got into teaching because I wanted to learn — so I’m definitely winning in that respect. Every day brings new challenges and opportunities to improve things. It’s just a really interesting problem, to work out how to develop a world-class training program for an organisation as sophisticated as ASOS Tech, with a demanding audience of already highly-skilled engineers. I feel very fortunate to have this opportunity to try to help my fellow engineers improve their skills, and make a great place to work even better.
PS — see also another ASOS Tech blog post about tech training, from last year that focuses on the practicalities of launching a training program.
I’m Dave Barrows, Engineering Trainer for ASOS Tech. I run training courses in Docker, Kubernetes, AKS, DevOps, and the craft of writing code and building software. I’m also a musician and producer with my own indie record label and home studio; I play regularly in London and elsewhere.