| ▲ | whizzter 3 days ago | |
A lot of unnecessary complexity/overhead for a minor seldomly touched part of a much larger already complex system? I'll give a comparison. JSON - We have some frontend logic/view (that can be feature-flagged per customer) to manage updating the data that's otherwise mostly tagging along as a dumb "blob" (auto-expanded to regular a part of the JSON objects maps/arrays at the API boundary making frontend work easier, objects on the frontend, "blobs" on the backend/db) - Inspecting specfic cases (most of the time it's just null data) is just copying out and formatting the special data. - If push comes to shows, all modern databases support JSON queries so you can pick out specifics IF needed (has happened once or twice with larger customers over the years). - We read and apply the rules when calculating prices with a "plugin system" DB Schema (extra tables) - Now you have to wade through lots of customer-specific tables just to find the tables that takes most of the work-time (customer specifics are seldomly what needs work once setup). We already have some older customer-specific stuff from the early days (I'm happy that it's not happened much lately). - Those _very_ few times you actually need to inspect the specific data by query you might win on this (but as mentioned above, JSON queries has always solved it). - Loading the universal info now needs to query X extra tables (even when 90%-95% of the data has no special cases). - Adding new operations on prices like copying,etc now needs to have logic for each piece of customer specific table to properly make it tag along. - "properly" modelled this reaches the API layer as well - Frontend specialization is still needed - Calculating prices still needs it's customization. I don't really see how my life would have been better for managing all extra side-effects of bending the code to suit these weird customer requests (some that aren't customers anymore) when 90-95% of the time it isn't used and seldomly touched upon with mature customers. I do believe in the rule of 3, if the same thing pops up three times I do consider if that needs to be graduated to more "systematic" code, so often when you abstract after seeing something even 2 times it never appears again leaving you with some abstraction to maintain. JSON columns, like entity-attribute-value tables or goto statements all have real downsides and shouldn't be plonked in without a reason, but hell if I'd have to work with overly complex schemas/models because people start putting special cases into core pieces of code just because they heard that a technique was bad. | ||