My team and I have been working on a problem over the last week or so that screams modularity problems. Each time we think we have it solved, someone says "Wait, there's this report only 2 of us have ever heard about that doesn't work because X, Y, Z." The discussion has lasted a couple weeks and is starting to push deployment times back.<p>Essentially, we have a distributed set of `devices` which interact with `customers`. Each customer has a `session` with the device. During the session, the `customer` may make various types of `payments` (coin or credit card) for various types of `fees`. Additionally, the customer may receive one or more `tickets`. The data model is getting pretty big with:<p>* Devices<p>* Sessions<p>* Line Items<p>* Allocations<p>* Payments<p>* Adjustments<p>* Violations<p>* Fees<p>For accounting purposes, we need to be able to map our payments to the fees and violations they are paying for. Customers might make a single payment to cover multiple violations and those violations may be across multiple sessions.<p>The number of times I've heard "this new solution fixes X but breaks π" is frustrating, but I don't see how this could be separated out. Perhaps others have insights that would simplify all of this, but it seems to me that the essential fact of our system is that the payment/line item/allocation system is responsible for many tasks/reports. I read articles like this and pine for:<p>A) A project where true modularity is achievable.<p>B) The skills to make my current project truly modular.