It was familiar, because it used a popular framework used the “vanilla” way, the way the author of the framework recommends. So even a junior dev would be able to do stuff in the first day.
There were very few optional third-party libraries or smart-pants patterns. If it wasn’t necessary, it wasn’t imported.
Some database views were used instead of complex ORM queries. Sounds trivial but saves a lot of time debugging.
Control flow was so predictable that I rarely debugged. Honestly for a lot of features I just did TDD without much exploration at all, even on the first uses.
Features were super well isolated and decoupled. If there was some strange, awkward, cross-cutting concern between two distant parts of the domain, it was decoupled using async events rather having domain-model-#1 call domain-model-#2. So any weird interaction between distant parts was well documented in a specific “events” folder.
Dependencies were very up to date and everything was simple so very few issues updating the framework.
Most important: test suite was comprehensive and very fast.
There were very few optional third-party libraries or smart-pants patterns. If it wasn’t necessary, it wasn’t imported.
Some database views were used instead of complex ORM queries. Sounds trivial but saves a lot of time debugging.
Control flow was so predictable that I rarely debugged. Honestly for a lot of features I just did TDD without much exploration at all, even on the first uses.
Features were super well isolated and decoupled. If there was some strange, awkward, cross-cutting concern between two distant parts of the domain, it was decoupled using async events rather having domain-model-#1 call domain-model-#2. So any weird interaction between distant parts was well documented in a specific “events” folder.
Dependencies were very up to date and everything was simple so very few issues updating the framework.
Most important: test suite was comprehensive and very fast.