In my journey along this wonderful road known as “not making horrifically fucked-up codebases that must then be maintained”, I’ve finally learned the importance of proper use-case planning.
If you’re building a tool with the intention of requisitioning and editing data, take a look at how you’re going to want to interact with that data. If you make a tool that’s more-or-less grounded to the idea of updating fields to an object (name, location, age, etc.), and then you suddenly discover that you need to be able to represent a binding between two such domain objects at the top level, you’re kinda fucked.
The road is fuckin’ hard, it’s also really fuckin’ tough– according to Jack Black.