SlideShare a Scribd company logo
1 of 75
Download to read offline
Taming Big Balls of Mud with Agile, Diligence and Lot’s of Hard Work 
Copyright 2014 Joseph W. Yoder & The Refactory, Inc. Joseph W. Yoder --www.refactory.comwww.teamsthatinnovate.com
Sustainable Architecture 
Copyright 2014 Joseph W. Yoder & The Refactory, Inc. Joseph W. Yoder --www.refactory.com
Sustaining Your ArchitectureEvolved from UIUC SAGIn the early 90’s we were studying objects, frameworks, components, meta, refactoring, reusability, patterns, “good” architectureHowever, in our SAG group we often noticed that although we talk a good game, many successful systems do not have a good internal structure at all
Sustaining Your ArchitectureSelfish ClassBrian and I had just published a paper called Selfish Class which takes a code’s- eye view of software reuse and evolution In contrast, our BBoMpaper noted that in reality, a lot of code was hard to (re)-use
Sustaining Your ArchitectureBig Ball of MudAlias: Shantytown, Spaghetti CodeA BIG BALL OF MUD is haphazardly structured, sprawling, sloppy, duct-tape and bailing wire, spaghetti code jungle… The de-facto standard software architecture. Whyis the gap between what we preachandwhat we practiceso large? We preach we want to build high quality systems but why are BBoMsso prevalent?
Messy Code 
Have you been significantly impeded by messy code? 
With permission from: Mrs D. http://www.belly-timber.com/2005/10/03/embracing-our-inner-web-stat/
Designs Naturally Degrade 
•All designs evolve. 
•Code rots as changes are made unless it is kept clean. 
•Entropy increases over time. 
classPair 
{ 
private: 
Object first_; 
Object second_; 
Object third_; 
public: 
Pair() { } 
Pair( Object first, Object second, Object third ) 
:first_(first), second_(second), third_(third) 
{} 
// etc. 
};
Neglect Is Contagious 
Disorder increases and software rots over time. 
Don’t tolerate a broken window. 
http://www.pragmaticprogrammer.com/ppbook/extracts/no_broken_windows.html
Sustaining Your ArchitectureWhere Mud Comes From? People Write Code People make Mud
Sustaining Your ArchitectureKeep it Working, Piecemeal Growth, Throwaway Code
Sustaining Your ArchitectureCopy ‘n’ Paste
Sustaining Your ArchitectureThe Age of SamplingBig Bucketof Glue&
Sustaining Your ArchitectureThey Have a Name
Transitional Technologies Precursors of Ambient Computing Era 
1950 
1960 
2000 
2010 
2020 
1990 
1980 
1970 
Societal Impact 
Personal Computing 
Corporate Computing 
AmbientComputing 
WWW/Browsers 
Cell phones 
http://www.wirfs-brock.com/allen/posts/category/post-pc-computing
Apps on Browser Platforms 
Apps are becoming the norm running on whatever platform
Cloud Computing 
Internet 
Ubiquitous Computing 
Ambient
Technical Debt 
Term invented by Ward Cunningham 
Piles up when you continually implement without going back to reflect new understanding 
Can have long term costs and consequences
Sustaining Your ArchitectureAgile to the Rescue??? Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more …From the Agile Manifesto
Sustaining Your ArchitectureCan Agile Help? Scrum, TDD, Refactoring, Regular Feedback, Testing, More Eyes, …. Good People!!! Continuous attentionto technical excellence! Retrospectives! Face-To-Face conversation. Motivated individualswith the environmentand supportthey need.
Sustaining Your ArchitectureAgile Design Values Core values: Design Simplicity Communication Continuous Improvement Teamwork / Trust Satisfying stakeholder needs Keep learning Continuous Feedback Lots of Testing/Validation!!!
Sustaining Your ArchitectureSome Agile Myths Simple solutions are always best We can easily adapt to changing requirements (new requirements) Scrum/TDD will ensure good Design/Architecture Good architecture simply emerges from “good” development practices. sometimes you need more Make significant architecture changes at the last moment“www.agilemyths.com”
Sustaining Your ArchitectureDo Some Agile Principles Encourage bad design? Lack of Upfront Design? Late changes to the requirementsof the system? Continuously Evolving the Architecture? Piecemeal Growth? Focus on Process rather than Architecture? Working code is the measure of success! I’m sure there are more!!!
Sustaining Your ArchitectureCraftsmanship?
Sustaining Your ArchitectureQualityQuality Definition:apeculiar and essential character or nature, an inherent feature or property, adegree of excellence or grade, a distinguishing attribute orcharacteristic
Sustaining Your ArchitectureQuality (Who’s perspective) 
Scientist 
Artist 
Engineer 
Designer 
important/boring 
true/false 
cool/uncool 
good/bad 
Rich Gold "The Plenitude: Creativity, Innovation & Making Stuff(Simplicity: Design, Technology, Business, Life)“ 
Triggers and Practices –Richard Gabriel http://www.dreamsongs.com 
An architect might have perspectives from an artist to a design or an engineer! 
“The Four Winds of Making”…Gabriel
Sustaining Your ArchitectureDesign is about Tradeoffs Usability and Security often have orthogonalqualities Designing Interfaces: Patterns for Effective Interaction Design Security Patterns: Integrating Security and Systems Engineering Performance vsSmall Memory•Quality of being good enough 
Secure 
Usable 
Cheap
Sustaining Your ArchitectureBeing Good Enough Quality of being good enough. Does it meet the minimum requirements Quality has many competing forces…are we designing a system for online orders or for controlling the space shuttle, they have different qualities, thus different patterns and solutions apply. Perfection is the enemy of Good Enough! Maybe Quality without a Number.
Sustaining Your ArchitectureDoes Quality Code Matter? Patterns about creating quality code that communicates well, is easy to understand, and is a pleasure to read. Book is aboutpatterns of “Quality” code. But…Kent states, “…this book is built on a fragile premise: that good code matters. I’ve seen too much ugly code make too much money to believe that quality of code is either necessary or sufficient for commercial success or widespread use. However I still believe quality of code matters.” Patterns assist with making code more bug free and easier to maintain and extend.
Sustaining Your ArchitectureCleaning HouseCan we gentrify, rehabilitate, or make-over code helping clean up the mud? Can refactoring, patterns, frameworks, components, agile, and objects helpwith mud? Is it possible to do some Mud Preventionand keep our Architecture Clean?
Sustaining Your ArchitectureTotal Code Makeover 
Can we just Refactorout of Mud? 
Sweep the Mess Under the Rug?
Sustaining Your ArchitectureHow can we even start? How can we cordon off the mess? If we have a BBoM
Clean Code Doesn't Just Happen 
•You have to craft it. 
•You have to maintain it. 
•You have to make a professional commitment. 
“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” 
–Martin Fowler
Professional Responsibility 
There’s no time to wash hands, get to the next patient!
Professionalism 
Make it your responsibility to create code that: 
•Delivers business value 
•Is clean 
•Is tested 
•Is simple 
•Follows good design principles 
When working with existing code: 
•If you break it, you fix it 
•You never make it worse than it was 
•You always make it better
Sustaining Your Architecture 
35 
Legacy CodeDefinition: -Code without tests, Code from last year, Code I didn’t writeThe goal is to make small, relatively safe changes to get tests in place, so that we can feel comfortable making larger changesTake a stance -we will not let our code base get any worse-New code does not have to go into class as existing (untested) code•Try to add new code, test driven, in new classes•Sprout Method, Sprout Class from VideoStore-Bugs are opportunities•Identify the bug•Write a failing test to expose the bug•Fix the bug•Test now passes
Sustaining Your ArchitectureLegacy Code Change Algorithm Identify change points Find test points Break dependencies Write tests Make changes and refactor
Sustaining Your ArchitectureSweep It Under the RugCover it up to keep other areas clean(Façade and other Wrapper Patterns)
Sustaining Your ArchitectureCode Make OverRefactoring can help reverse some mud.The tradeoff is cost and time....maybe with technology Refactoring to Better Design (Patterns)…
Sustaining Your ArchitectureCode SmellsA code smellis a hintthat something has gone wrongsomewhere in your code. Use the smell to trackdown the problem…Kent BeckBad Smells inCodewas an essay by KentBeck and MartinFowler, published as Chapter 3 of: Refactoring Improving The Design Of Existing Code. ----Ward’s Wiki 
Have you ever looked at a piece of code that doesn't smell very nice?
Sustaining Your ArchitectureTen Most Putrid List1)Sloppy Layout, 2)Dead Code, 3)Lame Names, 4)Commented Code, 5)Duplicated Code, 6)Feature Envy, 7)Inappropriate Intimacy, 8)Long Methods & Large Class, 9)Primitive Obsession & Long Parameter List, 10)Switch Statement & Conditional Complexity …
Sustaining Your ArchitectureLame Names 
void foo(intx[], inty, intz) 
{ 
if (z > y + 1) 
{ 
inta = x[y], b = y + 1, c = z; 
while (b < c) 
{ 
if (x[b] <= a) b++; else { 
intd = x[b]; x[b] = x[--c]; 
x[c] = d; 
} 
} 
inte = x[--b]; x[b] = x[y]; 
x[y] = e; foo(x, y, b); 
foo(x, c, z); 
} 
void quicksort(intarray[], intbegin, intend) { 
if (end > begin + 1) { 
intpivot = array[begin], 
l = begin + 1, r = end; 
while (l < r) { 
if (array[l] <= pivot) 
l++; 
else 
swap(&array[l], &array[--r]); 
} 
swap(&array[--l], &array[beg]); 
sort(array, begin, l); 
sort(array, r, end); 
} 
} 
http://dreamsongs.com/Files/BetterScienceThroughArt.pdf
Sustaining Your ArchitectureFixing NamesNames should mean something. Standards improve communication -know and follow them. Standard protocolsobject ToString(), Equals() ArrayListContains(), Add(), AddRange() Remove(), Count, RemoveAt(), HashTableKeys, ContainsKey(), ContainsValue() Standard naming conventions
Sustaining Your ArchitectureDuplicate Code Do everything exactly once Duplicate code makes the systemharder to understand and maintain Any change must be duplicated The maintainer has to change every copy
Sustaining Your ArchitectureFixing Duplicate Code Do everything exactly once!!! Fixing Code Duplication Move identical methods up to superclass Move methods into common components Break up Large Methods 
REUSE 
Do notduplicate! 
DRY Principle
Sustaining Your Architecture 
Inappropriate Intimacy 
When classes depend on other’s implementation details … 
Tightly coupled classes - you can’t change one with- out changing the other. 
Boundaries between classes are not well defined.
Sustaining Your Architecture 
Feature Envy 
When a class uses a lot the functionality or features of another class 
Indicates that some functionality is in the wrong class … “Move Method” 
It creates a tight coupling between these two classes
Sustaining Your ArchitectureA Simple Refactoring 
Object 
Concrete1 
Concrete2 
Object 
Concrete1 
Concrete2 
NewAbstract 
Create Empty ClassBorrwedfrom Don Roberts, The Refactory, Inc.
Sustaining Your ArchitectureA Complex RefactoringRefactoring can be hard but there are a lot ofsmall steps that lead to big gains in mud busting 
Borrowed from Don Roberts, The Refactory, Inc. 
Array 
Matrix 
Matrix 
MatrixRep 
ArrayRep 
rep 
SparseRep 
IdentityRep
Sustaining Your ArchitectureTransform Design with Small Steps 
Extract Method 
Move Method 
Replace Conditional with Polymorphism 
Test 
Test 
Test 
Test 
Rename 
OR
Sustaining Your ArchitectureTwo Refactoring Types* Floss Refactorings—frequent, small changes, intermingled with other programming (daily health) Root canal refactorings— infrequent, protracted refactoring, during which programmers do nothing else (major repair) 
* Emerson Murphy-Hill and Andrew Black in“Refactoring Tools: Fitness for Purpose” 
http://web.cecs.pdx.edu/~black/publications/IEEESoftwareRefact.pdf
Sustaining Your ArchitectureCommon Wisdom“In almost all cases, I’m opposed to setting aside time for refactoring. In my view refactoring is not an activity you set aside time to do. Refactoringis something you do all the timein little bursts.” —Martin Fowler 
Work refactoring into your daily routine…
Sustaining Your ArchitectureRefactoring: When to do it۔Regular refactorings make it fairly safe and easy to do anytime. Especially when you have good TESTS. ۔When you are fixing bugs۔Adding new features۔Right after a release۔Might have to RefactorTeststoo!!!
Sustaining Your ArchitectureSustaining Architecture 
What can be done to help sustain our architecture in the long run?
Sustaining Your ArchitectureStuart Brand’s Shearing Layers Buildings are a set of components that evolve in different timescales. Layers: site, structure, skin, services, space plan, stuff. Each layer has its own value, and speed of change (pace). Buildings adapt because faster layers (services) arenot obstructed by slower ones (structure). —Stuart Brand, How Buildings Learn
Sustaining Your ArchitectureYoder and Foote’sSoftware Shearing Layers“Factor your system so that artifacts that change at similar rates are together.”—Foote & Yoder, Ball of Mud, PLoPD4. •The platform•Infrastructure•Data schema•Standard frameworks, components, services•Abstract classes and interfaces•Classes•Code•Data 
LayersSlowerFaster
Sustaining Your ArchitecturePut a Rug at the Front Door 
ALIAS: ENCAPSULATEANDIGNOREKEEPINGTHEINTERNALSCLEAN 
Patterns forSustaining Architecture 
PLoP2012 Paper
Sustaining Your Architecture 
Wipe your Feet 
at the Front Door 
Filtering and Cleansing Sequence to keep 
Place Order Interface Clean 
Protected 
Components 
S1 
S2 
S3 
Sn 
Adapter/ 
Proxy/ 
Façade 
Frontdoor 
Wrapper 
Filtering, 
Cleansing, 
Security 
Checks 
...
Sustaining Your ArchitecturePaving over theWagon Trail 
ALIAS: MAKEREPETITIVETASKSEASIERSTREAMLININGREPETITIVECODETASKS 
Create simple examples, templates, & scripts 
Develop a tool that generates code 
Identify and use existing tools or frameworks 
Develop a framework &/or runtime environment 
Develop a domain-specific language 
Patterns for Sustaining Architecture 
PLoP2012 Paper
Sustaining Your ArchitectureContinuous Inspection 
Asian PLoP2014 Paper 
CODESMELLDETECTION 
METRICS(TESTCOVERAGE, CYCLOMATICCOMPLEXITY, TECHNICALDEBT, SIZES, …) 
SECURITYCHECKS 
ARCHITECTURALCONFORMANCE 
AUTOMATEWHEREYOUCAN!!!
Sustaining Your ArchitectureSustainable Architecture Stewardship Follow through Ongoing attention Not ignoring the little things that can undermine our ability to grow, change and adapt our systems
Sustaining Your ArchitectureArchitectural Practice: Reduce Technical Debt Integrate new learning into your code Refactoring Redesign Rework Code clean up Unit tests (functionality) Test for architectural qualities (performance, reliability,…)
Sustaining Your ArchitectureAgile Values Drive Architectural Practices Do something. Don’t debate or discuss architecture too long Do something that buys you information Prove your architecture ideas Reduce risks Make it testable Prototype realistic scenarios that answer specific questions Incrementally refine your architecture Defer architectural decisions that don’t need to be immediately made 
Do 
something! 
Prove & 
Refine.
Sustaining Your ArchitectureIndicators You’ve Paid Enough Attention to Architecture Defects are localized Stable interfaces Consistency Developers can easily add new functionality New functionality doesn’t “break” existing architecture Few areas that developers avoid because they are too difficult to work in Able to incrementally integrate new functionality
Agile MindsetBe Agile
Sustaining Your ArchitectureThinking Fast vs. Slow Fast thinking: decisions based on intuition, biases, ingrained patterns, and emotions Slow thinking: Reasoning, logical thinking, contemplating
Sustaining Your ArchitectureTearing Down the Wallsaka “Breaking Down Barriers” 
Physical Barriers, Cultural Differences 
Language/Communication, Background 
Expertise, Lack of Time, Us and Them 
Mentality 
How can agile teams remove the barriers and become more agile at quality? 
Tear down the walls through various actions: include QA early on; make them part of the sprints, embed them in the teams
Sustaining Your ArchitectureAGILE QUALITYBuild quality into your project rhythms
Sustaining Your ArchitectureHow Quality Scenarios and Quality Testing Fit Into An Agile Process 
Product Envisioning 
/ 
Roadmap 
Deploy to Stakeholders 
Functional 
Acceptance Testing 
Develop 
and Manage 
the Backlog 
Plan a Sprint 
Run a Sprint 
Daily Review 
Incorporate Feedback 
Identify Key 
Quality Scenarios 
Can Include Quality 
Scenarios 
Include 
relevant 
quality 
tasks 
Quality Testing
Sustaining Your Architecture 
Requirements Envisioning (days/weeks/...) 
Architecture Envisioning (days/weeks/…) 
Iteration 0: Envisioning 
Iteration Modeling (hours) 
Model Storming(minutes) 
Fast TDD(hours) 
Iteration n: Development 
a little bit of modeling then a lot of coding, think about what qualities might fit into the “Sprint” 
Conceptual Modeling 
What Qualitiesare important? Test-Driven DevelopmentShould Include Quality
Sustaining Your ArchitectureOther Techniques for Improving QualitySteve McConnellhttp://kev.inburke.com/kevin/the-best-ways-to-find-bugs-in-your-code/ 
Average is 40% for any one technique! 
Combining techniques gives you quality (> 90%)
Sustaining Your ArchitectureDraining the SwampYou canescape from the“Spaghetti Code Jungle” Indeed you can transformthe landscape. The key is not some magic bullet, but a long-term commitment to architecture, and to cultivating and refining “quality” artifactsfor yourdomain (Refactoring)! Patterns of the best practices can help!!!
Sustaining Your ArchitectureSilver BuckshotThere are no silver bullets…Fred BrooksBut maybe some silver buckshot…promising attacksGood DesignFrameworksPatternsArchitectureProcess/OrganizationTools and SupportRefactoringGood People ***
Sustaining Your ArchitectureSo There is Some Hope!!! Testing(TDD), Refactoring, Regular Feedback, Patterns, More Eyes, … Good People!!! Continuous attention to technical excellence! Retrospectives! Face-To-Face conversations. Diligence and Hard Work! Motivated individualswith the environmentand supportthey need. But, Maybe Mud is why we have Agile…
ItTakesaVillage
תודה 
Questions? 
joe@refactory.com 
Twitter: @metayoda

More Related Content

What's hot

The five expertise of a software architect
The five expertise of a software architectThe five expertise of a software architect
The five expertise of a software architectLior Bar-On
 
Best Practices - Software Engineering
Best Practices - Software EngineeringBest Practices - Software Engineering
Best Practices - Software Engineering3Quill Softwares
 
What a Good Software Architect Does
What a Good Software Architect DoesWhat a Good Software Architect Does
What a Good Software Architect DoesEberhard Wolff
 
Adaptable Designs for Agile Software Development
Adaptable Designs for Agile  Software DevelopmentAdaptable Designs for Agile  Software Development
Adaptable Designs for Agile Software DevelopmentHayim Makabee
 
Code quality as a built-in process
Code quality as a built-in processCode quality as a built-in process
Code quality as a built-in processElad Maimon
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software EngineeringSoftware Craftsmanship VS Software Engineering
Software Craftsmanship VS Software EngineeringAndy Maleh
 
Is your code SOLID enough?
 Is your code SOLID enough? Is your code SOLID enough?
Is your code SOLID enough?SARCCOM
 
Software Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeSoftware Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeFadi Stephan
 
Professional Software Development, Practices and Ethics
Professional Software Development, Practices and EthicsProfessional Software Development, Practices and Ethics
Professional Software Development, Practices and EthicsLemi Orhan Ergin
 
Software architecture introduction
Software architecture introductionSoftware architecture introduction
Software architecture introductionFreddy Munandar
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Ajay Danait
 
Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017Lemi Orhan Ergin
 
Extreme & pair programming Slides ppt
Extreme & pair programming Slides pptExtreme & pair programming Slides ppt
Extreme & pair programming Slides pptMr SMAK
 
Global Day of Coderetreat'14 - Istanbul Event
Global Day of Coderetreat'14 - Istanbul EventGlobal Day of Coderetreat'14 - Istanbul Event
Global Day of Coderetreat'14 - Istanbul EventLemi Orhan Ergin
 
Test driven development vs Behavior driven development
Test driven development vs Behavior driven developmentTest driven development vs Behavior driven development
Test driven development vs Behavior driven developmentGallop Solutions
 
Caring about Code Quality
Caring about Code QualityCaring about Code Quality
Caring about Code QualitySaltmarch Media
 
SCA in an Agile World | June 2010
SCA in an Agile World | June 2010SCA in an Agile World | June 2010
SCA in an Agile World | June 2010Klocwork
 
Unwritten Manual for Pair Programming
Unwritten Manual for Pair ProgrammingUnwritten Manual for Pair Programming
Unwritten Manual for Pair ProgrammingLemi Orhan Ergin
 

What's hot (20)

The five expertise of a software architect
The five expertise of a software architectThe five expertise of a software architect
The five expertise of a software architect
 
Best Practices - Software Engineering
Best Practices - Software EngineeringBest Practices - Software Engineering
Best Practices - Software Engineering
 
What a Good Software Architect Does
What a Good Software Architect DoesWhat a Good Software Architect Does
What a Good Software Architect Does
 
Adaptable Designs for Agile Software Development
Adaptable Designs for Agile  Software DevelopmentAdaptable Designs for Agile  Software Development
Adaptable Designs for Agile Software Development
 
Code quality as a built-in process
Code quality as a built-in processCode quality as a built-in process
Code quality as a built-in process
 
Software Craftsmanship VS Software Engineering
Software Craftsmanship VS Software EngineeringSoftware Craftsmanship VS Software Engineering
Software Craftsmanship VS Software Engineering
 
Is your code SOLID enough?
 Is your code SOLID enough? Is your code SOLID enough?
Is your code SOLID enough?
 
Software Craftsmanship - It's an Imperative
Software Craftsmanship - It's an ImperativeSoftware Craftsmanship - It's an Imperative
Software Craftsmanship - It's an Imperative
 
Professional Software Development, Practices and Ethics
Professional Software Development, Practices and EthicsProfessional Software Development, Practices and Ethics
Professional Software Development, Practices and Ethics
 
Software architecture introduction
Software architecture introductionSoftware architecture introduction
Software architecture introduction
 
Xp Slideshow
Xp SlideshowXp Slideshow
Xp Slideshow
 
Behavior Driven Development (BDD)
Behavior Driven Development (BDD)Behavior Driven Development (BDD)
Behavior Driven Development (BDD)
 
Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017Clean Software Design - DevNot Summit Istanbul 2017
Clean Software Design - DevNot Summit Istanbul 2017
 
Extreme & pair programming Slides ppt
Extreme & pair programming Slides pptExtreme & pair programming Slides ppt
Extreme & pair programming Slides ppt
 
Global Day of Coderetreat'14 - Istanbul Event
Global Day of Coderetreat'14 - Istanbul EventGlobal Day of Coderetreat'14 - Istanbul Event
Global Day of Coderetreat'14 - Istanbul Event
 
Large Scale Software Project
Large Scale Software ProjectLarge Scale Software Project
Large Scale Software Project
 
Test driven development vs Behavior driven development
Test driven development vs Behavior driven developmentTest driven development vs Behavior driven development
Test driven development vs Behavior driven development
 
Caring about Code Quality
Caring about Code QualityCaring about Code Quality
Caring about Code Quality
 
SCA in an Agile World | June 2010
SCA in an Agile World | June 2010SCA in an Agile World | June 2010
SCA in an Agile World | June 2010
 
Unwritten Manual for Pair Programming
Unwritten Manual for Pair ProgrammingUnwritten Manual for Pair Programming
Unwritten Manual for Pair Programming
 

Viewers also liked

Introduction to Event Sourcing and CQRS (IASA-IL)
Introduction to Event Sourcing and CQRS (IASA-IL)Introduction to Event Sourcing and CQRS (IASA-IL)
Introduction to Event Sourcing and CQRS (IASA-IL)Vladik Khononov
 
Aliyah: Looking for a hi-tech job in Israel
Aliyah: Looking for a hi-tech job in IsraelAliyah: Looking for a hi-tech job in Israel
Aliyah: Looking for a hi-tech job in IsraelHayim Makabee
 
Resource Adaptive Systems
Resource Adaptive SystemsResource Adaptive Systems
Resource Adaptive SystemsTom Mueck
 
Watch-It-Next: A Contextual TV Recommendation System
Watch-It-Next: A Contextual TV Recommendation SystemWatch-It-Next: A Contextual TV Recommendation System
Watch-It-Next: A Contextual TV Recommendation SystemRaz Nissim
 
Antifragile Software Design
Antifragile Software DesignAntifragile Software Design
Antifragile Software DesignHayim Makabee
 
ADUF - Adaptable Design Up Front
ADUF -  Adaptable Design Up FrontADUF -  Adaptable Design Up Front
ADUF - Adaptable Design Up FrontHayim Makabee
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsHayim Makabee
 
Cloud anti-patterns
Cloud anti-patternsCloud anti-patterns
Cloud anti-patternsMallika Iyer
 
IPSJ/SIGSE201506 パターンWG・AsianPLoP2015報告-公開用
IPSJ/SIGSE201506 パターンWG・AsianPLoP2015報告-公開用IPSJ/SIGSE201506 パターンWG・AsianPLoP2015報告-公開用
IPSJ/SIGSE201506 パターンWG・AsianPLoP2015報告-公開用Hironori Washizaki
 
Evolution of Pattern Languages: Designing Human Actions, Dialogue, & Films (P...
Evolution of Pattern Languages: Designing Human Actions, Dialogue, & Films (P...Evolution of Pattern Languages: Designing Human Actions, Dialogue, & Films (P...
Evolution of Pattern Languages: Designing Human Actions, Dialogue, & Films (P...Takashi Iba
 
Pragmatic notdogmatictdd
Pragmatic notdogmatictddPragmatic notdogmatictdd
Pragmatic notdogmatictddJoseph Yoder
 
Emerging collaborative model
Emerging collaborative modelEmerging collaborative model
Emerging collaborative modelAKAGroup
 
Due Diligence Presentation (Preview)
Due Diligence Presentation (Preview)Due Diligence Presentation (Preview)
Due Diligence Presentation (Preview)kbordersGLE
 
A Model Of Collaborative Search
A Model Of Collaborative SearchA Model Of Collaborative Search
A Model Of Collaborative SearchGene Golovchinsky
 
大きな泥のカタマリを相手にするためのアジャイルと努力と苦労 by Joe Yoder (XP祭り2014)
大きな泥のカタマリを相手にするためのアジャイルと努力と苦労 by Joe Yoder (XP祭り2014)大きな泥のカタマリを相手にするためのアジャイルと努力と苦労 by Joe Yoder (XP祭り2014)
大きな泥のカタマリを相手にするためのアジャイルと努力と苦労 by Joe Yoder (XP祭り2014)Yasui Tsutomu
 
Building a collaborative enterprise
Building a collaborative enterprise Building a collaborative enterprise
Building a collaborative enterprise Thomas Cluzel
 
Testing System Qualities Agile2012 by Rebecca Wirfs-Brock and Joseph Yoder
Testing System Qualities Agile2012 by Rebecca Wirfs-Brock and Joseph YoderTesting System Qualities Agile2012 by Rebecca Wirfs-Brock and Joseph Yoder
Testing System Qualities Agile2012 by Rebecca Wirfs-Brock and Joseph YoderJoseph Yoder
 
Hierarchical Composable Optimization of Web Pages
Hierarchical Composable Optimization of Web PagesHierarchical Composable Optimization of Web Pages
Hierarchical Composable Optimization of Web PagesHayim Makabee
 

Viewers also liked (20)

Introduction to Event Sourcing and CQRS (IASA-IL)
Introduction to Event Sourcing and CQRS (IASA-IL)Introduction to Event Sourcing and CQRS (IASA-IL)
Introduction to Event Sourcing and CQRS (IASA-IL)
 
Aliyah: Looking for a hi-tech job in Israel
Aliyah: Looking for a hi-tech job in IsraelAliyah: Looking for a hi-tech job in Israel
Aliyah: Looking for a hi-tech job in Israel
 
Resource Adaptive Systems
Resource Adaptive SystemsResource Adaptive Systems
Resource Adaptive Systems
 
Watch-It-Next: A Contextual TV Recommendation System
Watch-It-Next: A Contextual TV Recommendation SystemWatch-It-Next: A Contextual TV Recommendation System
Watch-It-Next: A Contextual TV Recommendation System
 
Antifragile Software Design
Antifragile Software DesignAntifragile Software Design
Antifragile Software Design
 
ADUF - Adaptable Design Up Front
ADUF -  Adaptable Design Up FrontADUF -  Adaptable Design Up Front
ADUF - Adaptable Design Up Front
 
The SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design PatternsThe SOLID Principles Illustrated by Design Patterns
The SOLID Principles Illustrated by Design Patterns
 
Anti-Patterns
Anti-PatternsAnti-Patterns
Anti-Patterns
 
Cloud anti-patterns
Cloud anti-patternsCloud anti-patterns
Cloud anti-patterns
 
2014nov5 Booosting - Bouwen met Staal - Circonomie
2014nov5 Booosting - Bouwen met Staal - Circonomie2014nov5 Booosting - Bouwen met Staal - Circonomie
2014nov5 Booosting - Bouwen met Staal - Circonomie
 
IPSJ/SIGSE201506 パターンWG・AsianPLoP2015報告-公開用
IPSJ/SIGSE201506 パターンWG・AsianPLoP2015報告-公開用IPSJ/SIGSE201506 パターンWG・AsianPLoP2015報告-公開用
IPSJ/SIGSE201506 パターンWG・AsianPLoP2015報告-公開用
 
Evolution of Pattern Languages: Designing Human Actions, Dialogue, & Films (P...
Evolution of Pattern Languages: Designing Human Actions, Dialogue, & Films (P...Evolution of Pattern Languages: Designing Human Actions, Dialogue, & Films (P...
Evolution of Pattern Languages: Designing Human Actions, Dialogue, & Films (P...
 
Pragmatic notdogmatictdd
Pragmatic notdogmatictddPragmatic notdogmatictdd
Pragmatic notdogmatictdd
 
Emerging collaborative model
Emerging collaborative modelEmerging collaborative model
Emerging collaborative model
 
Due Diligence Presentation (Preview)
Due Diligence Presentation (Preview)Due Diligence Presentation (Preview)
Due Diligence Presentation (Preview)
 
A Model Of Collaborative Search
A Model Of Collaborative SearchA Model Of Collaborative Search
A Model Of Collaborative Search
 
大きな泥のカタマリを相手にするためのアジャイルと努力と苦労 by Joe Yoder (XP祭り2014)
大きな泥のカタマリを相手にするためのアジャイルと努力と苦労 by Joe Yoder (XP祭り2014)大きな泥のカタマリを相手にするためのアジャイルと努力と苦労 by Joe Yoder (XP祭り2014)
大きな泥のカタマリを相手にするためのアジャイルと努力と苦労 by Joe Yoder (XP祭り2014)
 
Building a collaborative enterprise
Building a collaborative enterprise Building a collaborative enterprise
Building a collaborative enterprise
 
Testing System Qualities Agile2012 by Rebecca Wirfs-Brock and Joseph Yoder
Testing System Qualities Agile2012 by Rebecca Wirfs-Brock and Joseph YoderTesting System Qualities Agile2012 by Rebecca Wirfs-Brock and Joseph Yoder
Testing System Qualities Agile2012 by Rebecca Wirfs-Brock and Joseph Yoder
 
Hierarchical Composable Optimization of Web Pages
Hierarchical Composable Optimization of Web PagesHierarchical Composable Optimization of Web Pages
Hierarchical Composable Optimization of Web Pages
 

Similar to Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work

A sweet taste of clean code and software design
A sweet taste of clean code and software designA sweet taste of clean code and software design
A sweet taste of clean code and software designKfir Bloch
 
Writing Code for Humans, not Computers
Writing Code for Humans, not ComputersWriting Code for Humans, not Computers
Writing Code for Humans, not ComputersRené Cacheaux
 
WordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressWordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressmtoppa
 
Clean Code Part III - Craftsmanship at SoCal Code Camp
Clean Code Part III - Craftsmanship at SoCal Code CampClean Code Part III - Craftsmanship at SoCal Code Camp
Clean Code Part III - Craftsmanship at SoCal Code CampTheo Jungeblut
 
Software Quality via Unit Testing
Software Quality via Unit TestingSoftware Quality via Unit Testing
Software Quality via Unit TestingShaun Abram
 
Planning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsPlanning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsChristian Heilmann
 
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Juraj Martinka
 
Agile Software Design
Agile Software DesignAgile Software Design
Agile Software Designeduardomg23
 
10 Big Ideas from Industry
10 Big Ideas from Industry10 Big Ideas from Industry
10 Big Ideas from IndustryGarth Gilmour
 
Managing and evolving JavaScript Code
Managing and evolving JavaScript CodeManaging and evolving JavaScript Code
Managing and evolving JavaScript CodeJean Carlo Emer
 
Twenty Startups A Year Without Going Crazy
Twenty Startups A Year Without Going CrazyTwenty Startups A Year Without Going Crazy
Twenty Startups A Year Without Going CrazyCiklum Ukraine
 
5-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 20155-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 2015Wojciech Seliga
 
Agile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovAgile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovSvetlin Nakov
 
Design patterns
Design patternsDesign patterns
Design patternsnisheesh
 
2018 01-29 - brewbox - refactoring. sempre, senza pietà
2018 01-29 - brewbox - refactoring. sempre, senza pietà2018 01-29 - brewbox - refactoring. sempre, senza pietà
2018 01-29 - brewbox - refactoring. sempre, senza pietàRoberto Albertini
 
It is a sunny day
It is a sunny dayIt is a sunny day
It is a sunny daybcoder
 
Friday final test
Friday final testFriday final test
Friday final testbcoder
 
Clean Code Software Engineering
Clean Code Software Engineering Clean Code Software Engineering
Clean Code Software Engineering Inocentshuja Ahmad
 

Similar to Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work (20)

A sweet taste of clean code and software design
A sweet taste of clean code and software designA sweet taste of clean code and software design
A sweet taste of clean code and software design
 
Writing Code for Humans, not Computers
Writing Code for Humans, not ComputersWriting Code for Humans, not Computers
Writing Code for Humans, not Computers
 
WordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPressWordCamp Nashville: Clean Code for WordPress
WordCamp Nashville: Clean Code for WordPress
 
Clean Code Part III - Craftsmanship at SoCal Code Camp
Clean Code Part III - Craftsmanship at SoCal Code CampClean Code Part III - Craftsmanship at SoCal Code Camp
Clean Code Part III - Craftsmanship at SoCal Code Camp
 
Software Quality via Unit Testing
Software Quality via Unit TestingSoftware Quality via Unit Testing
Software Quality via Unit Testing
 
Planning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teamsPlanning JavaScript and Ajax for larger teams
Planning JavaScript and Ajax for larger teams
 
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
Beyond Technical Debt: Unconventional techniques to uncover technical and soc...
 
Agile Software Design
Agile Software DesignAgile Software Design
Agile Software Design
 
10 Big Ideas from Industry
10 Big Ideas from Industry10 Big Ideas from Industry
10 Big Ideas from Industry
 
Managing and evolving JavaScript Code
Managing and evolving JavaScript CodeManaging and evolving JavaScript Code
Managing and evolving JavaScript Code
 
Twenty Startups A Year Without Going Crazy
Twenty Startups A Year Without Going CrazyTwenty Startups A Year Without Going Crazy
Twenty Startups A Year Without Going Crazy
 
Raising the Bar
Raising the BarRaising the Bar
Raising the Bar
 
Code Quality
Code QualityCode Quality
Code Quality
 
5-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 20155-10-15 years of Java developer career - Warszawa JUG 2015
5-10-15 years of Java developer career - Warszawa JUG 2015
 
Agile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovAgile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin Nakov
 
Design patterns
Design patternsDesign patterns
Design patterns
 
2018 01-29 - brewbox - refactoring. sempre, senza pietà
2018 01-29 - brewbox - refactoring. sempre, senza pietà2018 01-29 - brewbox - refactoring. sempre, senza pietà
2018 01-29 - brewbox - refactoring. sempre, senza pietà
 
It is a sunny day
It is a sunny dayIt is a sunny day
It is a sunny day
 
Friday final test
Friday final testFriday final test
Friday final test
 
Clean Code Software Engineering
Clean Code Software Engineering Clean Code Software Engineering
Clean Code Software Engineering
 

Recently uploaded

SCRIP Lua HTTP PROGRACMACION PLC WECON CA
SCRIP Lua HTTP PROGRACMACION PLC  WECON CASCRIP Lua HTTP PROGRACMACION PLC  WECON CA
SCRIP Lua HTTP PROGRACMACION PLC WECON CANestorGamez6
 
Captivating Charm: Exploring Marseille's Hillside Villas with Our 3D Architec...
Captivating Charm: Exploring Marseille's Hillside Villas with Our 3D Architec...Captivating Charm: Exploring Marseille's Hillside Villas with Our 3D Architec...
Captivating Charm: Exploring Marseille's Hillside Villas with Our 3D Architec...Yantram Animation Studio Corporation
 
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)amitlee9823
 
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...babafaisel
 
SD_The MATATAG Curriculum Training Design.pptx
SD_The MATATAG Curriculum Training Design.pptxSD_The MATATAG Curriculum Training Design.pptx
SD_The MATATAG Curriculum Training Design.pptxjanettecruzeiro1
 
AMBER GRAIN EMBROIDERY | Growing folklore elements | Root-based materials, w...
AMBER GRAIN EMBROIDERY | Growing folklore elements |  Root-based materials, w...AMBER GRAIN EMBROIDERY | Growing folklore elements |  Root-based materials, w...
AMBER GRAIN EMBROIDERY | Growing folklore elements | Root-based materials, w...BarusRa
 
Top Rated Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
Top Rated  Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...Top Rated  Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
Top Rated Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...Call Girls in Nagpur High Profile
 
Stark Industries Marketing Plan (1).pptx
Stark Industries Marketing Plan (1).pptxStark Industries Marketing Plan (1).pptx
Stark Industries Marketing Plan (1).pptxjeswinjees
 
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai DouxDubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai Douxkojalkojal131
 
Fashion trends before and after covid.pptx
Fashion trends before and after covid.pptxFashion trends before and after covid.pptx
Fashion trends before and after covid.pptxVanshNarang19
 
Call Girls in Kalkaji Delhi 8264348440 call girls ❤️
Call Girls in Kalkaji Delhi 8264348440 call girls ❤️Call Girls in Kalkaji Delhi 8264348440 call girls ❤️
Call Girls in Kalkaji Delhi 8264348440 call girls ❤️soniya singh
 
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779Delhi Call girls
 
Nepali Escort Girl Gomti Nagar \ 9548273370 Indian Call Girls Service Lucknow...
Nepali Escort Girl Gomti Nagar \ 9548273370 Indian Call Girls Service Lucknow...Nepali Escort Girl Gomti Nagar \ 9548273370 Indian Call Girls Service Lucknow...
Nepali Escort Girl Gomti Nagar \ 9548273370 Indian Call Girls Service Lucknow...nagunakhan
 
VIP Call Girls Service Bhagyanagar Hyderabad Call +91-8250192130
VIP Call Girls Service Bhagyanagar Hyderabad Call +91-8250192130VIP Call Girls Service Bhagyanagar Hyderabad Call +91-8250192130
VIP Call Girls Service Bhagyanagar Hyderabad Call +91-8250192130Suhani Kapoor
 
Peaches App development presentation deck
Peaches App development presentation deckPeaches App development presentation deck
Peaches App development presentation decktbatkhuu1
 
The history of music videos a level presentation
The history of music videos a level presentationThe history of music videos a level presentation
The history of music videos a level presentationamedia6
 
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdfThe_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdfAmirYakdi
 
Petrosains Drama Competition (PSDC).pptx
Petrosains Drama Competition (PSDC).pptxPetrosains Drama Competition (PSDC).pptx
Petrosains Drama Competition (PSDC).pptxIgnatiusAbrahamBalin
 
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...Call Girls in Nagpur High Profile
 

Recently uploaded (20)

SCRIP Lua HTTP PROGRACMACION PLC WECON CA
SCRIP Lua HTTP PROGRACMACION PLC  WECON CASCRIP Lua HTTP PROGRACMACION PLC  WECON CA
SCRIP Lua HTTP PROGRACMACION PLC WECON CA
 
Captivating Charm: Exploring Marseille's Hillside Villas with Our 3D Architec...
Captivating Charm: Exploring Marseille's Hillside Villas with Our 3D Architec...Captivating Charm: Exploring Marseille's Hillside Villas with Our 3D Architec...
Captivating Charm: Exploring Marseille's Hillside Villas with Our 3D Architec...
 
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
Escorts Service Basapura ☎ 7737669865☎ Book Your One night Stand (Bangalore)
 
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
Kala jadu for love marriage | Real amil baba | Famous amil baba | kala jadu n...
 
SD_The MATATAG Curriculum Training Design.pptx
SD_The MATATAG Curriculum Training Design.pptxSD_The MATATAG Curriculum Training Design.pptx
SD_The MATATAG Curriculum Training Design.pptx
 
AMBER GRAIN EMBROIDERY | Growing folklore elements | Root-based materials, w...
AMBER GRAIN EMBROIDERY | Growing folklore elements |  Root-based materials, w...AMBER GRAIN EMBROIDERY | Growing folklore elements |  Root-based materials, w...
AMBER GRAIN EMBROIDERY | Growing folklore elements | Root-based materials, w...
 
Top Rated Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
Top Rated  Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...Top Rated  Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
Top Rated Pune Call Girls Koregaon Park ⟟ 6297143586 ⟟ Call Me For Genuine S...
 
Stark Industries Marketing Plan (1).pptx
Stark Industries Marketing Plan (1).pptxStark Industries Marketing Plan (1).pptx
Stark Industries Marketing Plan (1).pptx
 
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai DouxDubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
Dubai Call Girls Pro Domain O525547819 Call Girls Dubai Doux
 
Fashion trends before and after covid.pptx
Fashion trends before and after covid.pptxFashion trends before and after covid.pptx
Fashion trends before and after covid.pptx
 
Call Girls in Kalkaji Delhi 8264348440 call girls ❤️
Call Girls in Kalkaji Delhi 8264348440 call girls ❤️Call Girls in Kalkaji Delhi 8264348440 call girls ❤️
Call Girls in Kalkaji Delhi 8264348440 call girls ❤️
 
escort service sasti (*~Call Girls in Prasad Nagar Metro❤️9953056974
escort service sasti (*~Call Girls in Prasad Nagar Metro❤️9953056974escort service sasti (*~Call Girls in Prasad Nagar Metro❤️9953056974
escort service sasti (*~Call Girls in Prasad Nagar Metro❤️9953056974
 
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
Best VIP Call Girls Noida Sector 47 Call Me: 8448380779
 
Nepali Escort Girl Gomti Nagar \ 9548273370 Indian Call Girls Service Lucknow...
Nepali Escort Girl Gomti Nagar \ 9548273370 Indian Call Girls Service Lucknow...Nepali Escort Girl Gomti Nagar \ 9548273370 Indian Call Girls Service Lucknow...
Nepali Escort Girl Gomti Nagar \ 9548273370 Indian Call Girls Service Lucknow...
 
VIP Call Girls Service Bhagyanagar Hyderabad Call +91-8250192130
VIP Call Girls Service Bhagyanagar Hyderabad Call +91-8250192130VIP Call Girls Service Bhagyanagar Hyderabad Call +91-8250192130
VIP Call Girls Service Bhagyanagar Hyderabad Call +91-8250192130
 
Peaches App development presentation deck
Peaches App development presentation deckPeaches App development presentation deck
Peaches App development presentation deck
 
The history of music videos a level presentation
The history of music videos a level presentationThe history of music videos a level presentation
The history of music videos a level presentation
 
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdfThe_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
The_Canvas_of_Creative_Mastery_Newsletter_April_2024_Version.pdf
 
Petrosains Drama Competition (PSDC).pptx
Petrosains Drama Competition (PSDC).pptxPetrosains Drama Competition (PSDC).pptx
Petrosains Drama Competition (PSDC).pptx
 
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
VVIP Pune Call Girls Hadapsar (7001035870) Pune Escorts Nearby with Complete ...
 

Taming Big Balls of Mud with Diligence, Agile Practices, and Hard Work

  • 1. Taming Big Balls of Mud with Agile, Diligence and Lot’s of Hard Work Copyright 2014 Joseph W. Yoder & The Refactory, Inc. Joseph W. Yoder --www.refactory.comwww.teamsthatinnovate.com
  • 2. Sustainable Architecture Copyright 2014 Joseph W. Yoder & The Refactory, Inc. Joseph W. Yoder --www.refactory.com
  • 3. Sustaining Your ArchitectureEvolved from UIUC SAGIn the early 90’s we were studying objects, frameworks, components, meta, refactoring, reusability, patterns, “good” architectureHowever, in our SAG group we often noticed that although we talk a good game, many successful systems do not have a good internal structure at all
  • 4. Sustaining Your ArchitectureSelfish ClassBrian and I had just published a paper called Selfish Class which takes a code’s- eye view of software reuse and evolution In contrast, our BBoMpaper noted that in reality, a lot of code was hard to (re)-use
  • 5. Sustaining Your ArchitectureBig Ball of MudAlias: Shantytown, Spaghetti CodeA BIG BALL OF MUD is haphazardly structured, sprawling, sloppy, duct-tape and bailing wire, spaghetti code jungle… The de-facto standard software architecture. Whyis the gap between what we preachandwhat we practiceso large? We preach we want to build high quality systems but why are BBoMsso prevalent?
  • 6. Messy Code Have you been significantly impeded by messy code? With permission from: Mrs D. http://www.belly-timber.com/2005/10/03/embracing-our-inner-web-stat/
  • 7. Designs Naturally Degrade •All designs evolve. •Code rots as changes are made unless it is kept clean. •Entropy increases over time. classPair { private: Object first_; Object second_; Object third_; public: Pair() { } Pair( Object first, Object second, Object third ) :first_(first), second_(second), third_(third) {} // etc. };
  • 8. Neglect Is Contagious Disorder increases and software rots over time. Don’t tolerate a broken window. http://www.pragmaticprogrammer.com/ppbook/extracts/no_broken_windows.html
  • 9. Sustaining Your ArchitectureWhere Mud Comes From? People Write Code People make Mud
  • 10. Sustaining Your ArchitectureKeep it Working, Piecemeal Growth, Throwaway Code
  • 12. Sustaining Your ArchitectureThe Age of SamplingBig Bucketof Glue&
  • 14. Transitional Technologies Precursors of Ambient Computing Era 1950 1960 2000 2010 2020 1990 1980 1970 Societal Impact Personal Computing Corporate Computing AmbientComputing WWW/Browsers Cell phones http://www.wirfs-brock.com/allen/posts/category/post-pc-computing
  • 15. Apps on Browser Platforms Apps are becoming the norm running on whatever platform
  • 16. Cloud Computing Internet Ubiquitous Computing Ambient
  • 17. Technical Debt Term invented by Ward Cunningham Piles up when you continually implement without going back to reflect new understanding Can have long term costs and consequences
  • 18. Sustaining Your ArchitectureAgile to the Rescue??? Individuals and interactions over processes and tools Working software over comprehensive documentation Customer collaboration over contract negotiation Responding to change over following a plan That is, while there is value in the items on the right, we value the items on the left more …From the Agile Manifesto
  • 19. Sustaining Your ArchitectureCan Agile Help? Scrum, TDD, Refactoring, Regular Feedback, Testing, More Eyes, …. Good People!!! Continuous attentionto technical excellence! Retrospectives! Face-To-Face conversation. Motivated individualswith the environmentand supportthey need.
  • 20. Sustaining Your ArchitectureAgile Design Values Core values: Design Simplicity Communication Continuous Improvement Teamwork / Trust Satisfying stakeholder needs Keep learning Continuous Feedback Lots of Testing/Validation!!!
  • 21. Sustaining Your ArchitectureSome Agile Myths Simple solutions are always best We can easily adapt to changing requirements (new requirements) Scrum/TDD will ensure good Design/Architecture Good architecture simply emerges from “good” development practices. sometimes you need more Make significant architecture changes at the last moment“www.agilemyths.com”
  • 22. Sustaining Your ArchitectureDo Some Agile Principles Encourage bad design? Lack of Upfront Design? Late changes to the requirementsof the system? Continuously Evolving the Architecture? Piecemeal Growth? Focus on Process rather than Architecture? Working code is the measure of success! I’m sure there are more!!!
  • 24. Sustaining Your ArchitectureQualityQuality Definition:apeculiar and essential character or nature, an inherent feature or property, adegree of excellence or grade, a distinguishing attribute orcharacteristic
  • 25. Sustaining Your ArchitectureQuality (Who’s perspective) Scientist Artist Engineer Designer important/boring true/false cool/uncool good/bad Rich Gold "The Plenitude: Creativity, Innovation & Making Stuff(Simplicity: Design, Technology, Business, Life)“ Triggers and Practices –Richard Gabriel http://www.dreamsongs.com An architect might have perspectives from an artist to a design or an engineer! “The Four Winds of Making”…Gabriel
  • 26. Sustaining Your ArchitectureDesign is about Tradeoffs Usability and Security often have orthogonalqualities Designing Interfaces: Patterns for Effective Interaction Design Security Patterns: Integrating Security and Systems Engineering Performance vsSmall Memory•Quality of being good enough Secure Usable Cheap
  • 27. Sustaining Your ArchitectureBeing Good Enough Quality of being good enough. Does it meet the minimum requirements Quality has many competing forces…are we designing a system for online orders or for controlling the space shuttle, they have different qualities, thus different patterns and solutions apply. Perfection is the enemy of Good Enough! Maybe Quality without a Number.
  • 28. Sustaining Your ArchitectureDoes Quality Code Matter? Patterns about creating quality code that communicates well, is easy to understand, and is a pleasure to read. Book is aboutpatterns of “Quality” code. But…Kent states, “…this book is built on a fragile premise: that good code matters. I’ve seen too much ugly code make too much money to believe that quality of code is either necessary or sufficient for commercial success or widespread use. However I still believe quality of code matters.” Patterns assist with making code more bug free and easier to maintain and extend.
  • 29. Sustaining Your ArchitectureCleaning HouseCan we gentrify, rehabilitate, or make-over code helping clean up the mud? Can refactoring, patterns, frameworks, components, agile, and objects helpwith mud? Is it possible to do some Mud Preventionand keep our Architecture Clean?
  • 30. Sustaining Your ArchitectureTotal Code Makeover Can we just Refactorout of Mud? Sweep the Mess Under the Rug?
  • 31. Sustaining Your ArchitectureHow can we even start? How can we cordon off the mess? If we have a BBoM
  • 32. Clean Code Doesn't Just Happen •You have to craft it. •You have to maintain it. •You have to make a professional commitment. “Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” –Martin Fowler
  • 33. Professional Responsibility There’s no time to wash hands, get to the next patient!
  • 34. Professionalism Make it your responsibility to create code that: •Delivers business value •Is clean •Is tested •Is simple •Follows good design principles When working with existing code: •If you break it, you fix it •You never make it worse than it was •You always make it better
  • 35. Sustaining Your Architecture 35 Legacy CodeDefinition: -Code without tests, Code from last year, Code I didn’t writeThe goal is to make small, relatively safe changes to get tests in place, so that we can feel comfortable making larger changesTake a stance -we will not let our code base get any worse-New code does not have to go into class as existing (untested) code•Try to add new code, test driven, in new classes•Sprout Method, Sprout Class from VideoStore-Bugs are opportunities•Identify the bug•Write a failing test to expose the bug•Fix the bug•Test now passes
  • 36. Sustaining Your ArchitectureLegacy Code Change Algorithm Identify change points Find test points Break dependencies Write tests Make changes and refactor
  • 37. Sustaining Your ArchitectureSweep It Under the RugCover it up to keep other areas clean(Façade and other Wrapper Patterns)
  • 38. Sustaining Your ArchitectureCode Make OverRefactoring can help reverse some mud.The tradeoff is cost and time....maybe with technology Refactoring to Better Design (Patterns)…
  • 39. Sustaining Your ArchitectureCode SmellsA code smellis a hintthat something has gone wrongsomewhere in your code. Use the smell to trackdown the problem…Kent BeckBad Smells inCodewas an essay by KentBeck and MartinFowler, published as Chapter 3 of: Refactoring Improving The Design Of Existing Code. ----Ward’s Wiki Have you ever looked at a piece of code that doesn't smell very nice?
  • 40. Sustaining Your ArchitectureTen Most Putrid List1)Sloppy Layout, 2)Dead Code, 3)Lame Names, 4)Commented Code, 5)Duplicated Code, 6)Feature Envy, 7)Inappropriate Intimacy, 8)Long Methods & Large Class, 9)Primitive Obsession & Long Parameter List, 10)Switch Statement & Conditional Complexity …
  • 41. Sustaining Your ArchitectureLame Names void foo(intx[], inty, intz) { if (z > y + 1) { inta = x[y], b = y + 1, c = z; while (b < c) { if (x[b] <= a) b++; else { intd = x[b]; x[b] = x[--c]; x[c] = d; } } inte = x[--b]; x[b] = x[y]; x[y] = e; foo(x, y, b); foo(x, c, z); } void quicksort(intarray[], intbegin, intend) { if (end > begin + 1) { intpivot = array[begin], l = begin + 1, r = end; while (l < r) { if (array[l] <= pivot) l++; else swap(&array[l], &array[--r]); } swap(&array[--l], &array[beg]); sort(array, begin, l); sort(array, r, end); } } http://dreamsongs.com/Files/BetterScienceThroughArt.pdf
  • 42. Sustaining Your ArchitectureFixing NamesNames should mean something. Standards improve communication -know and follow them. Standard protocolsobject ToString(), Equals() ArrayListContains(), Add(), AddRange() Remove(), Count, RemoveAt(), HashTableKeys, ContainsKey(), ContainsValue() Standard naming conventions
  • 43. Sustaining Your ArchitectureDuplicate Code Do everything exactly once Duplicate code makes the systemharder to understand and maintain Any change must be duplicated The maintainer has to change every copy
  • 44. Sustaining Your ArchitectureFixing Duplicate Code Do everything exactly once!!! Fixing Code Duplication Move identical methods up to superclass Move methods into common components Break up Large Methods REUSE Do notduplicate! DRY Principle
  • 45. Sustaining Your Architecture Inappropriate Intimacy When classes depend on other’s implementation details … Tightly coupled classes - you can’t change one with- out changing the other. Boundaries between classes are not well defined.
  • 46. Sustaining Your Architecture Feature Envy When a class uses a lot the functionality or features of another class Indicates that some functionality is in the wrong class … “Move Method” It creates a tight coupling between these two classes
  • 47. Sustaining Your ArchitectureA Simple Refactoring Object Concrete1 Concrete2 Object Concrete1 Concrete2 NewAbstract Create Empty ClassBorrwedfrom Don Roberts, The Refactory, Inc.
  • 48. Sustaining Your ArchitectureA Complex RefactoringRefactoring can be hard but there are a lot ofsmall steps that lead to big gains in mud busting Borrowed from Don Roberts, The Refactory, Inc. Array Matrix Matrix MatrixRep ArrayRep rep SparseRep IdentityRep
  • 49. Sustaining Your ArchitectureTransform Design with Small Steps Extract Method Move Method Replace Conditional with Polymorphism Test Test Test Test Rename OR
  • 50. Sustaining Your ArchitectureTwo Refactoring Types* Floss Refactorings—frequent, small changes, intermingled with other programming (daily health) Root canal refactorings— infrequent, protracted refactoring, during which programmers do nothing else (major repair) * Emerson Murphy-Hill and Andrew Black in“Refactoring Tools: Fitness for Purpose” http://web.cecs.pdx.edu/~black/publications/IEEESoftwareRefact.pdf
  • 51. Sustaining Your ArchitectureCommon Wisdom“In almost all cases, I’m opposed to setting aside time for refactoring. In my view refactoring is not an activity you set aside time to do. Refactoringis something you do all the timein little bursts.” —Martin Fowler Work refactoring into your daily routine…
  • 52. Sustaining Your ArchitectureRefactoring: When to do it۔Regular refactorings make it fairly safe and easy to do anytime. Especially when you have good TESTS. ۔When you are fixing bugs۔Adding new features۔Right after a release۔Might have to RefactorTeststoo!!!
  • 53. Sustaining Your ArchitectureSustaining Architecture What can be done to help sustain our architecture in the long run?
  • 54. Sustaining Your ArchitectureStuart Brand’s Shearing Layers Buildings are a set of components that evolve in different timescales. Layers: site, structure, skin, services, space plan, stuff. Each layer has its own value, and speed of change (pace). Buildings adapt because faster layers (services) arenot obstructed by slower ones (structure). —Stuart Brand, How Buildings Learn
  • 55. Sustaining Your ArchitectureYoder and Foote’sSoftware Shearing Layers“Factor your system so that artifacts that change at similar rates are together.”—Foote & Yoder, Ball of Mud, PLoPD4. •The platform•Infrastructure•Data schema•Standard frameworks, components, services•Abstract classes and interfaces•Classes•Code•Data LayersSlowerFaster
  • 56. Sustaining Your ArchitecturePut a Rug at the Front Door ALIAS: ENCAPSULATEANDIGNOREKEEPINGTHEINTERNALSCLEAN Patterns forSustaining Architecture PLoP2012 Paper
  • 57. Sustaining Your Architecture Wipe your Feet at the Front Door Filtering and Cleansing Sequence to keep Place Order Interface Clean Protected Components S1 S2 S3 Sn Adapter/ Proxy/ Façade Frontdoor Wrapper Filtering, Cleansing, Security Checks ...
  • 58. Sustaining Your ArchitecturePaving over theWagon Trail ALIAS: MAKEREPETITIVETASKSEASIERSTREAMLININGREPETITIVECODETASKS Create simple examples, templates, & scripts Develop a tool that generates code Identify and use existing tools or frameworks Develop a framework &/or runtime environment Develop a domain-specific language Patterns for Sustaining Architecture PLoP2012 Paper
  • 59. Sustaining Your ArchitectureContinuous Inspection Asian PLoP2014 Paper CODESMELLDETECTION METRICS(TESTCOVERAGE, CYCLOMATICCOMPLEXITY, TECHNICALDEBT, SIZES, …) SECURITYCHECKS ARCHITECTURALCONFORMANCE AUTOMATEWHEREYOUCAN!!!
  • 60. Sustaining Your ArchitectureSustainable Architecture Stewardship Follow through Ongoing attention Not ignoring the little things that can undermine our ability to grow, change and adapt our systems
  • 61. Sustaining Your ArchitectureArchitectural Practice: Reduce Technical Debt Integrate new learning into your code Refactoring Redesign Rework Code clean up Unit tests (functionality) Test for architectural qualities (performance, reliability,…)
  • 62. Sustaining Your ArchitectureAgile Values Drive Architectural Practices Do something. Don’t debate or discuss architecture too long Do something that buys you information Prove your architecture ideas Reduce risks Make it testable Prototype realistic scenarios that answer specific questions Incrementally refine your architecture Defer architectural decisions that don’t need to be immediately made Do something! Prove & Refine.
  • 63. Sustaining Your ArchitectureIndicators You’ve Paid Enough Attention to Architecture Defects are localized Stable interfaces Consistency Developers can easily add new functionality New functionality doesn’t “break” existing architecture Few areas that developers avoid because they are too difficult to work in Able to incrementally integrate new functionality
  • 65. Sustaining Your ArchitectureThinking Fast vs. Slow Fast thinking: decisions based on intuition, biases, ingrained patterns, and emotions Slow thinking: Reasoning, logical thinking, contemplating
  • 66. Sustaining Your ArchitectureTearing Down the Wallsaka “Breaking Down Barriers” Physical Barriers, Cultural Differences Language/Communication, Background Expertise, Lack of Time, Us and Them Mentality How can agile teams remove the barriers and become more agile at quality? Tear down the walls through various actions: include QA early on; make them part of the sprints, embed them in the teams
  • 67. Sustaining Your ArchitectureAGILE QUALITYBuild quality into your project rhythms
  • 68. Sustaining Your ArchitectureHow Quality Scenarios and Quality Testing Fit Into An Agile Process Product Envisioning / Roadmap Deploy to Stakeholders Functional Acceptance Testing Develop and Manage the Backlog Plan a Sprint Run a Sprint Daily Review Incorporate Feedback Identify Key Quality Scenarios Can Include Quality Scenarios Include relevant quality tasks Quality Testing
  • 69. Sustaining Your Architecture Requirements Envisioning (days/weeks/...) Architecture Envisioning (days/weeks/…) Iteration 0: Envisioning Iteration Modeling (hours) Model Storming(minutes) Fast TDD(hours) Iteration n: Development a little bit of modeling then a lot of coding, think about what qualities might fit into the “Sprint” Conceptual Modeling What Qualitiesare important? Test-Driven DevelopmentShould Include Quality
  • 70. Sustaining Your ArchitectureOther Techniques for Improving QualitySteve McConnellhttp://kev.inburke.com/kevin/the-best-ways-to-find-bugs-in-your-code/ Average is 40% for any one technique! Combining techniques gives you quality (> 90%)
  • 71. Sustaining Your ArchitectureDraining the SwampYou canescape from the“Spaghetti Code Jungle” Indeed you can transformthe landscape. The key is not some magic bullet, but a long-term commitment to architecture, and to cultivating and refining “quality” artifactsfor yourdomain (Refactoring)! Patterns of the best practices can help!!!
  • 72. Sustaining Your ArchitectureSilver BuckshotThere are no silver bullets…Fred BrooksBut maybe some silver buckshot…promising attacksGood DesignFrameworksPatternsArchitectureProcess/OrganizationTools and SupportRefactoringGood People ***
  • 73. Sustaining Your ArchitectureSo There is Some Hope!!! Testing(TDD), Refactoring, Regular Feedback, Patterns, More Eyes, … Good People!!! Continuous attention to technical excellence! Retrospectives! Face-To-Face conversations. Diligence and Hard Work! Motivated individualswith the environmentand supportthey need. But, Maybe Mud is why we have Agile…