re-architecting on the fly #oreillysacon

131
Raffi Krikorian / ra[email protected] / 9 March 2015 Software Architecture Conference 2015 RE-ARCHITECTING ON THE FLY

Upload: raffi-krikorian

Post on 14-Jul-2015

2.783 views

Category:

Technology


5 download

TRANSCRIPT

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

RE-ARCHITECTING ON THE FLY

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

SO… MY APOLOGIES

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

I BELIEVE IN “FULL-CONTACT” PRESENTATIONS

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Re-architecting on the fly

The decision and process behind rewriting or re-architecting a system is often plagued with a series of problems: people always underestimate the complexity, people never fully understand the customers, system requirements constantly change out from under them, and, in almost all cases, it takes much longer than anybody can predict. As part of this workshop, we’ll look at a couple of case studies of re-architecture to gleam strategies of success from them as well as common pitfalls to avoid. This workshop should arm you with a framework by which to approach your own decisions around how to manage, maintain, and evolve your own systems.

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

@raffi

Raffi Krikorian VP, Platform Engineering Twitter ,Inc. [email protected]

EXPIRED

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

2009

0050 ish people

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

2014

3000 ish people

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

2014

0450 ish people

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

About

Tweets sent per second5800

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

THE EXERCISE

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

The Rules

� Break up into teams of a few people� Take the following case study � discuss� dissect� ask questions

� Play the role of architects and also engineering leads

� Volunteers to present when we’re done

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

Monorail MySQL

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Twitter already had some availability issues earlier this week, leading to a complete

outage of about 90 minutes on Wednesday and more fail whales popping up yesterday.

What we didn’t anticipate was some of the complexities that have been inherent in

fixing and optimizing our systems before and during the event.

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

…and the team?

We can’t ship things fast enough! ‘Velocity’ is going down! - Management

This code looks like crap! - Engineering

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Some hints as to what to do

� You all are not just an architects, you are engineering leaders� How do you get a plan in place?� How do you figure out your first step?� What’s the execution of the plan look like?

� Then…. what?� (Yes, this is vague. I’ll be floating around the room - ask

me questions!)

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

DO MY FORMER JOB

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

LET’S TALK

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

WHY ARE WE DOING THIS?

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Not servicing customers

� Not scaling to incoming traffic, usage, users, etc.� But also not matching in features that users want� HipChat architected for Amazon Web Services� customer demand to move it to Enterprise� lacking higher level services� lots smaller machines vs small number of bigger machines

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

It’s easier to write code than it’s to read code

We're programmers. Programmers are, in their hearts, architects, and the first thing they want to do when they get to a site is to bulldoze the place flat and build something grand. We're not excited by

incremental renovation: tinkering, improving, planting flower beds.

- Joel Spolsky

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

It’s easier to write code than it’s to read code

� Unless properly tended, real world code becomes complicated over time � energy goes into bug fixes� every week in production means the code is gathering

bandaids, & experiences

� Code reviews should be (partially) used to structure software for “readability”

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Technical debt/** * For the brave souls who get this far: You are the chosen ones,* the valiant knights of programming who toil away, without rest,* fixing our most awful code. To you, true saviors, kings of men,* I say this: never gonna give you up, never gonna let you down,* never gonna run around and desert you. Never gonna make you cry,* never gonna say goodbye. Never gonna tell a lie and hurt you.*/

http://stackoverflow.com/questions/184618/ what-is-the-best-comment-in-source-code-you-have-ever-encountered

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Technical debt// // Dear maintainer: // // Once you are done trying to 'optimize' this routine,// and have realized what a terrible mistake that was,// please increment the following counter as a warning// to the next guy: // // total_hours_wasted_here = 42 //

http://stackoverflow.com/questions/184618/ what-is-the-best-comment-in-source-code-you-have-ever-encountered

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

You haven’t paid it down

Technical debt (also known as design debt or code debt) is a recent metaphor referring to the eventual consequences of poor system design, software architecture or software development within a codebase. The debt can be thought of as work that needs to be done before a particular job can be considered complete or proper. If the debt is not repaid, then it will keep

on accumulating interest, making it hard to implement changes later on. Unaddressed technical debt increases software

entropy.

- Wikipedia

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

The causes� BUSINESS PRESSURES - the business considers getting something released sooner

before all of the necessary changes are complete. That code is shipped “unfinished”.� LACK OF PROCESS - development is not well managed. Big, long-lived, & isolated

changes are in flight & merging those changes becomes really difficult. Usually, there is a lack of test suite, which encourages quick & risky band-aids to fix bugs.

