3 ms·
You should develop a large system by building many small parts that are bound together (probably by scripts). The "big monolithic program" approach is insane:
by makecheck 17y ago
You should develop a large system by building many small parts that are bound together (probably by scripts). The "big monolithic program" approach is insane: it invariably leads to reinventing wheels (e.g. there is no good reason for an office suite to have its own scripting language).
Small parts can be written in whatever language makes sense for the task. Their partitioning leads to clean interfaces: command line options, file formats, or protocols, without which the parts could not be usefully combined. This has the great side effect of making each piece easier to test in isolation, as regression test data can be created for each part without regard for how the data reached that point. It also makes everything inherently more flexible, for unforeseen improvements.
When you have small parts that are easily tested, you can easily replace them. This is the basis for innovation or other maintenance: if you really have to, you can confidently throw out one piece and put in something better that is compatible.
It also helps immensely to open-source each part; at least, within your organization. It should not be surprising that people are more willing to contribute when there is something small they can wrap their heads around.
- DanielStraight 17y agoExactly. What task at Amazon requires big software for just that task? You've got lots of tasks, so write lots of software. Lots of software != big software. I have well over 2000 packages installed on my Ubuntu Linux machine, but somehow all the developers manage to keep on working without getting bogged down in what the other 2000 packages are doing.