read SICP! also, check out old lectures online (MIT)
(agile) architecture is the art of delaying decisions as long as possible
Big Redesign is almost always doomed to fail. clean the mess instead
having good/ agile/ evolving architecture depends on a good safety net of tests
extract till you drop
big functions have a geography that matches our caveman brain. doesn’t work too well when new to the code.
big functions are where objects go to hide
SRP
single responsibility principle
single reason-for-change principle
single source-of-change principle
who will ask for feature mods?
responsibility – family of functions to serve an actor
gateway – access to DB primitives
OCP, open/ closed principle – extend without modify
moral center of sw architecture
best predictor of change is change that’s already happened.
making a case for small changes into production to get feedback ASAP and frequently
good architecture – respond well to change, minimize amount of code that needs changing
biz/ domain and testability are both good (but different) reasons for abstraction, and might lead to different abstractions