Mine: no real permissions model ("everyone's an admin for now"), storing dates without time zones, and business logic glued into UI components. The early signal for me is catching myself copy-pasting the same check into a third place. That's usually the moment to pull it out, not before.
The copy-paste signal feels practical, and keeping permissions and time zones explicit seems easier before the app grows. It helps me keep things simple until repetition shows a real pattern.
Agreed. Simple until repetition shows the pattern is a good rule. The one exception I make is anything that's painful to migrate later, like IDs, time zones and permissions. Those I get right on day one, even in a tiny app.
That’s a useful distinction: defer abstractions until repetition appears, but treat migrations involving IDs, permissions, and time zones as costly from day one. I’ve found drawing a simple data model early can catch those decisions without building a big framework.