Data Models and Query Languages
Most applications are built by layering one data model on top of another, e.g., real world -> data structures -> general purpose data models, e.g., JSON, XML, tables in a relational database, etc. -> bytes in memory, disk or network -> electrical currents, light pulses, magnetic fields, etc. For each layer, the key question is how it is represented in terms of the next-lower layer.
There are different kinds of data models, and each embodies assumptions on how it’s going to be used, e.g., some operations are fast, while others perform badly. Since the data model has a profound effect on what the software above it can and can’t do, it’s important to choose one that is appropriate to the application.
From experience, I mostly think about how data structures are represented in general purpose data models, e.g., do I use a SQLite database, or a key-value store database, etc. I rarely think about levels lower than that.