Data Modeling is the Hard Part
In most software projects, the most difficult task standing between you, the developer, and an elegant, easily extensible codebase is usually the data modeling—not the logic. A bad data model is one which fails to accurately reflect the problem domain, and will lead to confusing and convoluted logic because the logic will need to patch the incongruities in the data model, in addition to serving whatever functions the problem domain would normally require of it.
Get your data models right, and if you get them wrong, make the necessary changes so that they're correct. Bad data modeling is an insidious form of technical debt.