Quick & Dirty (&Right)

Quick & Dirty

Everybody agrees... it's bad!

It's bad!

"If 10 years from now, when you are doing something quick and dirty, you suddenly visualize that I am looking over your shoulders and say to yourself: 'Djikstra would not have liked this', well that would be enough immortality for me." --Edsger Djikstra

It's bad!

"... doing things the quick and dirty way sets us up with a technical debt, which is similar to a financial debt. Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development because of the quick and dirty design choice. We can choose to continue paying the interest, or we can pay down the principal by refactoring the quick and dirty design into the better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future." --Martin Fowler

It's bad!

"THROWAWAY CODE is quick-and-dirty code that was intended to be used only once and then discarded. However, such code often takes on a life of its own, despite casual structure and poor or non-existent documentation. It works, so why fix it? When a related problem arises, the quickest way to address it might be to expediently modify this working code, rather than design a proper, general program from the ground up. Over time, a simple throwaway program begets a BIG BALL OF MUD." -- Brian Foote, Jospeh Yoder

Quotes

Everybody agrees... it's bad!

... so there's no further point to this keynote, right?

Quotes

Everybody agrees... it's bad!

... so there's no further point to this keynote, right?

... except we don't always seem to agree that it's bad

Quotes

Google "Quick and Dirty"

Quick & Dirty (& Right)

Time to re-examine

Re-examination

Everybody is OK with "quick"...

... but what does "dirty" mean?

Dirty == 'Technical debt'

"... doing things the quick and dirty way sets us up with a technical debt, which is similar to a financial debt. Like a financial debt, the technical debt incurs interest payments, which come in the form of the extra effort that we have to do in future development because of the quick and dirty design choice. We can choose to continue paying the interest, or we can pay down the principal by refactoring the quick and dirty design into the better design. Although it costs to pay down the principal, we gain by reduced interest payments in the future." --Martin Fowler

Technical debt (Fowler)

"people have made a considered decision to adopt a design strategy that isn't sustainable in the longer term, but yields a short term benefit, such as making a release. The point is that the debt yields value sooner, but needs to be paid off as soon as possible."

Technical debt (Fowler)

"The debt metaphor reminds us about the choices we can make with design flaws. ... So the useful distinction isn't between debt or non-debt, but between prudent and reckless debt."

"... there's also a difference between deliberate and inadvertent debt."

Four Quadrants to Technical debt

Conclusions?

Reminder!

"THROWAWAY CODE is quick-and-dirty code that was intended to be used only once and then discarded. However, such code often takes on a life of its own, despite casual structure and poor or non-existent documentation. It works, so why fix it? When a related problem arises, the quickest way to address it might be to expediently modify this working code, rather than design a proper, general program from the ground up. Over time, a simple throwaway program begets a BIG BALL OF MUD." -- Brian Foote, Jospeh Yoder

Sidebar: Not a problem...

... but desirable?

Sidebar

"Is This the Age of Throw-Away Software Systems?"

Sidebar: Desirable?

"Is This the Age of Throw-Away Software Systems?"

Sidebar: Desirable?

INC. Article: The Importance of Quick and Dirty

Sidebar: Desirable?

INC. Article: The Importance of Quick and Dirty

Sidebar: Desirable?

INC. Article: The Importance of Quick and Dirty

Sidebar: Desirable?

INC. Article: The Importance of Quick and Dirty

Desirable? Lean Startup

Desirable? Prototypes

Iterations

Let's talk about agile again

Why does agile suggest iterations?

Why does agile suggest iterations?

"An iterative process is one that makes progress through successive refinement. A development team takes a first cut at a system, knowing it is incomplete or weak in some (perhaps many) areas. The team then iteratively refines those areas until the product is satisfactory. With each iteration, the software is improved through the addition of greater detail."

Iterations

It isn't just agile that suggests iterations, by the way

John Boyd, and his military strategy tool, OODA

OODA: Observe, Orient, Decide, Act

OODA: Observe, Orient, Decide, Act

OODA: Observe, Orient, Decide, Act

Boyd's stated aim was to "get inside" the opponent's OODA Loop: "In order to win, we should operate at a faster tempo or rhythm than our adversaries—or, better yet, get inside the adversary's Observation-Orientation-Decision-Action time cycle or loop."

OODA: Observe, Orient, Decide, Act

In other words, it's not the loop itself we want to focus on...

OODA: Observe, Orient, Decide, Act

In other words, it's not the loop itself we want to focus on...... but the tempo and speed in which the loop executes

OODA: Observe, Orient, Decide, Act

In other words, it's not the loop itself we want to focus on...... but the tempo and speed in which the loop executes... which means, we want feedback! Quickly!

OODA: Observe, Orient, Decide, Act

In other words, it's not the loop itself we want to focus on...... but the tempo and speed in which the loop executes... which means, we want feedback! Quickly!

Which, of course, we can't get without something up and running

Desirable?

"... I see startups overthinking simple problems, adding too much structure too early, and trying to get formal too soon. Start-ups should embrace their scrappiness, not rush to toss it aside. The ability to run with scissors is a blessing, not a curse."

Iterations

Wrapping Up

What does it all mean?

Wrapping Up

Wrapping Up: When do we abandon Q-and-D?

Final thoughts