Hard things in software engineering

According to common wisdom, there are only two hard things in computer science: cache invalidation, naming things and off-by-one errors.

In similar vein, here’s my list of hard things in software engineering (not in order):

  • security
  • concurrency
  • dealing with people

What makes them hard is that when solving a security/concurrency/people problem, the difference between a good solution and a catastrophically bad one is often subtle. All of these are commonly seen as much more simple than they are.


Comments or questions? Send me an e-mail.