� ARCHITECTURE - modularity hasn’t been managed, & the software is not flexible enough to adapt to changes in business needs. As the requirements evolve, the code proves unwieldy & must be refactored in order to support future requirements. The longer that refactoring is delayed, & the more code is written to use the current form, the more debt that piles up that must be paid at the time the refactoring is finally done.

� LACK OF ENGINEERING MENTORSHIP - knowledge isn't shared around the organization, business efficiency suffers, or junior developers are not properly mentored. Possibly, the wrong engineers have been hired as well.

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

More, & more, & more

� Time seems to dilate� each change is taking longer than we think� each change is turning out to be harder than we think

� Each change results in a cascade of new defects� This causes your team to enter a vicious spiral

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

SOME EXAMPLE STORIESWAR

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Textmate

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

JUNE

2012

TODAY

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

History of Word

� The time is October 5, 1991� shipped award winning Mac Word 5.0� Win Word 2.0 shipped in 1991 as well with more features

� Business problem is emerging - WordPerfect is eating up part of the market

� Technical problem - Mac Word and Win Word are different codebases

� Proposed solution? Project Pyramid.

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Pyramid was cancelled� Microsoft decided that “taking a few steps back” for Pyramid would

cause them to lose to WordPerfect� New strategy, target Mac Word from the Win Word codebase� Huge problems

� Windowing is handled fundamentally differently between the operating systems

� 68K Mac OS doesn’t do memory management� compiled with a beta version of Visual C++ 2.0 (so beta that most

optimizations had to be turned off)

� In the end - Mac Word 6.0 wasn’t “Mac-like”

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Apache HTTP19

96

1997

1998

1999

2000

2001

2002

Whispers of Apache 2

Apache Week talks about filtering, & difficulty in implementation. Need

multi-threading

Huge rewrite planned for post 1.2

Decide same codebase for all releases in 2.0

Halt features in pre 2.0

2.0 alpha

SSL in 1.3 & 2.0

2.0 beta

2.0 GA

Planning in place

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

EC2 performance is sad

� Customers demand exceptional performance & always-on availability � experienced networking issues� hanging VM instances� unpredictable performance degradation (probably due to

noisy neighbors)

� Spending more time working around these issues rather than features

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Migrating SwiftType

� Nothing fundamentally wrong with the architecture, just not suitable for a zero downtime migration

� Need connectivity between EC2 and the new datacenter� Migrate data� stateless services are not a problem� choose whether the backend services are replicated or deal with

inter-datacenter latency � build custom replication services for backends that can’t do it

natively (search)

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

What happens during a rewrite?

� Business stays still or business moves on� Have to implement accrued business logic in a fraction of time� old code is used� old code is tested� lots of bugs have been found and fixed

� The old system can’t be turned off until the new system is at 100% parity (or the company agrees to turn off the old)

� This will ABSOLUTELY take a lot longer than anybody thinks!

BAD! BAD!

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

What about non-code issues?

� You’re going to gather seriously unhappy customers � external - no features!� internal - things are being held up

� Political battles within engineering� Excessive frustrations because deadlines

will almost certainly be missed

NOBODY EVER TAKES INTO

ACCOUNT THIS STUFF

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

Monorail MySQL

STORAGE & RETRIEVAL

LOGICPRESENTATIONROUTING

Redis

Memcache

Flock

T-Bird

MySQLTweet

User

Timeline

Social Graph

DMs

API

Web

Monorail

TFE

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

NEVER to do one if you can get away with it

� It will take longer than you think

� The market, product, & business will change while your development is in flight

� Existing customers will become frustrated

YOU DON’T CONTROL THE REWRITE,

IT CONTROLS YOU

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

BREAK!

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

SO, I HAVEN’T TALKED YOU OUT OF IT YET

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Deep philosophical question

� Are you better than those that came before you?� If you have the same team, there is NO GUARANTEE that

your team now will do better the second time through� If you have a different team, there is NO GUARANTEE that

your team now will do better than the last team

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

This isn’t big, right?

� How good is your documentation?� Do you even know all the corner cases?� Systems get stronger by being in production� they accumulate bug fixes, bandaids, operational

knowledge� how well do you know all those?� can you reproduce all those?

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

@timoreilly testing, testing. can you hear this?

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

@timoreilly testing, testing. can you hear this?

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

@raffi i’m trying to reach you!

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

ALL THE THINGS TO PLAN FOR

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Functionality

