SlideShare une entreprise Scribd logo
1  sur  75
Télécharger pour lire hors ligne
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

Contenu connexe

Tendances

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
 

Tendances (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
 

En vedette

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
 

En vedette (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
 

Similaire à 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
 

Similaire à 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
 

Dernier

在线办理ohio毕业证俄亥俄大学毕业证成绩单留信学历认证
在线办理ohio毕业证俄亥俄大学毕业证成绩单留信学历认证在线办理ohio毕业证俄亥俄大学毕业证成绩单留信学历认证
在线办理ohio毕业证俄亥俄大学毕业证成绩单留信学历认证nhjeo1gg
 
办理(UC毕业证书)查尔斯顿大学毕业证成绩单原版一比一
办理(UC毕业证书)查尔斯顿大学毕业证成绩单原版一比一办理(UC毕业证书)查尔斯顿大学毕业证成绩单原版一比一
办理(UC毕业证书)查尔斯顿大学毕业证成绩单原版一比一z xss
 
办理学位证(NUS证书)新加坡国立大学毕业证成绩单原版一比一
办理学位证(NUS证书)新加坡国立大学毕业证成绩单原版一比一办理学位证(NUS证书)新加坡国立大学毕业证成绩单原版一比一
办理学位证(NUS证书)新加坡国立大学毕业证成绩单原版一比一Fi L
 
Pharmaceutical Packaging for the elderly.pdf
Pharmaceutical Packaging for the elderly.pdfPharmaceutical Packaging for the elderly.pdf
Pharmaceutical Packaging for the elderly.pdfAayushChavan5
 
MT. Marseille an Archipelago. Strategies for Integrating Residential Communit...
MT. Marseille an Archipelago. Strategies for Integrating Residential Communit...MT. Marseille an Archipelago. Strategies for Integrating Residential Communit...
MT. Marseille an Archipelago. Strategies for Integrating Residential Communit...katerynaivanenko1
 
PORTAFOLIO 2024_ ANASTASIYA KUDINOVA
PORTAFOLIO   2024_  ANASTASIYA  KUDINOVAPORTAFOLIO   2024_  ANASTASIYA  KUDINOVA
PORTAFOLIO 2024_ ANASTASIYA KUDINOVAAnastasiya Kudinova
 
办理学位证(SFU证书)西蒙菲莎大学毕业证成绩单原版一比一
办理学位证(SFU证书)西蒙菲莎大学毕业证成绩单原版一比一办理学位证(SFU证书)西蒙菲莎大学毕业证成绩单原版一比一
办理学位证(SFU证书)西蒙菲莎大学毕业证成绩单原版一比一F dds
 
原版美国亚利桑那州立大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
原版美国亚利桑那州立大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree原版美国亚利桑那州立大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
原版美国亚利桑那州立大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degreeyuu sss
 
group_15_empirya_p1projectIndustrial.pdf
group_15_empirya_p1projectIndustrial.pdfgroup_15_empirya_p1projectIndustrial.pdf
group_15_empirya_p1projectIndustrial.pdfneelspinoy
 
Dubai Calls Girl Tapes O525547819 Real Tapes Escort Services Dubai
Dubai Calls Girl Tapes O525547819 Real Tapes Escort Services DubaiDubai Calls Girl Tapes O525547819 Real Tapes Escort Services Dubai
Dubai Calls Girl Tapes O525547819 Real Tapes Escort Services Dubaikojalkojal131
 
Call Girls Meghani Nagar 7397865700 Independent Call Girls
Call Girls Meghani Nagar 7397865700  Independent Call GirlsCall Girls Meghani Nagar 7397865700  Independent Call Girls
Call Girls Meghani Nagar 7397865700 Independent Call Girlsssuser7cb4ff
 
昆士兰大学毕业证(UQ毕业证)#文凭成绩单#真实留信学历认证永久存档
昆士兰大学毕业证(UQ毕业证)#文凭成绩单#真实留信学历认证永久存档昆士兰大学毕业证(UQ毕业证)#文凭成绩单#真实留信学历认证永久存档
昆士兰大学毕业证(UQ毕业证)#文凭成绩单#真实留信学历认证永久存档208367051
 
8377877756 Full Enjoy @24/7 Call Girls in Nirman Vihar Delhi NCR
8377877756 Full Enjoy @24/7 Call Girls in Nirman Vihar Delhi NCR8377877756 Full Enjoy @24/7 Call Girls in Nirman Vihar Delhi NCR
8377877756 Full Enjoy @24/7 Call Girls in Nirman Vihar Delhi NCRdollysharma2066
 
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝soniya singh
 
How to Empower the future of UX Design with Gen AI
How to Empower the future of UX Design with Gen AIHow to Empower the future of UX Design with Gen AI
How to Empower the future of UX Design with Gen AIyuj
 
专业一比一美国亚利桑那大学毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国亚利桑那大学毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree专业一比一美国亚利桑那大学毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国亚利桑那大学毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degreeyuu sss
 
FiveHypotheses_UIDMasterclass_18April2024.pdf
FiveHypotheses_UIDMasterclass_18April2024.pdfFiveHypotheses_UIDMasterclass_18April2024.pdf
FiveHypotheses_UIDMasterclass_18April2024.pdfShivakumar Viswanathan
 
Top 10 Modern Web Design Trends for 2025
Top 10 Modern Web Design Trends for 2025Top 10 Modern Web Design Trends for 2025
Top 10 Modern Web Design Trends for 2025Rndexperts
 
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`dajasot375
 
CREATING A POSITIVE SCHOOL CULTURE CHAPTER 10
CREATING A POSITIVE SCHOOL CULTURE CHAPTER 10CREATING A POSITIVE SCHOOL CULTURE CHAPTER 10
CREATING A POSITIVE SCHOOL CULTURE CHAPTER 10uasjlagroup
 

Dernier (20)

在线办理ohio毕业证俄亥俄大学毕业证成绩单留信学历认证
在线办理ohio毕业证俄亥俄大学毕业证成绩单留信学历认证在线办理ohio毕业证俄亥俄大学毕业证成绩单留信学历认证
在线办理ohio毕业证俄亥俄大学毕业证成绩单留信学历认证
 
办理(UC毕业证书)查尔斯顿大学毕业证成绩单原版一比一
办理(UC毕业证书)查尔斯顿大学毕业证成绩单原版一比一办理(UC毕业证书)查尔斯顿大学毕业证成绩单原版一比一
办理(UC毕业证书)查尔斯顿大学毕业证成绩单原版一比一
 
办理学位证(NUS证书)新加坡国立大学毕业证成绩单原版一比一
办理学位证(NUS证书)新加坡国立大学毕业证成绩单原版一比一办理学位证(NUS证书)新加坡国立大学毕业证成绩单原版一比一
办理学位证(NUS证书)新加坡国立大学毕业证成绩单原版一比一
 
Pharmaceutical Packaging for the elderly.pdf
Pharmaceutical Packaging for the elderly.pdfPharmaceutical Packaging for the elderly.pdf
Pharmaceutical Packaging for the elderly.pdf
 
MT. Marseille an Archipelago. Strategies for Integrating Residential Communit...
MT. Marseille an Archipelago. Strategies for Integrating Residential Communit...MT. Marseille an Archipelago. Strategies for Integrating Residential Communit...
MT. Marseille an Archipelago. Strategies for Integrating Residential Communit...
 
PORTAFOLIO 2024_ ANASTASIYA KUDINOVA
PORTAFOLIO   2024_  ANASTASIYA  KUDINOVAPORTAFOLIO   2024_  ANASTASIYA  KUDINOVA
PORTAFOLIO 2024_ ANASTASIYA KUDINOVA
 
办理学位证(SFU证书)西蒙菲莎大学毕业证成绩单原版一比一
办理学位证(SFU证书)西蒙菲莎大学毕业证成绩单原版一比一办理学位证(SFU证书)西蒙菲莎大学毕业证成绩单原版一比一
办理学位证(SFU证书)西蒙菲莎大学毕业证成绩单原版一比一
 
原版美国亚利桑那州立大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
原版美国亚利桑那州立大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree原版美国亚利桑那州立大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
原版美国亚利桑那州立大学毕业证成绩单pdf电子版制作修改#毕业文凭制作#回国入职#diploma#degree
 
group_15_empirya_p1projectIndustrial.pdf
group_15_empirya_p1projectIndustrial.pdfgroup_15_empirya_p1projectIndustrial.pdf
group_15_empirya_p1projectIndustrial.pdf
 
Dubai Calls Girl Tapes O525547819 Real Tapes Escort Services Dubai
Dubai Calls Girl Tapes O525547819 Real Tapes Escort Services DubaiDubai Calls Girl Tapes O525547819 Real Tapes Escort Services Dubai
Dubai Calls Girl Tapes O525547819 Real Tapes Escort Services Dubai
 
Call Girls Meghani Nagar 7397865700 Independent Call Girls
Call Girls Meghani Nagar 7397865700  Independent Call GirlsCall Girls Meghani Nagar 7397865700  Independent Call Girls
Call Girls Meghani Nagar 7397865700 Independent Call Girls
 
昆士兰大学毕业证(UQ毕业证)#文凭成绩单#真实留信学历认证永久存档
昆士兰大学毕业证(UQ毕业证)#文凭成绩单#真实留信学历认证永久存档昆士兰大学毕业证(UQ毕业证)#文凭成绩单#真实留信学历认证永久存档
昆士兰大学毕业证(UQ毕业证)#文凭成绩单#真实留信学历认证永久存档
 
8377877756 Full Enjoy @24/7 Call Girls in Nirman Vihar Delhi NCR
8377877756 Full Enjoy @24/7 Call Girls in Nirman Vihar Delhi NCR8377877756 Full Enjoy @24/7 Call Girls in Nirman Vihar Delhi NCR
8377877756 Full Enjoy @24/7 Call Girls in Nirman Vihar Delhi NCR
 
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
Call Girls in Okhla Delhi 💯Call Us 🔝8264348440🔝
 
How to Empower the future of UX Design with Gen AI
How to Empower the future of UX Design with Gen AIHow to Empower the future of UX Design with Gen AI
How to Empower the future of UX Design with Gen AI
 
专业一比一美国亚利桑那大学毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国亚利桑那大学毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree专业一比一美国亚利桑那大学毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
专业一比一美国亚利桑那大学毕业证成绩单pdf电子版制作修改#真实工艺展示#真实防伪#diploma#degree
 
FiveHypotheses_UIDMasterclass_18April2024.pdf
FiveHypotheses_UIDMasterclass_18April2024.pdfFiveHypotheses_UIDMasterclass_18April2024.pdf
FiveHypotheses_UIDMasterclass_18April2024.pdf
 
Top 10 Modern Web Design Trends for 2025
Top 10 Modern Web Design Trends for 2025Top 10 Modern Web Design Trends for 2025
Top 10 Modern Web Design Trends for 2025
 
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
Abu Dhabi Call Girls O58993O4O2 Call Girls in Abu Dhabi`
 
CREATING A POSITIVE SCHOOL CULTURE CHAPTER 10
CREATING A POSITIVE SCHOOL CULTURE CHAPTER 10CREATING A POSITIVE SCHOOL CULTURE CHAPTER 10
CREATING A POSITIVE SCHOOL CULTURE CHAPTER 10
 

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…