Post on 15-Jan-2015
description
transcript
Falling in Love withTechnical Debt
@rjrodger
senecajs.org
Tuesday 5 November 2013
How did theRomans do
Long Division?Tuesday 5 November 2013
LXXII MMMDCXIIL rem XII
Tuesday 5 November 2013
How did theRomans doAddition?
Tuesday 5 November 2013
IV + XI = ?
Tuesday 5 November 2013
1. Normalize: IV → IIII2. Concatenate: IIII + XI → IIIIXI3. Sort, descending: IIIIXI → XIIIII4. Reduce: XIIIII → XV
IV + XI = ?
Tuesday 5 November 2013
How did theRomans do
Subtraction?Tuesday 5 November 2013
XXIV - XV = ?
Tuesday 5 November 2013
1. Normalize: XXIV → XXIIII2. Eliminate: XXIIII - XV → XIIII - V3. Expand: XIIII - V → VIIIIIIIII - V4. Repeat 2 and 3 until no moves left5. Reduce: IIIIIIIII → IX
XXIV - XV = ?
Tuesday 5 November 2013
How did theRomans do
Multiplication?Tuesday 5 November 2013
III × VI = ?
Tuesday 5 November 2013
III × VI = ?bit shifting
Tuesday 5 November 2013
III → 3VI → 6 → 110
III × VI = ?bit shifting
Tuesday 5 November 2013
III → 3VI → 6 → 110
III × VI = ?
3 × 001 × 0 = 03 × 010 × 1 = 63 × 100 × 1 = 12 18
bit shifting
Tuesday 5 November 2013
III → 3VI → 6 → 110
III × VI = ?
3 × 001 × 0 = 03 × 010 × 1 = 63 × 100 × 1 = 12 18
bit shifting
Tuesday 5 November 2013
III → 3VI → 6 → 110
III × VI = ?
3 × 001 × 0 = 03 × 010 × 1 = 63 × 100 × 1 = 12 18
bit shifting
Tuesday 5 November 2013
How did theRomans doDivision?
Tuesday 5 November 2013
Tuesday 5 November 2013
they didn't
Tuesday 5 November 2013
Tuesday 5 November 2013
Roman Numerals have
Technical DebtTuesday 5 November 2013
http://akvo.org/blog/the-ball-of-mud-transition/
Tuesday 5 November 2013
Tuesday 5 November 2013
The JavaScript Date Object
var today = new Date( 2013, 10, 30)console.log(today)
Sat Nov 30 2013 00:00:00 GMT+0000
Tuesday 5 November 2013
Not allTechnical Debt
is created equalTuesday 5 November 2013
"A good plan, violently executed now,is better than a perfect plan next week."
Intentional
Tuesday 5 November 2013
Unintentional
Tuesday 5 November 2013
Inherent
Tuesday 5 November 2013
Incidental
Tuesday 5 November 2013
2x2 Matrix!
deliberate choice live with it
you are a bad person
unknown unknowns
intentional
unintentional
incidental inherent
Tuesday 5 November 2013
Tuesday 5 November 2013
Tuesday 5 November 2013
Tuesday 5 November 2013
NTSC 1941 Standard:
Black+White onlySignal encodes BrightnessEach Channel gets 6Mhz
Happy Days!
Tuesday 5 November 2013
Color TelevisionThree Colors: Red, Green, Blue
Each Color needs 3MhzYou only have 6Mhzand you need 9Mhz!
Technical Debt FTW
Tuesday 5 November 2013
You can't Break theold Black+White TVs
Tuesday 5 November 2013
We must send the old brightness signal
White Light =30% Red
59% Green11% Blue
Send White, Red and Blue
Tuesday 5 November 2013
You need to embed the color signals inside
the brightness signal
Tuesday 5 November 2013
Color TV circuits aremore complicated
than they should be.
Tuesday 5 November 2013
How do you ReduceTechnical Debt?
Tuesday 5 November 2013
Things thatDon't Work
Tuesday 5 November 2013
Unit Testing(or any other sort)
Tuesday 5 November 2013
Objects
Tuesday 5 November 2013
Design
Tuesday 5 November 2013
Process
Tuesday 5 November 2013
Mitigation As Good as it Gets
Tuesday 5 November 2013
Conform
Tuesday 5 November 2013
Rebel
Tuesday 5 November 2013
Evolve
Tuesday 5 November 2013
•Do one job•Death is natural•Use messages
•Really small
Cells
Tuesday 5 November 2013
•Do one job•Death is natural•Use messages
•Really small
Micro Services•One feature•kill and restart•No shared state
•100 lines of code
Tuesday 5 November 2013
ExamplesUser Data
Encrypt Password
Image Resize
SendEmail
Business Rule
Monitor
ParseFormat
Tuesday 5 November 2013
how do you route messages?
Pattern MatchingTuesday 5 November 2013
// load a user's data by name{ user:"load", name:"alice" }
// login user - load and check password{ user:"login", name:"alice", pass:"123"}
The user Service
some messages
github.com/rjrodger/websummit2013senecajs.org
Tuesday 5 November 2013
var users = { alice: {name:"alice", pass:"123"}, bob: {name:"bob", pass:"abc"},}
function user_load( args, done ) { // callback( err, result ) done( null, users[args.name] ) }
user_load action
Tuesday 5 November 2013
function user_login( args, done ) { user_load( { name:args.name }, function(err,user){ if( err || !user ) return done(err);
if( user.pass == args.pass ) return done( null, user );
return done(); })}
user_login action
Tuesday 5 November 2013
require("seneca")() .add({ user:"load" }, user_load) .add({ user:"login" }, user_login) .listen(8000)
$ node user.js
$ curl "http://localhost:8000/act ? user=login & name=alice & pass=123"
{ "name":"alice", "pass":"123" }
Run user Service using Seneca
Tuesday 5 November 2013
•Easy to change - just rewrite!•Easy to scale - run more instances•Easy to reason about - just messages•Easy to make robust - kill and restart!•Easy to build - natural units of work
What Happens?
Tuesday 5 November 2013
Technical Debt?lower interest rate!
See github forscaling and adapting
github.com/rjrodger/websummit2013senecajs.org
Tuesday 5 November 2013
•Java: twitter.github.io/finagle•Ruby: sinatrarb.com•Node: senecajs.org
Try this at Home!
Tuesday 5 November 2013
Technical Debt•overwhelms every other factor•should drive your architecture•can be mitigated with awareness
Tuesday 5 November 2013
Tuesday 5 November 2013
Thank You!@rjrodger
senecajs.org
Tuesday 5 November 2013