Software Engineer - You need a personal knowledge management system
The term 'Knowledge Worker' first appeared in The Landmarks of Tomorrow (1959) by Peter Drucker, who invented 'Management by Objectives' , and was fully coined by the same in The Effective Executive in 1966. While difficult to succinctly describe, A Knowledge worker's primary asset is just that: Their knowledge. Their job is to think for a living, usually through actions such as non-routine problem solving. As such, Software Engineers fall squarely in this group.
Since the phrase was coined, a great deal of research into effectively managing, and even leveraging knowledge for innovation and economic success has been done. To be frank, I only recently happened upon the subject while looking for answers to other challenges. And in that research, I have come to an overriding conclusion. If you're a software engineer, and you want to increase your impact, you need a personal Knowledge Management System.
To back that conclusion up, let me start with a question: If a factory doesn't know what inventory it has, can it sell any finished product? What if the factory let its machinery rust? Could it continue to run efficiently? Naturally the answer to these questions should be no. Rusty machinery will break down, and if you are missing a critical part from inventory, you cannot be certain to finish any product. But what does that analogy have to do with Software Engineering?
From the analogy, the factory includes both the machines and the inventory in its working capital. Whoever runs that plant must keep at least those two in mind when making decisions, as both will constrain what they are able to do. In much the same way, a Software Engineer is constrained by the Knowledge they have in store. Now admittedly, Knowledge is not consumed in the act of Software Development in the same way that say a bolt is consumed in producing a car. But have you ever noticed how long it takes you to solve a problem when you are rusty with the framework? And so it is that the state of our capital, our knowledge directly impacts our effectiveness at work.
So when was the last time you specifically reviewed the state of your capital? When did you last sharpen the axe? Do you know what frameworks you are rusty in, and which are in good repair? For my part, I know that I haven't recently reviewed my personal set of framework knowledge in a while. Though I imagine that some of us may have more recent experience if we've been polishing our resumes, for example.
But on that example, how long would it take you to update your resume today? How quickly could you relate what you've done, what you've learned, and how you've applied both? A personal knowledge management system can help in the above cases by making your knowledge discoverable. And that is just one of the benefits you can gain from such a system. Much like an inventory management system, a knowledge management system allows you to coordinate abstractions of your knowledge to help you better interact with and use the actual knowledge you have.
Take a simple example. Suppose you wrote everything you knew or thought about a particular topic down a a set of 3x5 index cards. Given enough floor space you could take those cards and start to organize them, like grouping similar thoughts together. You could create a mind-map of the content, as you recognize how some of the information is clustered. But in moving the 3x5 card, you wouldn't be physically moving your knowledge from one part of your brain to another. And if you handed the card to someone to help them solve one of their problems, you don't magically lose that knowledge either. The card is the abstraction which represents the real knowledge you have in conjunction with associations and interactions it have with other bits of your knowledge. But by creating the abstraction, you've transformed your experience from something wholly tied to your person, into something that can be replicated, shared, and distributed. Wouldn't it be nice if you could codify the patterns, and expectations you have in a way that would allow your junior team mates to learn from that knowledge without you having to be present every time?
If you can , so to speak, pull your knowledge out of your head into these abstractions, you gain an ability to interact with your knowledge that you didn't have before. Consider what you might discover if you were to list your solutions in a particular framework, while noting when or where that solution was applied. Because of the added context for how the framework was used in XYZ job, you might see how certain design choices impact other factors, such as ease of development, or adaptability. By adding some context to the root knowledge, you can gain the ability to synthesize new knowledge from the analysis of what you already know or have already experienced. And it is the abstraction of your knowledge which has allowed you to create yet more knowledge. And let's be serious, would you like to be able to articulate why certain designs should be used instead? I personally would like to avoid repeating painful design shortcomings If I can.
These examples are just a handful of the use-cases for a personal knowledge management system. By creating an abstraction of your knowledge, you can make your knowledge more discoverable. If you choose to create a physical abstraction, you can literally group pieces of your knowledge together. You can also share and redistribute these abstractions without having to be physically present for each use of the knowledge you created. And looking at grouping your knowledge, by adding a little context to your abstraction you gain the ability to synthesize new knowledge from the patterns you can see in your own thoughts. If you want to increase your impact as a Knowledge worker, you need to leverage your main working capital more effectively. By abstracting your knowledge you make interacting with that capital more effective. You will be able to discover what you know, share what you've learned, and create new ideas more effectively. Whether by adding to the working capital of your team, or by creating more novel, useful ideas, having a personal knowledge management system enables you to make a better return for the capital you already have!