What "knowledge moats" do you have conviction in (if any)?

I’ve been thinking of trying to apply the concept of “moats” from investing to knowledge acquisition.

A business moat is a competitive advantage that protects a company from its competitors, helping it maintain market share and profitability over time.

Suppose, as a developer, I want to learn skills that are like a moat.

  1. They are in high demand and well compensated
  2. They have, by nature, limited competition
  3. Both (1) and (2) persist over time

So for (1) the skill needs to be in high demand by employers who are willing and able to pay well. For example, AI researchers are currently in high demand by big tech firms. They are paid extremely well, presumably because those tech firms can afford to pay well for them and because those tech firms have a strong incentive to pay well for them – since those skills produce profit or some other desirable outcome(s).

For (2) the skill needs to have limited competition. If there is too much competition, then the pay will be driven down and/or there will be fewer available jobs in the field. It seems that skills that are difficult and/or time consuming to master should be less competitive. By their nature, fewer people will be able and/or willing to master those skills.

For (3) the skill needs to have persistent high demand and low competition. Demand needs to persist longer than some specific framework’s or library’s “hype cycle”. I’m looking for skills that help me maintain my employability and maximise my income over a period of years or even decades. It’s no good spending years to master, say, AI research, if by the end of my studies, millions of other competitors will have already done the same thing, and now the job market is flooded with AI researchers.


Maybe some will argue that this is impossible and that the very nature of software development is that it is completely mercurial and constantly changing. But it seems to me that it shouldn’t necessarily be the case. Doctors, lawyers and engineers don’t appear to have to constantly re-learn their entire corpus of knowledge. There is a core knowledge set that they acquire early on, through rigorous training, and later learning is just smaller refinements or additions to that core. Shouldn’t it be similar for developers? Our field has existed since the 50s or even earlier. Many of the core concepts such as algorithms and data structures don’t appear to have changed radically since that time.

Focussing on the “moat” aspect, I am looking for some skills that are profitable enough to be worth mastering, but difficult and complex enough to master that they naturally limit the competition.

For example, basic HTML/CSS is a very broadly applicable and useful skill. But it’s also very easy to learn and master. Thus, there is already much competition in that space. So just learning basic HTML/CSS won’t boost my employability much, because so many other people can do it easily that I will have many competitors, so there are fewer job openings and those jobs pay less.

In the opposite extreme, the deep internals of Windows NT would be difficult to learn and master, and thus have very little competition. But it would also have very limited applicability, so it would not help my employability much. Probably only a tiny handful of employers would need that skill, and could not afford to pay much.

At the extreme intersection of applicability/usefulness and difficulty might be, say, AI research right now. Very powerful, very well compensated and very difficult to master (requiring years of post-grad study and doctoral research). But that skill might have limited persistence. Yes, it’s hot right now, but will be it still be hot 10 years from now? If I begin studying AI right now, how do I know it will still be useful by the time I finish studying it? Given it might take years or even decades to really master it, surely I want some likelihood of a payoff. Otherwise I’m kind of gambling with my career, am I not?

So I am looking for some skill(s) which are at the intersection of applicable/useful, difficult/anti-competitive and persistent/durable.


Sorry for the long post and thanks if you read this far.

Also do you have any broad critiques of my thinking? Am I too pessimistic? Am I too optimistic? Am I focussing wrongly, maybe too narrowly?

Keen to get your thoughts!

1 Like

Some initial thoughts…

In one sense it seems that the skills in demand are frequently changing. For example, it seems that during one period (say, 60s-70s) COBOL programming was in demand, During another period (say, 90s) Visual Basic, Delphi and SQL programming were in demand. During another period (say, 2000s) Flash and Java were in demand. During another period (say, 2010s) web technologies such as JavaScript, HTML, CSS were in demand. Currently (2020s) it looks like web technologies, AI, data science (like Python, R) and blockchain (like Java-ish smart contracts) are in demand.

In another sense, many of skills are built on computing foundations that were already laid since decades ago. COBOL was built on procedural programming. Visual Basic, Delphi and Flash were built on structured programming, object-oriented programming and graphical user interface principles. SQL was built on relational algebra. Java was built on object-oriented programming and later some type theory. JavaScript and Typescripts were built on object-based programming, functional programming, type theory, some mathematics (e.g. the nature of undefined). And so on.

If one had learned these abstract fundamentals early on, maybe it would have been much faster to learn the more concrete manifestations later on. Maybe this speed of skill learning would have permitted access to jobs demanding those skills at a time when it was most profitable to know them.

Maybe this then is the value of traditional computer science education? Unfortunately it’s taken me until almost 40 years of age being uneducated to realise that. :laughing:

