I recently read a very interesting book. It’s called “The Knowing-Doing Gap: How Smart Companies Turn Knowledge into Action” by Jeffrey Pfeffer and Robert I. Sutton. I stumbled over the book by chance, and despite its age of more than 24 years at this point, it’s still highly relevant. The core premise of the book is simple: knowing what to do isn’t enough. We might know exactly what to do but still fail to do it for various reasons. The book explores the reasons behind this failure. Here’s what the authors say in the preface about their key motivation:

We wrote this book because we wanted to understand why so many managers know so much about organizational performance, say so many smart things about how to achieve performance, and work so hard, yet are trapped in firms that do so many things they know will undermine performance.

Over the course of the book, the authors present these five impediments that prevent knowledge from being implemented:

  1. Favoring talking over acting.
  2. Sticking to established ideas without reflection.
  3. Getting paralyzed by fear.
  4. Getting obstructed by measurements.
  5. Getting sidetracked by internal competition.

These are not the exact terms that the authors use: I’ve reworded them for increased clarity. As we can see, at their core, all of these points are about company culture. This is most obvious for the last three points. It’s hard to get anything done in a company where fear, internal competition, and bureaucratic measurements reign supreme. The first two points are more subtle but also rooted in culture. In an action-oriented culture, it’s difficult to get away with just talking about doing something. Likewise, it is tough to start something new in a very conservative company culture. As all of these points are rooted in company culture, it’s very difficult to actually fix them. This nicely explains why companies rarely actually improve. It also explains why so many initiatives driven by highly motivated employees who want to improve something don’t work: these systemic problems cannot be fixed on an individual level. Pfeffer and Sutton put it like this:

If you work in a place where you or your colleagues don’t turn your knowledge into action, it probably isn’t just your fault.

So, what does this mean for software development? I think it’s critical for software developers to be aware of the knowing-doing gap. Many developers have a great thirst for knowledge and hence like to spend their time acquiring more knowledge (for example, by reading blog posts). This is fine when the goal is to expand one’s own horizons, but it will lead to disappointment when the expectation is that this new knowledge will have an immediate impact. For example, there is little value in knowing how exactly the fancy microservice architecture of some big tech company works if our company isn’t doing microservices. Hearing about something and implementing it are two very different things. Reading a book can teach us some concepts and ideas, but it cannot convey all the tiny details that we’d learn when implementing the idea. Hence, Pfeffer and Sutton recommend learning by doing, as we won’t have a knowing-doing gap in this case. We need to keep this in mind whenever we consider spending time to acquire further knowledge. For example, I read a book on the Elixir programming language a while ago. It was interesting, but it only gave me a shallow understanding of the programming language. To get a better understanding, I’d have to actually program in the language, ideally in a real job. As I haven’t done that so far, my knowledge remains shallow.

Awareness of the knowing-doing gap is even more critical when we’re searching for an answer to a systemic problem in our job. For example, we might be dissatisfied with our number of automated tests. This will not get fixed by educating developers on the advantages of automated tests (or even by reading my blog post on the subject). As we’ve learned, knowing that automated tests are valuable is not the same as actually writing them. Seeking more knowledge here will not help. The same is true when we’re dissatisfied with our implementation of Scrum. Reading articles about how Scrum is supposed to work or even paying agile coaches for their advice will not help, as a lack of knowledge isn’t the problem. Most often, Scrum doesn’t work because it is used in contexts for which it wasn’t designed. Instead of searching for more knowledge on Scrum, it would be better to just use something else.

Now that we’re aware of the knowing-doing gap, what can we do to close it? Sadly, awareness of the gap isn’t enough to close it. Otherwise, the problem would’ve been solved by now. During their research, Pfeffer and Sutton didn’t find any simple answers to the problem. Nevertheless, they still have a recommendation: engage more frequently in thoughtful action. As mentioned already, applying some theoretical knowledge closes the knowing-doing gap. Hence, we need to balance our oversupply of knowledge with more action. Only by doing can we truly understand, and only by doing do we actually gain competitive advantages over other companies. In the context of software development, this means that we should build more. We should finally try out these ideas that we had in the back of our heads for a while. We might have to bypass a few processes to get them done or work on them outside of the regular working hours, though, to bypass the five impediments.


Being aware of the knowing-doing gap is very helpful, especially in the context of software development, as many developers focus too much on acquiring more knowledge. Hence, I strongly recommend reading the book and engaging in more action afterwards.

If you liked this blog, please share it with somebody. You can also follow me on Twitter/X. And if you want to acquire even more knowledge, then please check out my other posts on this blog.