When planning the early stages of application development (whether it’s a desktop application, a web application, or something else entirely), you have to come up with some kind of core architecture. That’s the assumption, anyway.
So. I disagree. I’m beginning to think that the way to plan an application is to start with a central configuration, then build interlocking parts around it — parts that mostly don’t need each other to operate. The more decoupled the operation of the individual parts of the application, the better. An application, in other words, should be a collection of interoperating utilities with a central configuration scheme to tie them together.
Call it configuration-oriented software engineering if you like. Call it crazy. I don’t much care at this point what you call it, but it’s what is being evolved as a development methodology for an open source (web application) development project with which I’m now involved.
This methodology has its advantages. For one thing, it becomes absurdly easy to split up development effort amongst your developers. It also makes it absurdly easy to customize the application later, and it makes the application incredibly configurable. It makes it possible to greatly reduce application size and resource usage by simple configuration when you aren’t going to use much of its functionality. At least, that’s the theory. We’ll see how it pans out.