Fundamental Application
Procedural programming COBOL, ALGOL, etc
Structured programming Visual Basic, Delphi, C
Object-oriented programming Delphi, Java, C#, C++
Graphical User Interface principles Visual Basic, Delphi, CSS
Relational algebra SQL
Type theory Typescript, Haskell
Functional programming Javascript, Typescript
Object-based programming Javascript
Mathematics Javascript, R, Python
Statistics R, Python, Blockchain

Some additional points, sorry, I’ll try to keep them brief.

  1. To maintain their competitive advantage, those with foundational skills, and awareness of the value of those skills, might instinctively prefer to keep the facts about those foundational skills secret, in order to maintain their moat (competitive advantage).
  2. Some individuals/groups will use the foundational skills to build various products and/or a kind of cult around them. For example, the inventors of Flash seemed to have a strong commercial motive and also a cohort of users to monetise (young enthusiasts and later digital agencies).
  3. Businesses that want to apply technology to their own specific use cases will choose to adopt the products because the cults around those products provide a ready labour pool much larger than just the limited pool of the formally educated (e.g. computer science graduates). Though that seems to be changing lately.
  4. Confusingly, for the less-educated like me, there will appear to be large overlap between educated and non-educated practitioners, making it appear as if education is optional. In reality, the educated (or at least, those who really absorbed it) have a distinctive knowledge advantage, which will bear out over time, in the form of good execution, promotions, business success, etc.

On point 4 … as someone who entered the industry straight out of community college with little formal education … this would explain why certain people in the industry, including some who I physically used to work alongside, have suddenly “zoomed” ahead into becoming successful entrepreneurs with profitable firms, executives, etc. It’s not just “luck” or “who you know” … it’s actually a lot of fundamental knowledge which I didn’t realise I didn’t have.

I feel like the Pragmatic Programmer put it best:

Your knowledge and experience are your most important day-to-day professional assets.
Unfortunately, they’re expiring assets. Your knowledge becomes out of date
as new techniques, languages, and environments are developed. Changing
market forces may render your experience obsolete or irrelevant. Given the
ever-increasing pace of change in our technological society, this can happen
pretty quickly.

Your ability to learn new things is your most important strategic asset. But
how do you learn how to learn, and how do you know what to learn?

Looking at it this way, your real moat is your ability to learn new things and make good choices about which things to invest your learning in.

Your current advantage might be your ability to learn new things + the skills that meet the high demand/well compensated/limited competition criteria above.

Let’s take HTML and CSS. At one point, it was a game changing skill, but that time has long since passed. If we look at it through as an investment, it’s low-risk/low-reward. It’s low risk because if you do anything with the web, it will come in handy, but it’s low-reward because most people can do it well enough to get by and most places don’t really care about the quality. Your company and coworkers can benefit from you having a high level of mastery in HTML and CSS but they won’t pay you extra for it, it won’t give you any more job security.

But now let’s look at mastering HTML and CSS as an investment in your ability to learn new things.

First, these are foundational web technologies. By definition, a lot of other things are going to be built on top of them. So if you are a master of HTML, it will make it that much easier for you to pick up React, Angular, Vue, etc, especially once you’ve already learned one of those. If you really understand CSS and how the layout algorithms work, you’ll be much better at learning and using TailwindCSS.

Also, more and more people are working in the industry who were dropped right into things like React and Tailwind without ever actually learning HTML and CSS, let alone deeply learning it.

Now add AI to the mix. A lot of people are empowered, but even less will have any level of mastery, they’re learning less, and most are probably speed running their way into a hole that the AI can’t dig them out of.

Teach Yourself CS has a good section called Why Learn Computer Science?
TLDR: if you understand computer science

  • over time, you end up doing more fulfilling and well paid work
  • number of people entering the industry has outpaced the number of CS grads, giving us an oversupply of engineers who don’t understand CS
  • computer science is a skill that can help you work on things that give you more job security and work on more fulfilling things

Lately, I’ve been thinking that it’s going to be more and more worthwhile to master (and I mean really master) the foundations of whatever you’re working in. So if it’s front end web development, it would be knowing HTML, CSS and Javascript at a deep level, as well as really knowing the ins and outs of any libraries and frameworks you’re using.

Also, most businesses don’t think of their moat as a permanent advantage.

I think the moat of the next 10 years is going to be your skills + your network/ability to get hired. Having the best product is only an advantage if anybody knows about it.

You also might want to think about these things as more of a niche, which I think of as your skills, aimed at a specific domain or audience. A company might not care that you are a legit HTML/CSS guru, but if you narrow that to something like accessibility, you might be able to get companies to pay you for an accessibility audit, overhaul, some training or workshop, etc.

Sometimes a niche is not being the best at one thing, but taking two normally unrelated things that you are pretty good at. So a niche might be the overlap of AI and the legal system, computer vision and sports, SaSS and construction.

One of my moats is staying off social media and not relying on AI.

This one isn’t really about giving yourself an advantage, it’s just avoiding a disadvantage.

1 Like