Surfacing Required Knowledge
Externalizing Required Knowledge
Companies often choose technologies with the hope of easily finding a workforce for it, one that is commoditized. Put the job ad, get seniors with 5+ years of experience on 3 years old technology. Nobody knows where or how they were trained. They’re just there, ripe for the picking, part of the environment. Countless companies would rather spend extra months looking for the proper type of seniors with the proper ability to answer the right whiteboard questions–which mostly suck at predicting how good they’ll be on the job–than they would trying to train their employees up the level they expect.
On the other end of the relationship, workers enter a perpetual rush to stay up to date on specific technologies, with the hopes of remaining employable. People are stuck playing a divination game in hopes to bet on the right stack with the right skill set such that they’ll check all the boxes in a job ad that sounds like a Christmas wishlist in a letter to Recruiter Santa. Where do developers find the time to keep up to date? Free time, mostly. They do it at night, or maybe on stolen time from employers.
This cycle of building on newer stacks all the time to have a more easily hireable workforce whose concern is to always learn newer stacks to remain employable accelerates in a painful way, churning through burnouts and stacks. People avoid roles in stacks that are seen as less trendy because they’re fearing it will hold them back, and yesterday’s new hip thing is now the radioactive legacy of tomorrow.
Average tenure at most organizations remains short as people know and expect to get far more significant raises from switching roles than waiting for internal promotion or salary adjustment cycles.
This is compounded when many employers have salary ranges attached to seniority ladders, and that to keep hiring new talent at market rates without raising existing payroll costs, people with less experience get hired at more senior levels while your more senior people’s levelling slows down. Hopping jobs becomes a baseline strategy in the industry, and people who are happy in their roles can see themselves at a severe disadvantage
On-the-job training, where an employer takes on the duty of training the people they hire, used to be one of the most popular ways of doing things, usually with the help of mentorship and apprenticeship. Companies that historically were truly innovative actually had no choice but to work this way. If they were absolute leaders, they were the only ones able to show others how to do things for them. You couldn’t expect to reach excellence without having ways to foster it; otherwise what you could do is hire the offshoots of places that knew how to do it, and follow behind them like seagulls trailing a fishing boat.
when hiring someone, we set a base level we expect, and then commit to leaving the new hire enough time to ramp up and close the gap, or more ideally we commit to training them until they reach or exceed expectations.
When we raise the bar of hiring without changing anything else, we tacitly externalize the cost of levelling up people to the ecosystem at large
So here’s the new lens: what would be required of organizations if we wanted to actually lower the bar of hiring, and we took it on ourselves to close the gap between what we expect of high performers and the situation they’re in when we hire people?
Surfacing Required Knowledge
A scary aspect of this externalization is that–like a lot of things we externalize or commodify–our dependencies become invisible. Open source software is a bit the same: those who treat it like a free buffet without regards to the sustainability of libraries they use can suddenly become surprised when the external actors (the maintainers) vanish or move on to other things.
To me, this is the rough edge to “use boring technology”. Using boring technology sort of aligns with safer externalization of software, but it reaches its limits when you start stretching common pieces of technology [beyond] their intended or most typical uses. Is it better to take a given database you know already and use it in weird ways only your team knows, or to add a new different storage mechanism that is used the way everybody else uses it and for which you will have lots of resources? At some point, the choice is not so obvious.
That choice is simple enough for open-source work, but it’s not really an option for education and expertise. Some of the things your organization does are only going to be known by your organization.
If you’re providing software as a service or operating a platform for your customers, one of the most revealing questions to ask is “how could we let customers run this on-premises?”
You are dependent on a living experience embodied by your team, and it’s near impossible to divorce your system’s ongoing success from its people.
Ask similar questions about your staff: if a given employee were to leave tomorrow with no knowledge transfer, how much trouble would we be in? Can we simulate that by making them take surprise paid vacation for a week? What would come up? Is there glue work they do and we don’t realize?
Are there parts of our system where we don’t really know what good results are supposed to look like, and we’re mostly relying on things keeping on keeping on the way they are? Who knew what “good behaviour” for the system was supposed to be when we added these features, and what happened since then? What are some good war stories in your group, and how are they being passed on?
I can think of two families of approaches: one that is structuring and explicit, and one which is about fostering the right conditions for things to happen.
An explicit structuring approach would have you map out all the things we need, or at least the important ones.
Your tell-tale signs of that would be having internal documentation (that is up to date), internal bootcamps, a library of presentations and tutorials to help people level up, the equivalent of game days and simulator hours in airline pilots where you can train and get acquainted with all the complexity as part of you joining in. This has a cost, and the weight of this structure creates a rigidity that can limit your own adaptiveness; you need to be able to undo and adjust all of that material constantly to keep it useful, rather than treat it like precious ruins no one should disturb.
For many of the explicit structured approaches, you won’t get the important stuff by asking. Most of it is tacit knowledge that only shows up when things break. And then you will see your local experts identify the failure mode, reason about how it happened, and find ways to correct course for the system and make things work again. That is the sleeping expert knowledge that gets invoked in times of need but that we otherwise never recall explicitly.
Fostering Expertise
it makes sense to force a distinction between knowledge and expertise. Knowledge can be the things you know such as facts and strategies, context and history around decisions. They’re somewhat easier to transmit between people. I’ll define expertise as trickier, and relying on experience to easily and correctly make use of knowledge on a contextual basis. It’s the difference between knowing the rules and when to break them. It’s figuring out what information not being there could mean, and how to adjust.
Your people’s expertise will show up when encountering novel situations that will challenge them.
Those are going to be defining moments where teammates help each other level up.
Much like a capacity to adapt or good cardio, expertise is not something you have as much as something you do. Make sure everyone gets to exercise and be in contact with it. Walk the problem space and get people to talk to each other in ways that synchronize their mental models and experience. Provide ways for people to get quick feedback for their actions, both from mentors and from observing the results of their actions.
Sustainable Externalization
Some stuff we won’t be able to afford internalizing.
Hillel Wayne’s Crossover Project mentions:
We software engineers take the existence of nonacademic, noncorporate conferences for granted. But we’re unique here. In most fields of engineering, there are only two kinds of conferences: academic conferences and vendor trade shows. There’s nothing like Deconstruct or Pycon or !!con, a practitioner-oriented conference run solely for the joy of the craft.
However, implicit limits that come from “training on your own time” perpetuate structural privilege.
If we are to externalize knowledge and expertise to a broader ecosystem, I would advocate doing it sustainably: participate in the ecosystem, and make it so your people can do so during work hours If you see a huge benefit from using the training provided by others (and their open-source code, while we’re at it), find ways to take some of these savings and reinvest them to the community, even if it’s just a tiny fraction of what you saved. Big industry players have already realized that their devrel and marketing pipelines can benefit from it, and smaller ones with a keen eye already are involved in local user groups.
Get your shoulder up to the wheel and turn from consumer to participant, both for the sake of your employees, but also for the sake of your own sustainability.