As well as being in tech, I’ve spent a small amount of professional time as a teacher / lecturer. I’ve taught at the FE college level (arboriculture and woodland management) and university level teaching “front-end-design” things” (HTML/CSS, typography). I also spent some time doing technical training workshops (Python / Django and basic command prompt usage) in a freelance and employed capacity for Mozilla way, way back in 2010. There was a time I thought my teaching qualifications meant I was going to become a teacher. That didn’t happen. I ended up, and happily so, back in tech. I came to the conclusion that if I really wanted to help people learn, I had to get as far away from education as possible. That’s a topic for another day.
Teaching isn’t about giving a presentation and asking “any questions?”. Learning isn’t about having a question lined up for the obligatory “questions?” at the end of a presentation. Teaching and learning is a journey that is just as much an emotional pursuit as it is an intellectual pursuit. Many people expect the second, but not the first. Learning changes you. After all, the version of you after learning now has an expanded world model. Even the least self-aware person doesn’t alter their personality based on the acquisition of a knowledge or skill.
Blooms Taxonomy
Anyone who has come near to the topic of teaching or studying will have come into contact with Blooms Taxonomy. It’s unavoidable, and probably one of the most brilliant frameworks in teacher land with Maslow’s Hierachy of Needs coming in a close second.

I’ve avoided the usual pyramid form because whilst it’s a useful way to get an idea of the framework, I think it creates this notion that learning is linear, predictable and fun.
Learning
I wrote about why learning isn’t linear on my more woodland focused publication a few years ago. Neither is learning predictable. Some days you can, some days you can’t. Maybe your cat injured itself, you got less sleep and whatever retention you had was lost to distraction and tiredness. You have to remember that you are effectively upgrading your firmware when you learn. Increasingly as you age, the upgrades are harder and resisted more. The body and mind love to defend against energy expenditure and change.
Learning also isn’t always fun. We all remember the dopamine hits when the penny drops on a concept you worked hard to understand. We often don’t remember the bits where we doubt ourselves and spiral into doom. The doom spiral is something I am acutely familiar with. I find my way out of doom spirals by sketching, doodling and drawing them. This was a particularly dark one from 2023.

So learning isn’t predictable, linear or fun. More importantly learning is a series of cycles. I think of it like this:

