With LLMs allowing me to write code so much faster, I'm much more quickly hitting tech debt walls (no doubt some to degree because I am using LLMs to write to code).<p>Rather, I'm much more quickly realizing the ways in which the abstractions I had in mind at the beginning of a project have flawed assumptions or aren't extensible in the way I now need them to be. I'm learning a lot from doing this, but I'd like to be able to deliberately practice this specific aspect of software engineering in isolation.<p>How can an engineer speed-run improving this type of design ability? Ideally, I am envisioning a Leetcode like platform that makes measurable, deliberate practice possible, but I doubt something like this exists or is possible in the near term.<p>Advice, essay, article, or book recommendations extremely welcome. Thanks!
I've thought the art of ontology as seen in database design is central to this.<p>That is, how often do you have a system which is really<p><pre><code> state is one of [phase1,phase2,phase3]
</code></pre>
but really there are three variables<p><pre><code> phase1 a boolean
phase2 a boolean
phase3 a boolean
</code></pre>
or alternately there is something somebody tries to represent the first way when it is not one thing that can be in three states as opposed to having three separate attributes. You run into a lot of practical problems:<p>(1) Some people feel claustrophobic when they are faced with a clean data model, business process, etc. They aren't going to feel "free" until everything is a godawful mess. (Maybe they feel free because there's no longer the possibility of looking at the system as a whole and finding flaws in it) You aren't just dealing with problems of knowledge and skill but also about psychology, a clean model that looks dirty might be easier to sell than a clean model that looks clean. (e.g. the symptom is that you just got off the phone with somebody discussing a data model and you got it right after 40 minutes of knock-down-drag-out. They call you back right away because they're sure it can't be right even though it is)<p>(2) Sometimes there are two legitimate choices.<p>(3) More often people are hung up on a particular option, that is they always try the "multiple state" solution or always model everything as a set of attribute flags.<p>(4) I don't know how you grade the answers. I can picture having a description of a situation and instructing the user to make a set of SQL tables for instance, but how do you make those past a test? Making it a set of multiple choice questions seems to easy but might be the right way to teach modelling.