Ship It!

Ship it! How to do what not to do

by Ed Blackburn / @ejblackburn

Assume Nobody is stupid

WTF per minute

Never deal in binaries

This code is awesome. This code is CRAP!

When is a product done?

When all the features are complete?

When we run out of money?

What if the market changes?

What if the tech eco system changes?

What if a competitor improves?

We may pause. But are we ever done?

WCF, Windows Live Writer

Focus on the right areas

Transport for London (Tfl)

Future Ticketing Programme

Part of a ticketing modernisation programme


Sending card taps to a back office affords the organisation to centralise behaviour and move hardware costs from the gates to the cloud.


A centralised back office ticketing system.


Permit high throughput cheap travel.

"Every journey matters"

Core Domain

What differentiates an organisation from their competitors, what is their USP?

This is where we tend to concentrate our efforts to best support an organisation to give it a competitive advantage.

Sub Domain

Supporting the core domains. Commodity business process like invoicing, CRM, ERP.

Shoehorning Behaviour

Where to put that magic source?

Does your domain require a hi-tech solution?




What is a fat model, skinny controller, what is an anemic domain? Do we care? Yes. Why?



Understand the why behind the problem

Appreciating good enough


Putting the model at the heart of the problem

Facilitiate emergent design

Avoiding entropy

Have confidence to meet business demands



Using or based on what one feels to be true even without conscious reasoning;

instinctive: his intuitive understanding of the readers' real needs


Composition is explicit. Explicit code is more intuitive.

Abstractions require more reasoning and are not always intuitive

Never use an abstract class for code re-use