Can we grow designed software? Or, can we design truly growing software? I guess it depends on the definition of growing you use, "scalable" ? "alive" ?
Can we grow designed software? Or, can we design truly growing software? I guess it depends on the definition of growing you use, "scalable" ? "alive" ?
The secret is that the "elegant" API design you see is usually the n-th iteration.
Growing code is much like growing trees. The tree grows itself, what it requires is that it is pruned and helped to reshape in a fashion that will allow it to stay alive for a long time and bear fruit.
But one needs to constantly prune the damn thing.
You start planting trees, maybe it's in an empty field, or maybe it's in an old forest. At some point it takes root and multiplies. People help plant your forest in unexpected places and it expands. At some point you try pruning and controlling the trees. And at some point a forest fire destroys it making way for a new forest to grow.
To continue the metaphor, one of the most important pieces of evolutionary growth is death.
So the model has its limitations for human projects where we don't want to have quite that propensity for surprising outcomes.
An ongoing example of learning and growing a design is "Swift Evolution Process"
https://github.com/apple/swift-evolution/blob/master/process...
> I've always seen the statement that evolution is intentionless to be a bit arrogant
Assuming intent without any proof is the by far more outrageous statement. I have no intention of entering any discussion based on "believe" though.This is the Free Market vs. Planned Economy debate all over again.