You can’t eat gold like you can the bounty of trees in fruits, nuts, maple syrup, and various edible mushrooms and herbal treasures of the woodland. You can’t warm yourself with gold. You can’t bask in the shade of gold. You can’t make fence posts out of gold. A gold house would be mighty expensive. You can’t make a windbreak out of gold. You can’t make furniture, violins, guitars, wall paneling, picture frames, gun stocks, tomato stakes, flooring, barns, chicken coops, and hog houses out of gold. You can’t mulch a garden with gold leaf. Gold does not take in carbon dioxide and give off oxygen to preserve an environment we can live in. Gold does not provide habitat for millions of wild animals and zillions of insects necessary for a sustainable environment. And in fact, you can make methane out of wood much more efficiently than ethanol out of corn. All gold can do is go up and down in price and invariably it turns out to be a poor investment, as many panic buyers learn the hard way.
This resonated with me. Of course when things go awry, as they did in 2008 and 2001 (in the USA), having a pile of cash feels good. But money is not wealth (this article covers that, as well as some other key points about capitalism). Money can come and go, but wealth, whether knowledge, relationships or wood lots, remains with you. Some forms of wealth require more care and feeding than others, but they all have the attribute of providing value in the real world.
When you are in software development, knowledge is a common form of wealth. I always tell teams I lead that almost every problem we’re facing is a new one, because if it wasn’t new, it most likely would have been automated or turned into a service or library that we could use. So there are plenty of chances to gain new knowledge.
There are a few categories of software development knowledge.
- Domain knowledge is understanding the real world problem domain. So, if you’ve worked, as I have, in a real estate brokerage, you understand how the business works. Who pays for what, how money and effort flow, who the main players are and what they are called. All of these are valuable should you work in that domain again because you can come up to speed more quickly, and you understand how the real world maps to the software system. This type of knowledge may change, but on the order of years or decades. (I haven’t worked in real estate since 2014, but if I went back, there’d still be many of the same concepts.)
- General technology is fundamental to software development. I’d put abstractions like algorithms and data structures, specific technologies like distributed systems, database indices and HTTP, and best practices like automated testing and requirements gathering into this bag. Having this type of knowledge will let you understand a typical system even if you haven’t seen the nuts and bolts of it. Of course, the type of general technology that is most useful to you depends on your domain, to some extent. The general technology of a chipset engineer is different than that of a UX designer. Within the same domain, this knowledge is good for years.
- Specific technology knowledge are the keywords that recruiters put on job postings, and what some consultants chase after. Elm or Elixir, Rails or React Native, Kubernetes or kvm. These technologies are very specific. I’m of two minds about this knowledge. On the one hand, if you pick the right tech, you can be in very high demand and get rates commensurate with that. On the other hand, new specific technologies are constantly being born, and keeping up with all of them, let alone becoming an expert in them, requires large investments of time (perhaps the reason for the premium). However, I have sympathy for folks looking for specific technology expertise. Yes, any competent software developer can pick up any language in a few weeks, but the idiosyncracies, libraries and community practices take time. Depending on your budget, you may find it cheaper to pay someone who has acquired that knowledge elsewhen. This knowledge ages quickly.
- Leadership knowledge is orthogonal to software knowledge, just like domain knowledge. Since software is built by human teams, knowing how to lead such teams toward business goals, whether formally or informally, is a valuable skill. This can include specific techniques like agile development and ‘one on ones’ and more general areas of knowledge like how to connect or communicate people and how to navigate politics. This knowledge has a long half life and can pay dividends throughout your career.
In addition to knowledge a software developer can accumulate other forms of wealth like books, videos, and relationships. These can all serve as credentials for a new position or (occasionally) generate passive income.
As we head into 2018, think about how you can build longer term wealth in your career by picking the right kind of knowledge.