For the most part there’s always a gap between perceived skill and actual skill.
Understanding these principles is central how I teach and lead a group of students when learning. You cannot teach if you don’t understand learning. You may have experienced this as a student. You can tell in a second if the teacher is going to be a waste of your time. It’s a gut thing. You certainly feel it as a new teacher wrestling to learn learning and teach at the same time. There’s no fix. You just have to slog it out. It’s not fun, it’s not predictable and it’s not linear. Point made, let’s move on.
Basics
At a basic level teaching is firstly about laying out out a map of the topic. Then you setup base camps at key places on that map. The move to intermediate is metaphorically like developing the base camps into towns. I will cover intermediate in another post.
The basics are always easy to teach as most students are roughly in the same cognitive place; little to no knowledge of the layout of the land. When teaching code the playbook was like rules, syntax, idiomatic patterns, tooling and basic debugging approaches. The approach is quite behavioural; do this, don’t do that kind of thing.
Blooms as a progress meter
Assuming a group of people (students, or a cohort of new hires waiting to be on-boarded) starts out in the same place when learning, then as a group everyone mostly progresses at the same speed. As you teach any group, you need to be constantly assessing. You can make use of Q&A to do this, group tasks (set cringe to max) or just ask the students to assess themselves. However you do it, you need to do it as that’s your key metric when “in-flight” teaching.
Back to Blooms Taxonomy and why I prefer to view it as non-pyramid and more of a “progress meter”. It would be tempting to say “basic, intermediate, advanced” and deduce that “basic: remember, understand. Intermediate: apply and analyze and finally advanced: evaluate and create.” Don’t do that. Let’s understand why.
You’re teaching a basic such as the CSS box model…
/*
Assume this structure..
<body>
<div>
<h1>
Hello, World!
</h1>
</div>
</body>
...and assume the default of content: content-box;
*/
div{
margin: 10px;
padding: 10px;
width: 200px;
border: 1px solid black;
}
/*
q: what is the width?
*/
You set the class an easy question of “What is the width of the div? (a: 222px)”. In order to get to the answer you’d have to remember and understand the box model, but you’d also have to apply that knowledge to give the answer. Now lets ask “How much space does it take on the page? (a: 242px)”. In order to get to that answer the student has to analyse a few concepts. So does the fact we’re at the “analysing level” mean the student is at the intermediate level of CSS? Obviously not, but it does mean the students knowledge of the basics is progressing and, in this case, fairly well.
But we’re still building basecamps. The box model is one, responsive design is another, accessibility is another, variables, layers, to-framework-or-not-to-framework etc etc. Just because our students are able to analyse the box model, doesn’t mean they’re up on accessibility issues like contrast, font scaling and where CSS-land shares borders with guidance and concepts such as WCAG and ARIA. Blooms Taxonomy may be used at all levels in basic land, so don’t think that a students ability to “create” implies that they’re reading to start dropping mad animations using ::before and ::after. If you asked a simply question, “draw me an example on the board of a div and mark up the css and give me the actual size and the effective page space it takes up” then you’ve got a create situation.
Map of the topic & basecamp building
As the teacher, lead engineer, lecturer, facilitator, whatever I’m called when I doing it; when I’m doing the basics it’s mostly me. 70% me, 30% the people I’m engaging in learning. I’ve got two main objectives – first, laying out a map of the topic and second, setting up base camps in each key area. Some people are going to learn faster and some slower than others (managing that is topic for later) but for the most part the entire group is with you. Blooms Taxonomy being the tool of choice for engaging the group and getting an “in-flight” metric on group and individual level progress.
Example, let’s imagine “Foo” remembers stuff easily but doesn’t quite understand it, “Bar” is way ahead and easily creates examples. The rest of the group is in between and called A, B, C and D.
“Ok, Foo, give me an example of a module attribute in an Elixir module” me
“Err … @whatever?” Foo - ending in a raised pitch because they’re not certain.
“bang on, now give it a value” me
“Emm ahhh … @whatever = 2” Foo
“Nice, thankyou. You’re close, but there’s a syntax error - can anyone other than Bar tell me what it is?” me
(A, B, C, D all avoid eye contact)
“I’ll pick someone directly in 3, 2 ….” me
“you don’t put an equals when doing module attributes” B, reluctantly
“Thanks B, you should 100% trust yourself more you’re spot on. Well done.” me
“Alright last question before we take five. Why aren’t module level attributes suitable for config values that you’re taking from the environment at runtime? and that’s for the group…” me - but I suspect Bar is going to answer it
“It’s got something to do with the fact that unlike Python or JS, Elixir is compiled but I’m not quite clear on it” B, not reluctantly - me; chuffed because my little confidence boost worked
“Ten points B, nailed it but I wonder if anyone can clarify it…” me and I don’t give out points lightly. (A, C, D 100% not wanting to answer - I can smell their heart rates like a teacher vampire)
“Ok, anyone … … … … Bar?” me, leaving twice the silence than is comfortable for me or the group
“Module attributes are evaluated at compile time, so by the time your app is running, the value is already baked in. If you try to pull from the environment at that point, it’s too late – the module’s already been compiled with whatever was there when you ran mix compile.” Bar, probably while already looking at the next thing which is 100% something I need to manage before I lose them
Conclusion
I’ve applied this approach in multiple, very different scenarios. In my capacity as CTO during 1:1’s I used it frequently, if not perhaps sneakily, to get a feel for certain DevX issues. “Hey, talk me through how you deployed that new service into production”. I’ve used it in classroom of 16-20 year olds teaching them level 3 arboriculture topics such as “pests and diseases” that they 100% did not want to learn because they wanted to be up a tree with a chainsaw. I’m pleased to say I succeeded in both camps. Maybe I was laying on the art history a bit much in the pest and disease classes though. But I made a commitment to my old art history teacher1 to always spread the art gospel.

When you’re teaching the basics, in any subject, you need a strategy to gauge how well the group are progressing. This is just one way to use Blooms Taxonomy as a means to facilitate learning. Ensure you’re using all the levels because otherwise your lessons are going to be duller than a dull day in Dullerton, Dullswitch watching Dully McDullface paint his dull house the dullest shade of dull your dullest self could imagine.
-
Jean Stoker - a true inspiration for turning a dry topic into one of the most engaging years of lectures I’ve ever had. ↩