290 likes | 600 Views
Evolution of software architectures over time. Patterns, Smells, Interventions. Overview. Reasons for architectural entropy Directions: Evolution towards what? Examples / patterns Interventions Summary. Architectural Entropy Causes. New requirements “New” requirements
E N D
Evolution of software architectures over time Patterns, Smells, Interventions
Overview • Reasons for architectural entropy • Directions: Evolution towards what? • Examples / patterns • Interventions • Summary
Architectural Entropy Causes • New requirements • “New” requirements • “We didn’t know that at the time …” • Pyrrhic victories • Nominally met requirements, but not really. • “Uneven Developer Skills”
Why is this interesting? • We need responsiveness. • Responsiveness increases or decreases over time. • Decreasing responsiveness = default.
Evolution: Directions & Goals “Ingenious Complexity” “Blinding Brilliance” ??? (?) “Big Ball of Mud”
People Factors • Systems reflect the personalities of their builders • Developer mindsets and “introvert discrimination” • “Teamthink” and the squeaky wheel
The Role of Organizational Culture • Entrepreneurial • Idea – driven • Yearns flexibility • Institutional • Structure driven • Yearns predictability
Evolved Architectures: Big Ball Of Mud • Focus • Fix it. • Motivator • “Getting it done, by hook or crook.” • Smells • Lots of bugs. • Takes a long time to make changes. • The Cult of Duct Tape (“Duct tape is like The Force….”) • “… swamp guides become more valuable than architects” http://www.laputan.org/mud/
Evolved Architectures: “Ingenious Complexity” • Focus • Technology • Motivator • Technical Prowess • Smells • “Magazine Architecture” – latest technology wins • Techies talk lots of tech in business meetings • Hard to relate code to requirements • State of the art, but: • Poor usability • It takes a long time to build new functionality
Evolved Architectures: “Blinding Brilliance” • Focus • SOLID principles • Motivator • Business value, usability • Smells • “Class society” among developers • Lots of friction with “old-timers” and maintainers of legacy systems • Very hard to find qualified developers (“Darth Maul Syndrome”)
Interventions: Simplicity EierlegendeWollmilchsau http://en.wikipedia.org/wiki/Eierlegende_Wollmilchsau
Interventions: Firewalling Complexity • Recognize that not all maintainers/developers have total familiarity with the application. • A new layering paradigm (????): • “Pig” layers • Require deep commitment to understanding the system. • Experts only • “Chicken” layers: • Newbies • People in a hurry • “Pigs” on other projects, unfamiliar with this one.
Interventions: Courage & Curiosity? • Facing reality • “The terrifying suchness of things.” http://en.wikipedia.org/wiki/Blind_men_and_an_elephant
Designing The Obvious: • Build only what’s absolutely necessary. • Quickly turn beginning users into intermediates. • Prevent errors whenever possible and handle the errors we cannot prevent gracefully. • Reduce and refine interactions and task flows until even the most complicated applications are clear and understandable. • Design to support a specific activity. • Make constant, incremental improvements to our processes and applications. • Start ignoring the demands of users and stick to a vision (gasp!)
“Refactoring toward greater insight into how to make do without insight.”
Conclusion • Architectures evolve towards greater or lesser responsiveness over time. • Arguably, software reflects the personalities of its makers. • Arguably, understanding people & culture makes it possible to predict what a system will look like in the future. • Arguably, interventions are possible. • Arguably, successful interventions have to be people focused and usability focused.
Good Reads • “Domain Driven Design” – Eric Evans • “Working Effectively With Legacy Code” – Michael C. Feathers • “Designing The Obvious” – Robert Hoekman
Q & A http://robertblogs.wordpress.com Twitter: robertreppel