Make the BIG Change

(One SMALL Change at a Time)

Chris Geihsler

@seejee

picture of me covered in cats

Hi, I'm Chris

BIG changes are HARD 

SOFTWARE is CRUFTY 

CHANGE it SAFELY 

ONE

COOL

TRICK

TELL a STORY 

TRY something NEW 

3 million STUDENTS

ROSTERS change

HARD problem

MANUAL entry

picture of someone at a keyboard

BULK upload

picture of excel or something

2013

+

PROBLEM?

120,000

picture of meagan from support looking sad

GOAL

Drastically reduce Clever-related support burden.

DESIGN cruft

TAKEAWAY

Protect your data from 3rd party integrations.

SOLUTION

Know what a Clever sync will change without making any changes.

SYNC

CODE cruft

GOAL

Lay the foundation for future integrations.

PHASE 0:

High Level Plan

explain high level plan

 

Clever -> Sync -> Actions -> TTM Database

INCREMENTAL

or

REWRITE?

YOUR PROCESS

TAKEAWAY

Tune your process to enable lots of small, isolated changes.

5 PHASES

5-10 PRs/PHASE

TAKEAWAY

Planning is more important than the plan itself.

TAKEAWAY

Big changes are easier when your stakeholders buy-in.

PHASE 1:

Extract and Isolate

show student model with line numbers that are huge

 

show same code from before moving into a Sync::Clever::Student.sync

TAKEAWAY

Complexity becomes apparent when code is in small, isolated pieces.

TAKEAWAY

You can't fix everything.

PHASE 1:

5 Pull Requests

~ 4 weeks

PHASE 2:

Split Decisions from Actions

if classroom.include?(student)

classroom.students << student

if classroom.include?(student)

actions << AddStudentToClassroom.new

show actions being returned from sync object and immediately being invoked

PHASE 2:

7 Pull Requests

~ 3 weeks

PHASE 3:

Serialize Actions

show the anatomy of a few actions

show generating a series of actions and then immediately invoking them

TAKEAWAY

Interim states won't be ideal. That's OK.

PHASE 3:

3 Pull Requests

~ 2 weeks

PHASE 4:

Defer Actions

show example where we add students to a classroom

 

talk about how we have to associate things that don't exist yet

talk about EntityRef

show a diagram of TTM State + pending actions = new state

show code again, and point out that this is the proposed state as a function of the other pending actions

 

talk about the example of a student moving to another school in this pending batch

TAKEAWAY

Treating mutations as data has lots of cool benefits.

PHASE 4:

7 Pull Requests

~ 4 weeks

PHASE 5:

Decouple from Clever

intermediate data format

PHASE 5:

2 Pull Requests

~ 1 week

PHASE 6:

Implement new CSV format

PHASE 5:

4 Pull Requests

~ 2 week

FUTURE:

Implement OneRoster

FUTURE:

Undo

TESTING

TAKEAWAY

Refactor your tests as aggressively as your production code.

TAKEAWAY

Consider deleting tests that provide minimal value.

TEAM

picture of joel, manda, and sara

TAKEAWAY

Diverse teams make better products.

show pretty dry run screenshots

MORE CAPABLE

MAINTAINBLE

EXTENSIBLE

TAKEAWAY

When you know your domain well, it's OK not to be idiomatic.

CONQUER your CRUFT

TELL us a STORY 

THANKS!

Chris Geihsler

@seejee

make the big change - old

By Chris Geihsler

make the big change - old

  • 1,304