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

How

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

What

A centralised back office ticketing system.

Why

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?

CRUD?

Spreadsheets

Models

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

Code..

Conclusions

Understand the why behind the problem

Appreciating good enough

Iterate

Putting the model at the heart of the problem

Facilitiate emergent design

Avoiding entropy

Have confidence to meet business demands

Intuitive

adjective

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

instinctive: his intuitive understanding of the readers' real needs

Composition

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