Member-only story
Breaking Big Applications into Small Applications
Reflections on modern software complexity and how to solve it

Modern software is increasingly complex, inflexible and ironically too minimalist, all at the same time. Understanding the reasons is a huge and complex topic. That is why I will focus on a small part of the problem, which, I hope, will illuminate some underlying drivers of this complexity.
Let me start by giving you some observations to clarify the issue I intend to explore.

A lot of the software used daily follow a very common pattern: A large number of objects to organize and some kind of interface to manipulate and view each of these individual objects. In an email application, for instance, these objects are individual emails. Tools are provided to organize, search, sort and remove emails. Another part of the email application allows you to view, compose and alter individual emails. Essentially, we have what is called a master-detail relation in the user interface.
A photo album application follows a similar pattern: A way to organize photos and put them into different albums or give them different tags. Next there are ways of viewing these photos, zooming, perform a slide show or do simple touchups.

This very article is written using Ulysses, a Markdown tool, which allows both sophisticated organization of markdown files, and editing and viewing of individual markdown files.
A modern integrated development environment is a variation of the same idea: Some kind of way to organizing and locate different source code files based on their content. At the detail level you have editors for viewing, searching and modifying these individual source code files.
Hold on, don’t we have a dedicated tool specifically designed to organize data objects? We do. It is called a file manager, and the objects are called files. Some 15–20 years ago, it used to be an…