� Do you REALLY know what the system does?� all the corner cases of the product?� “make it do what it already does” is harder than you think

� Most programmers don’t know what to ask!� doubly true if they weren’t the original designers of the system� even if they are the original designers, no way they remember

all the corner cases� Can code serve as the spec? PROBABLY

NOT!

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Feature creep

� This is incredibly tempting, especially if feature development is halting on the old system

� It will potentially kill you

YOU TRY NOT TO DO THIS DURING REGULAR

DEVELOPMENT, SO, WHY START NOW?

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

SIMPLICITY COMPLEXITYFLEXIBILITY

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Flexibility breeds complexity

� If you try to build a system that is flexible, you’ll probably get a system that is complicated

� If you build a system that is simple, you may be able to build something that is flexible onto of it

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Aside: The Unix Pipeline

program1 | program2 | program3

� A set of processes chained by their standard streams. The output of each process (STDOUT) feeds directly as input (STDIN) to the next one

� Very simple idea evolves into component based software engineering

STDOUT

STDIN

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

The different stages of software

IRRELEVANT

“OLD SCHOOL”

MAINSTREAM

EARLY ADOPTER

IDEA TODAY

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Nothing works as expected1. TECHNOLOGY TRIGGER - proof-of-concept stories &

media interest trigger significant publicity. No usable products exist & commercial viability is unproven.

2. PEAK OF INFLATED EXPECTATIONS - some success & lots of failures. Few companies take action; many do not.

3. TROUGH OF DISILLUSIONMENT - experiments & implementations fail. Investments continue only if the surviving providers improve their products.

4. SLOPE OF ENLIGHTENMENT - instances of the technology’s benefits start to crystallize & become more widely understood. 2nd- & 3rd-gen products appear from providers. More pilots funded; conservative companies remain cautious.

5. PLATEAU OF PRODUCTIVITY - mainstream adoption starts to take off. The technology's broad market applicability & relevance are clearly paying off.

1 2 3 4 5

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

The 5 stages of grief

1. ELATION - yay! we get to throw out that crappy product! we get to start it over, & do it the right way!

2. BUCKLE DOWN - wow, there is a lot of work here.

3. OH SHIT - there really is a lot of work here. We’re never going to get it done in time.

4. EXHAUSTION - we missed our deadline. Again.

5. RELIEF - we’re out the door! But… it’s crappy. We cut corners, but, we’re done. Next time, we’re totally going to do it right.

http://www.jamesshore.com/Blog/How-to-Survive-a-Rewrite.html

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

ONE LAST TRY, BECAUSE I DON’T WANT YOU TO DO THE REWRITE!

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Ammunition against the rewrite

� One goal of a rewrite is usually to create a cleaner codebase � remember how learning all the edge cases is hard?� remember how writing code is easier than reading code?� to save time, a lot of developers cut and paste code from the

old system to the new system!

� It’s hard to create a cleaner codebase during the rewrite!

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Can we quantify this somehow?

� Can we make a more data driven decision?� Gives more confidence to the decision, and helps sell it

better to others� A rewrite is a massive investment, and its only fair to be

really sure before going down the road

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

If you don’t do anything

pstarting + (vcurrent x t)

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

If you are on a new system

pstarting + (vnew x (t - trewrite))

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

What we’re betting on

pstarting + (vcurrent x t)<

pstarting + (vnew x (t - trewrite))pstarting + (vnew x (t - trewrite))

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

What we’re betting on

� For some value of t where t > trewrite

� Variables to play with� vnew = that the new system has to be faster to iterate on� trewrite = that we need to min(time to write the new system)

vcurrent x t < vnew x (t - trewrite)

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

How do we estimate vnew

� Take the new tech for a spin

� Have a small team build something non-trivial� This will not be a hard science� gives you a sense of the extent of the software� gives you a sense of the capabilities of the team

� Have to understand maintenance costs, scalability costs

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

How do we estimate trewrite

� Given that you estimated vnew, use that to try to scope out the rewrite

� Given an estimate of trewrite, try to understand whether that t is too long� what is the state of the product now?� how much time will you lose in the business?

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

OK, I STILL HAVEN’T TALKED YOU OUT OF THIS

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Hold the line

� Product managers are going to get anxious� you’ve sold them on a great vision� they feel like you are taking too

long and blocking them

� You have to manage them (or, ignore them)

Do the smallest thing you can each step of the way

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Define “done”

� 100% feature matching is difficult

� Implementing features is hard� remember how hard it was to

write it the first time?� you’re at a different part of

