So, now we've identified a problem of the right size, let's see what we can do to solve it. When we look at, we're looking for the root cause of a problem, it will relate to one of these four inputs that go into making high-performing teams, and at work, we call this the 4M model, which describes those inputs.
Firstly, we have the maker, the person who's producing the thing that delivers value, and the things that go into that are their health, their knowledge, and their skills. Then we have, secondly, the machine. So, this is things like, for us, the code base, the equipment, the development environment, all of our tooling falls into the machine category. Then we've got methods, so that refers to the work standards. So, that is what is state-of-the-art for the way that you're doing something. And finally, we've got the materials. So, these are all the things that we give to the maker, to the developer, in order for them to complete their ticket. So, that might be requirements, and it also might be designed from a designer, if there's any UX that goes into their ticket. And depending on what category, your root cause falls under, we'll solve this problem differently.
So, for the maker, we'll train the people on the specific piece that they produced. For the machine, we fix the tech. So, for example, when I mentioned updating the TS config, that was fixing the machine, and I was making it impossible for someone else to fail in the future. If there was something wrong with the method, we can go back and update our standards for state-of-the-art. So, we may have been producing something to the correct standard, to our best understanding of what state-of-the-art was, but it turns out our understanding of state-of-the-art was completely wrong, and now we need to go and update our understanding. And if there was something wrong with the materials, i.e., the physical inputs, the things that we gave the developer, we can then locate where the original defect occurred, and go to that place to ensure that there is quality at the point that that thing was created. So, if it was designs, it's going back to the designer and seeing why was there a miscommunication or a mismatch between the thing that was required by the developer and the thing that was produced by the designer.
Let's bring this all together and look back again at the cycle of firefighting that we talked about. So, in fact, I actually later revisited the exact same problem where a dev was struggling with a CMS ticket, and because I hadn't solved it right the first time, with my updated understanding of my role as tech lead, I actually had a second chance to tackle this problem. So, we spent some time looking at it together and it takes us about 10 minutes to find that a property that we expected to be returned from the CMS was actually undefined. So, we solved the immediate issue by fixing the TypeScript to indicate that the property had changed. But instead of returning to my own ticket this time, we first did a quick problem analysis and we found that, once again, the reason was because someone had made a change to the type of the CMS without updating our TypeScript.
So, at this point, we can choose to address it in one of a number of ways. We can either train the maker, fix the machine, change the method, or analyze the materials that were inputted. And I consider this kind of problem to be a machine problem. Because if we fix the machine to make it impossible for us to fail in the same way in the future, we've effectively eliminated this class of problem. So, in this case, actually, we found a number of ways that we might solve it. The way that we chose to address it in the end is we used a library which automatically generates TypeScript types from the data type that's defined in Contentful. You run TSC, or the script, which then generates the types and runs TypeScript compile, and your code will fail at build time rather than at run time.
Comments