Notes on a talk by Cory House (@housecor) at Iowa Code Camp.
Clean Code video on Pluralsight.
Religion is the problem in architecture. Always/never.
Look at the context.
People who are experts answer questions with more questions.
Over-architecting wastes money.
What if one month late is worthless?
Parkinson's Law: Work expands to fill available time.
Consider Complexity (speaker considers the following complex)
- Automated testing
- Coding to an interface
- Rich Domain Model (DDD)
- ORM vs. custom DAL
- Repository Pattern
- Layered architecture
- Do the simplest thing that could possibly work
- Lean/Agile principles (minimize WIP, etc.)
- 80/20 Rule
Book: Lean Startup - minimal viable product (MVP)
Scalability, maintenance costs, performance, etc. may not matter
We're paid for solutions, not code.
Flexing features (scope) is a lot better way to go than flexing quality.
Is it worth taking on technical debt today?
Hard vs. Soft deadlines
- Trade show?
- First to market?
Single loud customer, salesman misspoke, wild-ass guess, MS Project said so - terrible reasons for hard deadline
Layers - logical (separation of concerns)
Tiers - physical (often decided for you)
For a small enough application, methods are layers.
Everything's a trade-off.
- Simplest thing
- Somewhere in between
- Every tool in the shed
Active Record pattern mixes Domain and Data. Breaks SRP.
Easy to understand, though. Consider for CRUD apps or simple domain.
Rigid: Domain model = DB
Leads to God object
Hard to test
Converting to Repository Pattern = pain
Eric Evans - DDD book
Great for complicated, long-lived applications
Level 2 (somewhere in between)
Focus on the pain
No Free Lunch
At what point does our application complexity grow to the point where the effort to enhance gets too painful?
MVP, junior team, simple domain, tight timeline, throwaway - consider Level 1
Flagship product, senior team, complex domain, long-term, security matters, flexible timeline - consider Level 3
POEAA (Fowler) and Dino Esposito's architecture book inspired this talk.
Microsoft .NET: Architecting Applications for the Enterprise is the latter.
Speaker recommends clean, readable code regardless.