Similar documents
Big Balls of Mud in Agile Development Can we Avoid Them? Joseph W. Yoder

Agile EAI November 2002 Martin Fowler Gregor Hohpe

Outline. Agile Methods. Converse of Conway s Law. The Silver Bullet Fantasy (Brooks, 1986)

Developing the Architectural Framework for SOA Adoption

Agile Software Development in the Large

Software Engineering. So(ware Evolu1on

Xtreme RUP. Ne t BJECTIVES. Lightening Up the Rational Unified Process. 2/9/2001 Copyright 2001 Net Objectives 1. Agenda

Agile Project Management

Introduction to Agile and Scrum

Chapter 9 Software Evolution

Continuous Integration: Improving Software Quality and Reducing Risk. Preetam Palwe Aftek Limited

Agile Software Development Methodologies and Its Quality Assurance

Outline. Definitions. Course schedule

AGILE SOFTWARE DEVELOPMENT. BY Sysop Technology Aurangabad

Scrum: A disciplined approach to product quality and project success.

Preface Agile Testing Review

Alternative Development Methodologies

CS 389 Software Engineering. Lecture 2 Chapter 2 Software Processes. Adapted from: Chap 1. Sommerville 9 th ed. Chap 1. Pressman 6 th ed.

Kanban. Marek Majchrzak, Andrzej Bednarz Wrocław,

Percerons: A web-service suite that enhance software development process

Testing in an Agile Environment

AGILE vs. WATERFALL METHODOLOGIES

Basic Trends of Modern Software Development

Role of the Business Analyst in an Agile Project

IMPROVING SETTLEMENT SAVVY. Kathy Perkins Kathy Perkins LLC, Workplace Law & Mediation

Advanced Software Engineering. Software Development Processes

Business Analyst Boot Camp Course BA101; 5 Days, Instructor-led

Agile In a Nutshell. Note - all images removed to fit 2MB limit Actual presentation has much more content. Jonathan Rasmusson

Software Life Cycle. Main issues: Discussion of different life cycle models Maintenance or evolution

How To Compare The Two Cloud Computing Models

Agile Testing. What Students Learn

Life-Cycle Model. Software Life-Cycle Models. Software Development in Theory. Software Development in Practice

Agile Beyond The Team 1

Becoming Agile: a getting started guide for Agile management in Marketing and their partners in IT, Sales, Customer Service and other business teams.

Elastic Private Clouds

Software Engineering

Nova Software Quality Assurance Process

Extreme Programming, an agile software development process

What Does Large Mean? Copyright 2003 by N. Josuttis and J. Eckstein 3. Why is Large an Issue?

Applying Agile Methods in Rapidly Changing Environments

Adopting Agile Project Management - Corporate Culture Must Match (Apr 15)

Managing the Work in an Agile Project Dan Rawsthorne, PhD, CSM Senior Consultant, Net Objectives

Agile Software Project Management Methodologies

Agile and lean methods for managing application development process

Introduction to Agile Software Development

Course Goals. Solve Non-Technical Customer problem Server side: Ruby on Rails Client side: HTML, CSS, AJAX, JavaScript Deploy using cloud computing

An Example Checklist for ScrumMasters

CSC408H Lecture Notes

Life Cycle Models. V. Paúl Pauca. CSC Fall Department of Computer Science Wake Forest University. Object Oriented Software Engineering

The Agile Manifesto is based on 12 principles:

Comparing Plan-Driven and Agile Project Approaches

Dimes to Riches Money Management for Teens in Grades 7-12

Cloud Computing; the GOOD, the BAD and the BEAUTIFUL

Practical Agile Requirements Engineering

Web Applications Development and Software Process Improvement in Small Software Firms: a Review

AGILE METHODOLOGY IN SOFTWARE DEVELOPMENT

How Agile methods resolve chaos and unpredictability in software projects

22C:22 (CS:2820) Object-Oriented Software Development

INTERNATIONAL JOURNAL OF ADVANCES IN COMPUTING AND INFORMATION TECHNOLOGY An International online open access peer reviewed journal

Good CAD / Bad CAD. by Tony Richards

How To Be Successful At An Agile Software Engineering

The Role of Design in the Design of EMR Systems

Most network marketing training is a mud cake.

CISOs Share Top 10 Tips for Managing Vendors

Show notes for today's conversation are available at the podcast website.

A Guide to Open Source Transformation Services. How and Why Organizations are Making the Move to Open Source

Agile Project Management. Jan Pool NioCAD University of Stellenbosch 16 April 2008

STAND THE. Data Center Optimization. Q&A with an Industry Leader

XP & Scrum. extreme Programming. XP Roles, cont!d. XP Roles. Functional Tests. project stays on course. about the stories

Agile Projects 7. Agile Project Management 21

Certified Scrum Master Workshop

Introduction to software architecture

Transcript - Episode 2: When Corporate Culture Threatens Data Security

Web Application Architectures

Case Study on Critical Success Factors of Running Scrum *

Five Core Principles of Successful Business Architecture. STA Group, LLC Revised: May 2013

CSSE 372 Software Project Management: More Agile Project Management

How to realize software evolution of existing BOSS via ZTE SEEM

CDISC Journal. Using CDISC ODM to Migrate Data. By Alan Yeomans. Abstract. Setting the Scene

Software development process

Scrum and Testing The end of the test role Bryan Bakker 20 maart 2012

Project Management in Software: Origin of Agile

Getting to Done The Secret Sauce of High Performing Teams

Maximize strategic flexibility by building an open hybrid cloud Gordon Haff

Transcription:

Big Balls of Mud in Agile Development - How to Avoid Them Joseph W. Yoder 11 October 2009 Copyright 2009 Joseph W. Yoder & The Refactory, Inc.

Evolved from The UIUC SAG In the early 90 s we were studying objects, frameworks, components, reusability, patterns, good architecture. However, 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. How to Avoid Them -- 2

Selfish Class Brian 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 BBoM paper noted that in reality, a lot of code was hard to (re)-use. How to Avoid Them -- 3

Why BBoM? Why was this phenomenon so prevalent in our industry? We talk a good game. We had seen where Lisp had failed, Smalltalk was starting to fail, Windows was winning. Why was this? What is there about some systems that failed compared to systems that succeed, even when they seemed better. How to Avoid Them -- 4

Big Ball of Mud Alias: Shantytown, Spaghetti Code A BIG BALL OF MUD is haphazardly structured, sprawling, sloppy, duct-tape tape and bailing wire, spaghetti code jungle. The de-facto standard software architecture. Why is the gap between what we preach and what we practice so large? We preach we want to build high quality systems but why are BBoMs so prevalent? How to Avoid Them -- 5

A Scene from a Nightmare How to Avoid Them -- 6

Big Ball of Mud How to Avoid Them -- 7

Worse is Better Ideas resembles Gabriel s 1991 Worse is Better Worse is Better is an argument to release early and then have the market help you design the final product. It is taken as the first published argument for open source, among other things. Do BBoM systems have a Quality? How to Avoid Them -- 8

Worse is Better (examples) Betamax vs VHS Format Why did VHS win? Betamax was arguably a better format Macintosh vs Windows Mac was easier to use Far superior in many ways MS Word/Publisher vs FrameMaker Lot s of people use word FrameMaker is better for books How to Avoid Them -- 9

What exactly do we mean by "Big"? Well, for teams I consider > 10^2 big and for code I consider > 10^5 big Teams can write good code. Smalltalk is an example. I've seen teams of things written by 10^1 or 10^2 be pretty good and definitely would not be considered to be a BBoM. How to Avoid Them -- 10

Mud == Anti-Pattern??? In one sense Mud could be seen as an anti-pattern. Reasons Mud Happens: Throwaway Code, Piecemeal Growth, Keep it Working. Similar Forces that lead to BBoM and anti-patterns. Difference is that with BBoMs many reasons why they happened and are even successful (and maybe even necessary given our current state of the art). Anti-Patterns were almost the opposite when you looked at the book. These are counterproductive practices. How to Avoid Them -- 11

Legacy == Mud? How to Avoid Them -- 12

Legacy!= Mud??? Does Legacy happen within months or a year after the first release? Or is legacy after the second release? What about Muddy code that is released on the first version? Is this a counterexample? Is all Legacy Mud? Smalltalk??? How to Avoid Them -- 13

Is Mud Normal? Well, just read our paper...there are "normal" reasons why it happens. Maybe it is the best we can do right now. If mud is such a bad thing, why do people keep making it? Maybe if we accept it and teach it more then we can deal with it better and help prevent it from getting too bad. How to Avoid Them -- 14

Question So, why DO people build Big Balls of Mud?

Where Mud Comes From How to Avoid Them -- 16

Software Decay How to Avoid Them -- 17

Robber Crops How to Avoid Them -- 18

Keep it Working, Piecemeal Growth, Throwaway Code How to Avoid Them -- 19

Copy n Paste How to Avoid Them -- 20

The Age of Sampling How to Avoid Them -- 21

Big Bucket of Glue How to Avoid Them -- 22

Exploring the Structure of Complex Software Designs: An Empirical Study of Open Source and Proprietary Code by: Alan MacCormack, John Rusnak, Carliss Baldwin Found a significant difference in structure between Linux and the first version of Mozilla, suggesting that Linux had a more modular architecture. Yet also found that the re-design of Mozilla resulted in an architecture that was significantly more modular than that of its predecessor, and indeed, than that of Linux. Different modes of organization are associated with designs that possess different structures. However, they also suggest that purposeful managerial actions can have a significant impact in adapting a design s structure. How to Avoid Them -- 23

The Mystery of Dark Matter How to Avoid Them -- 24

They Have a Name How to Avoid Them -- 25

Agile 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 How to Avoid Them -- 26

Question What Agile Practices help us avoid or cope with mud? Does Agile practices such as TDD really help minimize mud? What are we doing RIGHT? What Agile Practices contribute to the problem? Encourage mud? So Is Mud really the best that Agile can do?

Do Some Agile Principles Encourage mud? Lack of Upfront Design? Late changes to the requirements of 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!!! How to Avoid Them -- 28

Do we really need Agile Principles such as TDD to avoid mud? After all, most of the early STers I know never practiced TDD or SCRUM yet we claim these methods helps create clean code and avoid mud more easily. Is this really true or are there other methods that work as well or better at minimizing mud? Maybe it is just good teams of people no matter what method they use? How to Avoid Them -- 29

Can Agile Help? Scrum, TDD, Refactoring, Regular Feedback, Testing, More Eyes, Good People! Continuous attention to technical excellence! Retrospectives! Face-To-Face conversation. Motivated individuals with the environment and support they need. How to Avoid Them -- 30

Question Is Craftsmanship the Cure? Or maybe it is the problem? Is ascribing poor code to unhygienic habits, even malpractice, is enough, or naive; is mud inevitable? Does quality matter? Quality on the outside vs. Quality on the inside? Does quality just get in the way? Is "Clean" the Answer? Or only part of the answer? Or a sideshow?

Shoddy Workmanship How to Avoid Them -- 32

The Quality Goes In How to Avoid Them -- 33

Quality Quality Definition: a peculiar and essential character or nature, an inherent feature or property, a degree of excellence or grade, a distinguishing attribute or characteristic How to Avoid Them -- 34

Quality (Who s perspective) Artist Scientist The Four Winds of Making Gabriel important/boring Designer cool/uncool true/false Engineer good/bad An architect might have perspectives from an artist to a design or an engineer! Rich Gold "The Plenitude: Creativity, Innovation & Making Stuff (Simplicity: Design, Technology, Business, Life) Triggers and Practices Richard Gabriel http://www.dreamsongs.com How to Avoid Them -- 35

Quality by Attributes Quality in everyday life and business, engineering and manufacturing can be seen as the usefulness of something. Usually describes certain attributes. For example you could describe quality in terms of performance, reliability (fault tolerance), safety, maintainability, reusability, etc Does quality on the inside mean quality on the outside? How to Avoid Them -- 36

Non-functional Requirements Accessibility Compatibility Efficiency Effectiveness Extensibility Maintainability Performance Reliability Safety Scalability Security Stability Supportability Usability Other terms for non-functional requirements are "constraints", "quality attributes, and "quality of service requirements" Qualities are usually described by ilities as seen in non-functional requirements but quality can also focus on how well the functional requirements are met (how to measure this?) How to Avoid Them -- 37

Being 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 to being good enough. How to Avoid Them -- 38

Brooklyn Bridge The Brooklyn Bridge, 1883, one of the oldest suspension bridges in the United States, stretches over a mile from Brooklyn to Manhattan. On completion, it was the largest suspension bridge in the world and the first steel-wire suspension bridge. How to Avoid Them -- 39

Brooklyn Bridge Over engineered. Had 6 times what it needed which proved useful over time What happens if we tried overdesign of our systems (a language for printing hello world) or the same line of code 6 times (is this 6 times more reliable?) if (x!= a) x = a; if (x!= a) x = a; if (x!= a) x = a; if (x!= a) x = a; if (x!= a) x = a; if (x!= a) x = a; Redundant components can make our systems more reliable How to Avoid Them -- 40

Being 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 How to Avoid Them -- 41

Many Quality Patterns Written Design Patterns Patterns for Fault Tolerant Software Performance Patterns Small Memory Software Patterns Analysis Patterns Security Patterns Stability Patterns Usability Patterns Imitate or use proven quality techniques How to Avoid Them -- 42

Implementation Patterns Patterns about creating quality code that communicates well, is easy to understand, and is a pleasure to read. Book is about patterns 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. How to Avoid Them -- 43

Is Craftsmanship the Cure? Or is it the problem? On the average, average companies get average people (law of averages). Is ascribing poor code to unhygienic habits, even malpractice, is enough, or naive; is mud inevitable? How to Avoid Them -- 44

Does quality really matter? Is "Clean" the Answer? Or only part of the answer? Or a sideshow? Who ever said code was supposed to be pretty? Being clean or cleaning up certain parts of the mud might help in the short run. However, as we've heard before, Lipstick on a Pig and you still have a pig, or dressing it up, still doesn't get rid of the mess inside. But maybe we don't need to clean it all up. Is this even completely possible for something of any size. I claim that at times you will always have some muddy code. There are counter forces to trying to make something too perfect. Perfection is the enemy of Good and sometimes Good enough is all we need. No normal end-user looks into the middle of something and says, that is it...we got beauty. How to Avoid Them -- 45

Amish Furniture How to Avoid Them -- 46

Question When do we gentrify, rehabilitate, or make- over code, and when must be demolish and/or replace it? (In other words) Is mud reversible? How much have patterns, frameworks, components, even objects helped with mud?

Total Code Makeover How to Avoid Them -- 48

Code Make Over? Refactoring can help reverse some mud. The tradeoff is cost and time...maybe with technology. Joel on Software says rewriting it is the one thing you should never do? Yet, we say we should do it sometimes. How to Avoid Them -- 49

Can tools Help? What is the role of tools in draining these swamps? What kinds of tools and practices might forestall software entropy; is mud preventable? Refactoring Tools, Testing Tools, XUnit, Lint Tools, Code Critics, Tools can help, but too often too much is put on tools as the solution to all our problems. How to Avoid Them -- 50

Testing How to Avoid Them -- 51

Commandos and Infantry How to Avoid Them -- 52

Terraforming Code How to Avoid Them -- 53

Draining the Swamp You can escape from the Spaghetti Code Jungle Indeed you can transform the landscape The key is not some magic bullet, but a long-term commitment to architecture, and to cultivating and refining quality artifacts for your domain (Refactoring)! Patterns of the best practices can help!!! How to Avoid Them -- 54

Silver Buckshot There are no silver bullets Fred Brooks But maybe some silver buckshot promising attacks Good Design Frameworks Patterns Architecture Process/Organization Tools Good People *** How to Avoid Them -- 55

So Maybe Agile Can Help!!! Scrum, TDD, Refactoring, Regular Feedback, Testing, More Eyes, Good People!!! Continuous attention to technical excellence! Retrospectives! Face-To-Face conversation. Motivated individuals with the environment and support they need. Maybe Mud is why we have Agile. How to Avoid Them -- 56

It Takes a Village How to Avoid Them -- 57

That s All How to Avoid Them -- 58