espresso ninja dot com | Home | About | Projects

Three Kinds of Problems

In the book The Checklist Manifesto, the author cites a paper that says there are three types of problems: trivial, complicated, and complex.

The Trivial Problems

These are things anyone can solve with reliable results. Baking a cake from a box of cake mix is a trivial problem. I could pick any two people and (assuming they have the same supplies and time constraints) get the same cake every single time.1

Cake next to a box of cake mix

The Complicated Problems

These are the problems that look very difficult, but we’ve actually been able to reproduce the results very predictably. Building a skyscraper is a complicated problem; it looks absurdly difficult from an outsider’s perspective, yet we keep building them.

We can build a skyscraper, tear it down, and re-build an exact copy.

Cake next to a box of cake mix

These problems are harder than baking a cake from a box of mix, but like with the trivial problems, we have a reasonable expectation of success.

Putting a human in space is another complex problem. At one point it was in the realm of science fiction. Now it’s tourism. From a software perspective, building an operating system from the ground up is complicated, but still reasonable.

Like with the trivial problems, complicated problems problems can be solved reliably but require some form of skill or experience.2

The Complex Problems

These are the problems that we cannot reliably solve every single time. These problems may not actually be difficult compared to the complicated ones, but are frustratingly hard to reproduce optimal results.

The author cites raising a child to become a successful adult as an example.

Of these problems, the original research authors assert that there are “too many special requirements, including a an understanding of unique local conditions.”3 Furthermore, we have generalized algorithms and formulas for both these and complicated problems, but in this case they have limited actual application.

I would argue that large scale software systems development is complex as well as the majority of security engineering.

So what?

I think about these three classes of problems a lot, in particular when thinking about artificial intelligence, machine learning, and what the future of “work” looks like when it comes to software development.

The trivial problems are now “solved”. We no longer need people to take these on. I would argue many of these were actually solved before AI; we had libraries, code examples, Stack Overflow, high level languages, etc..

The complicated problems are still in play. I haven’t seen AI fully tackle these (yet) but it’s making strong progress. Watching an AI build a web application in seconds that would normally take a weekend is fascinating and sobering.

The unpredictable complex problems will obviously be the largest hurdle and skeptics will say these are beyond the reach of artificial intelligence. I can still point to these problems as being relevant to humans (at least for now).


  1. You could argue that a professional chef might get you marginally better results but at scale it becomes indistinguishable. ↩︎

  2. In the book, the author argues that trivial and complicated problems are both able to be reduced down to procedural list: the humble checklist. In fact, that’s the whole premise of the book: that the checklist is a powerful tool that is often overlooked. ↩︎

  3. The book’s author derives these problem classes from a 2002 medical paper Complicated and Complex Systems: What Would Successful Reform of Medicare Look Like?. Glouberman, Sholom & Zimmerman, Brenda. (2002). “Complicated and Complex Systems: What Would Successful Reform of Medicare Look Like?”. Commission on the Future of Health Care in Canada: Discussion Paper No. 8. 8. ↩︎