the software cycle

Try to do things incrementally

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Aside: The Saturn V

� Von Braun says “German engineering dictates that you should test each part”

� Worst case situation: a fireball of 1,400’ that will burn for 35s at 2500F

� Will we make the “end of the decade”?

� George Mueller, pulled rank, and pushed for an “all up test”

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Be incremental

� All-up almost never works - the Saturn V is an exception

� Don’t be “lazy” and assume all-up is easier

do an integrated approach & ready to release at every step of the way

TFE (HTTP Proxy)

Woodstar

TFE (HTTP Proxy)

Monorail Woodstar

TFE (HTTP Proxy)

Monorail Woodstar

100% Monorail 0% Woodstar

TFE (HTTP Proxy)

Monorail Woodstar

50% Monorail 50% Woodstar

TFE (HTTP Proxy)

Monorail Woodstar

0% Monorail 100% Woodstar

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Find the starting line

� If you're going with feature parity, then do the biggest bang part of the system first

� If you can, spend a bit of time extending your runway a bit too

Drive with data, & instrument the old system to gather that data

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Twitter API

Other

Photos

Profile

Activity

Home

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Don’t ignore data!

� Your implementations may change, but your underlying data will change very slowly

� Fake or synthetic data gives you a false sense of security

Test with real data as soon as possible� get real data piped through the system� figure out how you are going to do reconciliations

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Manage tech debt better

� Try to reduce scheduled pressure

� Establish a culture of design quality� Start refactoring, continuous

design, & other code-quality practices

Partition out a portion of time to always work on technical debt

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Shy away from vanity stuff

� Don’t let the sirens drag you to a “hot new language”� Stay away from the trap of “we could do a better job

recruiting if our stack looked like…”

Do what’s right for your team and what your team can execute on

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Prepare for mounting tension

� We all know that fixing bugs and firefighting is stressful� imagine one team who has to do this, & another team

who doesn’t have to worry about it� which would you like to be on?

� Tension is going to build & people are going to be angry

Make friends, communicate, & be transparent

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Know the business� Figure out who are all the stakeholders

in the rewrite� Figure out who are the decision makers

& the ones who control your fate� they are usually not those who

complain the most� they are those who have “the

power”

Understand all the different non-technical motivations of the company

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Find your inner salesperson� You have to sell it to the business� Gather all the data

� cost savings� feature iteration� reliability� performance� stability

Focus on the data. Don't use anecdotes, but, instead, show results of experiments.

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Get ready for the politics

� You are in a precarious position� You are exposed� taking up engineering resources� not delivering new features for the

company� in an “open transaction”

Keep the in-flight work small and well integrated

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Keep an eye on code quality!

� On repeat - getting feature parity is really hard!

� To keep parity, developers, inevitably, cut & paste code from a previous system!

Have code quality metricsAPPROVED

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Get the team ready

Organizations which design systems ... are constrained to produce designs which are copies of the communication structures of these organizations

- Conway’s Law

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

I still haven’t talked you out of this

1. Hold the line

2. Define “done”

3. Incrementalism

4. Find the starting line

5. Don’t ignore data

6. Manage tech debt better

7. Stay away from vanity stuff

8. Prepare for mounting tension

9. Know the business

10.Get ready for politics

11.Key an eye on code quality

12.Get the team ready

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

LET’S RECAP!

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

The 5 stages ofgrief

1. ELATION - yay! we get to throw out that crappy product! we get to start it over, & do it the right way!

2. BUCKLE DOWN - wow, there is a lot of work here.

3. OH SHIT - there really is a lot of work here. We’re never going to get it done in time.

4. EXHAUSTION - we missed our deadline. Again.

5. RELIEF - we’re out the door! But… it’s crappy. We cut corners, but, we’re done. Next time, we’re totally going to do it right.

http://www.jamesshore.com/Blog/How-to-Survive-a-Rewrite.html

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

What we’re betting on

vcurrent x t < vnew x (t - trewrite)

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

OK, I STILL HAVEN’T TALKED YOU OUT OF THIS

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

I still haven’t talked you out of this

1. Hold the line

2. Define “done”

3. Incrementalism

4. Find the starting line

5. Don’t ignore data

6. Manage tech debt better

7. Stay away from vanity stuff

8. Prepare for mounting tension

9. Know the business

10.Get ready for politics

11.Key an eye on code quality

12.Get the team ready

Raffi Krikorian / [email protected] / 9 March 2015Software Architecture Conference 2015

THANKS! (WHEW)