OK, only developers know what “god modules” are and according to the internet functional architects are just glorified business analysts. So why is it that I see Functional Architecture as an application of design, simply preventing god modules in a more abstract way?
Here is my argument…
In physical architecture (like buildings and stuff) the functional part involves designing the house to be lived in. For example, putting toilets in kitchens, or windows in closets is just plain dumb. But knowing how much space a family of 8 needs for hanging out together is not as easy as you think. Functional architecture is about that kind of stuff.
In systems that literally translates to answering a simple question:
Where do I build this capability?
Do I need a mart, or is the warehouse good enough? Should this be on the point of sale system or the inventory system?
Just like a house, I can make questionable decisions. I can put the rooms in a strange layout, or the fixtures in odd places that makes the home hard to live in. I can make systems do things they weren’t designed for. Just like the owners of the house, the users will curse the builder.
I can keep adding functions and features, until even expert users can’t remember how to use the system. In the same way I can add rooms to a house by adding new levels or additions, but if I don’t renovate parts of the original structure, the house will be less livable.
OK so back to god modules. A god module is a piece of legacy code that has been added to and extended so many times that it has become untestable. Nobody knows all the things it does, or how it works. Nobody wants to touch it, because they’re terrified it will break. Many times nobody even knows if it works right, they just assume.
The only way to prevent god modules is to break them into smaller more independent parts. They are the result of repeatedly not making good decisions about where to build something.
Like a homeowner who kept adding rooms to a house, without improving the core plumbing or electrical service, eventually things get flaky, and fixing it right is expensive.
So my conclusion is that functional architects are not really glorified business analysts – but meta-designers whose role is to keep platforms and applications usable and valuable – by making good decisions about what capabilities are added to which systems or platforms.