I generally agree with the sentiment that we should defer decisions and avoid dependencies as much as possible, although I’m not sure that dependencies can be avoided as easily as all that once a project gets beyond the initial growth stages.

There aren’t just external dependencies to worry about — we have to consider internal dependencies in the code and architecture as well. In other words, there are some decisions that have to be made which will inherently affect other parts of the code, and sometimes those can’t be avoided once a project gets beyond a certain size.

This makes me wonder: can we keep projects small forever? Can we create only small projects that communicate with one another via well-defined interfaces, such that any given project never goes beyond a critical mass of complexity? If we can, I think it means we can avoid dependencies almost entirely.

What do you think? Can it be done? My mind immediately goes to Unix command line tools, though I’m sure there are other examples.

Expand full comment