visit
“What is the best way to understand if the feedback I give is useful?”To be clear, these experts provided a few high-level principles which, when summed up, are definitely important enough to remember: over the long-term, the best indicator of feedback quality is how many people ask you for feedback. But somehow, it lacked the air of concreteness that would make it actionable.On my team, we had four engineers plus our summer intern, Sofia (probably not her real name). When the same question was asked of our team, as happened before, the engineers struggled to give concrete answers. Sofia, on the other hand, replied very concisely:
“As someone who gets feedback often, it’s most helpful when you explain ‘why.’”Then she dropped the mic and walked. OK, I’m kidding about that last bit, but her answer contains a goldmine of practical wisdom that is somehow almost opaque to experts. I’m going to take the liberty to refine Sofia’s statement down into something a little more punchy:
“I don’t care until I know why.”Why is it so hard for experts to communicate “why” to the novices in our field? Furthermore, why is it so hard for experts to experience the pain of not being told why? Interns are novices in their field. They are otherwise knowledgeable people who are also experts in being non-experts.
“Novices perceive concrete details as concrete details. Experts perceive concrete details as symbols of patterns and insights that they have learned through years of experience.” - Chip & Dan HeathPatterns allow experts to understand the reason for the various concrete details in a broad system. It’s not just that Sofia sees a function parameter where I see inversion of control to facilitate both testing and modularity; I can no longer understand what it means to not understand. The Curse of Knowledge is the cognitive bias that prevents experts from remembering what it’s like not to know something and is the primary inhibitor in their ability to teach novices.
“The job of the teacher is to arrange victories for the students” - QuintilianHow small is too small? How simple is too simple? Decompose broad ideas into nuggets just granular enough that they can be understood and converted to small victories. If those around you aren’t able to make an immediate practical application from your nuggets of knowledge, then they are either irrelevant or still to complex.A novice is aware of what confuses them but doesn’t know what options exist as solutions. Experts are aware of the solutions but don’t know what might be confusing. Like the menu at a restaurant, large decomposing ideas provides a menu of solutions to bridge the gap between experts and novices.Overall there are three types of concepts to decompose.
First, learn how to break down behaviors.
I could tell Sofia that I code a lot on the weekends, formed an LLC, read a lot of technical and non-technical books, and even wrote a sudoku solver when I got bored on vacation. I could tell her that I attribute my most professional success to behaviors like these and recommend that she also engage in the same. But it would only be a diabolical form of reverse cargo-cultism if I don’t explain “why.”Without conscious effort, it’s hard for someone who reads a lot to understand why I would need to make a value proposition for reading. It’s just good. But to make a meaningful case, I have to break down the seemingly simple act of reading so that I can adequately explain all of the moving parts, how and why they work, and how she might also benefit.Reading lets you borrow others’ mistakes so that you don’t have to waste time and money making them yourself. I have over a billion dollars of mistakes sitting on my bookshelf; thankfully, none of them are mine. I will never have a billion dollars at my discretion to spend on screwing stuff up. But reading is only one of many ways to implement this principle. Her cup of tea might be a literal cup of tea while chatting with an expert who has “seen things.”Secondly, you can break down technology.
While reviewing her code, I could point to the coding guidelines and tell Sofia to pass an interface as a constructor parameter instead of constructing a database connection directly in a class method. But that guideline exists because of the Dependency Inversion Principle. We can further decompose that principle by showing how it interacts with other principles, such as testing in isolation and overall modularity.Lastly, you can break down legacy artifacts of old company code.
There are minefields that lurk deep within legacy codebases that only “lifers” can navigate safely. There are weird dead things that only exist because no one has the guts to touch them. The strategy here is to call attention to specific points of the architecture deviate from industry norms. Pinpoint the best practices went out of vogue but remain in the code.Explain why the dumpster fire is the way it is one small trash bag at a time.This approach to shattering metal monoliths provides a way to tune your communication to avoid the Curse of Knowlege. If you are working with a bootcamper, you will likely need to work with very small nuggets. With a mid-level engineer who is new to the team, you’ll be able to communicate effectively with larger concepts. Decomposing allows for mentoring at multiple levels, even concurrently, by motivating novices at multiple levels by focusing on different axioms.“So the pilot wasn’t perfect. Who cares?”However, the real payoff was the emotional implications that it had for the team. Hugh is incredibly driven and has high standards for himself, but the downside is that he would often internalize failure. By focusing on what we did with feature flags as a small win in the context of a larger struggle, he was able to refill his “emotional tank.” At one point, I flat out told him: “So the pilot wasn’t perfect. Who cares? I certainly don’t! We were able to progressively roll out the new site with minimal customer impact, and that’s awesome! We’ve never been able to do that in the history of the company! All of the people who matter have noticed and are more impressed with our agility than our perfection.”And I wasn’t just being dramatic, they did notice. During the quarterly all-hands meeting, our CEO described how by leveraging feature flags, we allowed the whole company to move more quickly and nimbly than ever. Focussing on feature flags allowed him to attribute success to effort rather than luck. Everyone forgot about the failure. The team got recognition for the success, and both Hugh and the CEO knew precisely why.
I knew the “what,” but I was punched in the face with the fact that first, I myself had to learn the “why.” Once I had broken it down in my own mind (and wrote this article), it was almost cheating to sneak various principles into everyday conversation.
Beat the Curse! Show new engineers why the small parts of big systems are worth it. Tee up small victories! Everyone will love you for it!