Trade Off and ATAM:
Fulfilling all stakeholder’s requirements are impossible
Agile ATAM: Design conceptual architecture -> Bring stakeholder to define scenarios -> prioritize stakeholder’s requirements -> help in negotiating the priority -> redesign -> ask relevant stakeholder representatives including programmers to negotiate/evalute -> evolve the design and involve stakeholders early and often (dealing with scenarios/techniques changes)
Further reading: Software Architecture in Practice 3rd Edition. SEI digital library.
Water Fall approach is not getting quick feedback, but do continuous delivery to get fast feedback by releasing new features constantly.
holistic engineering: friction, e.g. database schema from source code.??
Automation in your development, testing and deployment; use automated tools or developing your own tools, e.g. use selenium, cucumber-puppet.
When automating, do consider the time constrain by using a timer, and avoid shaving the yak. Good enough for now is better than perfect in future.
Differentiate aspects among static, dynamic and production, developing working software as soon as possible, building vertical slides over time,
hide new feature until it finishes: feature toggle over feature branch (sync as often as necessary to avoid conflicts- merge ambush), togglez platform, google chunk-based development
Each change should be small and releasable: users don’t like giant changes, but gradually changes like in Facebook; Canary Releasing using router to choose users to move to newer version; dark releasing using timezone to gradually release like Facebook chat; strangler pattern: new changes obsoletes a small percent of old features and live together by allowing users to change to new feature by themselves, like cloudera’s switching to new configuration UI.