the not so-big software design

61
Good morning wroc_love.rb! 1 Tuesday, 12 March, 13

Upload: raganwald

Post on 19-May-2015

509 views

Category:

Documents


0 download

DESCRIPTION

Opening keynote for 2013 wroc_love.rb, Wrocław, Poland.

TRANSCRIPT

Page 1: The not so-big software design

Good morning wroc_love.rb!

1

Tuesday, 12 March, 13

Page 2: The not so-big software design

The reputation of a speaker varies with the square of the distance travelled to speak.

2

Tuesday, 12 March, 13

Page 3: The not so-big software design

The reputation of a speaker varies with the square of the distance travelled to speak.

2

Tuesday, 12 March, 13

Page 4: The not so-big software design

3

the preamble...

Tuesday, 12 March, 13

Page 5: The not so-big software design

THE NOT-SO-BIG HOUSE4

Tuesday, 12 March, 13

Page 6: The not so-big software design

Sarah Susanka

• Residential Architect

• Author, "The Not-So-Big-House" and "The Not-So-Big Life" amongst others

5

Tuesday, 12 March, 13

Page 7: The not so-big software design

6

THE NOT-SO-BIG HOUSEPart I: The Problem

Tuesday, 12 March, 13

Page 8: The not so-big software design

What is "Not-So-Big?"

• Single family dwellings

• Emphasis on what is unique to each owner

• Form follows functionality

• Says "no" to popular conception of value: 2,400 sq. ft. for the price of 4,000

7

Tuesday, 12 March, 13

Page 9: The not so-big software design

2,400 sq. ft. for the price of 4,000!?

Why?

8

Tuesday, 12 March, 13

Page 10: The not so-big software design

9

Tuesday, 12 March, 13

Page 11: The not so-big software design

The Big House

• 4,000 sq. ft. or more.

• Vaulted and double-height spaces

• Boxes for people

• Large footprints on small lots

10

Tuesday, 12 March, 13

Page 12: The not so-big software design

The Economics of Big Houses

• Mass produced, limited customization

• Corners cost money

• Do not require domain knowledge by the builder

• Nothing in their work or work products reflects the homeowner except the name on the cheque

11

Tuesday, 12 March, 13

Page 13: The not so-big software design

12

What problem do big houses solve?

Tuesday, 12 March, 13

Page 14: The not so-big software design

13

Tuesday, 12 March, 13

Page 15: The not so-big software design

13

Tuesday, 12 March, 13

Page 16: The not so-big software design

How do you sell a house to someone who doesn't know what they need?

• Most home buyers don't understand their own needs now or as they are likely to evolve

• Most home buyers don't understand how homes function

14

Tuesday, 12 March, 13

Page 17: The not so-big software design

15

most home buyers are uncertain

Tuesday, 12 March, 13

Page 18: The not so-big software design

16

uncertainty creates fear

Tuesday, 12 March, 13

Page 19: The not so-big software design

17

fearful people cling to the simple and obvious

Tuesday, 12 March, 13

Page 20: The not so-big software design

18

Selling homes by volume is about as simple and as obvious as you can get.

Tuesday, 12 March, 13

Page 21: The not so-big software design

The result? Under- or poorly- designed homes

• We are impressed by high ceilings, but feel safer in smaller spaces.

• Big homes have rarely used rooms.

• The default is for big homes to skip functionality we actually use, like built-in storage or pocket doors.*

19

Tuesday, 12 March, 13

Page 22: The not so-big software design

The problem with Big Homes:They don't serve their owners' needs

20

But they persist, because that's what sells to people who have little understanding of their own needs, and little experience with

how homes function.

Tuesday, 12 March, 13

Page 23: The not so-big software design

21

and now to the main event...

Tuesday, 12 March, 13

Page 24: The not so-big software design

THE NOT-SO-BIG SOFTWARE DESIGN

22

Tuesday, 12 March, 13

Page 25: The not so-big software design

23

THE NOT-SO-BIGSOFTWARE DESIGN

Part I: The Problem

Tuesday, 12 March, 13

Page 26: The not so-big software design

What is "Not-So-Big?"

• SMB and departmental applications

• Emphasis on what is unique to each application

• Form follows domain functionality

• Says "no" to popular conception of value: The default arrangement of components

24

Tuesday, 12 March, 13

Page 27: The not so-big software design

No standard arrangement?

Why?

25

Tuesday, 12 March, 13

Page 28: The not so-big software design

The Big Framework

• Designed for mass production and mass consumption

• Boxes for components

26

Tuesday, 12 March, 13

Page 29: The not so-big software design

The Economics of Big Frameworks

• Limited menu of choices

• Easy on-ramp for new developers

• Domain-free design creates the illusion of portable skills

• Very little in their work or work products reflects the customer except the name on the cheque

27

Tuesday, 12 March, 13

Page 30: The not so-big software design

28

What problem do big frameworks solve?

Tuesday, 12 March, 13

Page 31: The not so-big software design

How do you get started quickly with a new project?

• The domain is not fully understood at the beginning of a project, but a domain-agnostic framework doesn't "care.".

• Reusing the same framework over and over again allows reuse of skills and experience... with the framework.

29

Tuesday, 12 March, 13

Page 32: The not so-big software design

Frameworks are chosen early

• Minimum knowledge

• Maximum uncertainty

30

Tuesday, 12 March, 13

Page 33: The not so-big software design

31

developers are uncertain

Tuesday, 12 March, 13

Page 34: The not so-big software design

32

uncertainty creates fear

Tuesday, 12 March, 13

Page 35: The not so-big software design

33

fearful people cling to the simple and obvious

Tuesday, 12 March, 13

Page 36: The not so-big software design

34

Organizing software around"the things you know you'll need"is about as simple and as obvious

as you can get.

Tuesday, 12 March, 13

Page 37: The not so-big software design

Is The Result Poorly Designed Software?

35

Tuesday, 12 March, 13

Page 38: The not so-big software design

Is The Result Poorly Designed Software?

35

...exempla gratia...

Tuesday, 12 March, 13

Page 39: The not so-big software design

A 1962 VW Camper Van

36

Tuesday, 12 March, 13

Page 40: The not so-big software design

A 1962 VW Camper Van

36

Tuesday, 12 March, 13

Page 41: The not so-big software design

A 1962 VW Camper Van

36

Tuesday, 12 March, 13

Page 42: The not so-big software design

Is the result poorly-designed software?

• If I look at the lists of models, controllers, views, assets, configuration files, migrations, and so forth, can I tell what it is supposed to do?

• Great, there are more than a thousand tests. Why are the tests that describe what it it supposed to do completely decoupled from the code that does it?

• We build once but change and fix for years. Are we optimizing for the thing that's easy to sell?

37

Tuesday, 12 March, 13

Page 43: The not so-big software design

The problem with Big Homes:They don't serve their owners' needs

38

But they persist, because that's what sells to people who have little understanding of their own needs, and little experience with

how homes function.

Tuesday, 12 March, 13

Page 44: The not so-big software design

The problem with Big Homes:They don't serve their owners' needs

38

Big Frameworks

But they persist, because that's what sells. Our job is to discard the habits that served

us well when we were learning, and develop new habits that put us first and

the framework second.

Tuesday, 12 March, 13

Page 45: The not so-big software design

A Not-So-Big Home

39

Tuesday, 12 March, 13

Page 46: The not so-big software design

40

THE NOT-SO-BIGSOFTWARE DESIGN

Part II: Good Habits

Tuesday, 12 March, 13

Page 47: The not so-big software design

Problem: By default, code gives all use cases equal weight

• If you only entertain formally twice a year, why would your formal dining room take up more space and more mindshare than the eat-in nook in the kitchen?

41

Tuesday, 12 March, 13

Page 48: The not so-big software design

Accommodating how you actually live, not how you pretend to live.

42

Tuesday, 12 March, 13

Page 49: The not so-big software design

Less frequent use cases are hidden away

43

Tuesday, 12 March, 13

Page 50: The not so-big software design

Hide the necessary but infrequent or unimportant

• Make heavy use of AOP-ish filters, monkey-patching, method decorators, modules, and other tools so that classes and methods are light in the editor even if they're heavy in the runtime.

• Push grunt-work into gems.

• Consider using "The Williams Style" for implementation concerns

44

Tuesday, 12 March, 13

Page 51: The not so-big software design

Problem: All the bathrooms on one floor, all the bedrooms on another

45

Tuesday, 12 March, 13

Page 52: The not so-big software design

Problem: All the bathrooms on one floor, all the bedrooms on another

45

Tuesday, 12 March, 13

Page 53: The not so-big software design

Organize code by use, not by type

• Frameworks like Rails have a default organization, but they can be configured to put things wherever you want.

• Make heavy use of modules to namespace code and also to put like code with like.

• Cultivate a "refined taste."

46

Tuesday, 12 March, 13

Page 54: The not so-big software design

Problem: Documentation

47

"Documentation is like term insurance: It satisfies because almost no one who subscribes

to it depends on its benefits."--Alan J. Perlis

Tuesday, 12 March, 13

Page 55: The not so-big software design

Problem: Documentation

48

This space about documenting implementation code left intentionally blank.

Tuesday, 12 March, 13

Page 56: The not so-big software design

Use maximally literate test code

• Embed specs, test cases, and other vegetative artefacts within marked up documentation using Literate CoffeeScript, Docco, or other similar tools.

• Building your docs should be part of your deploy.

• Your literate test code must be read and re-read to be worthwhile.

49

Tuesday, 12 March, 13

Page 57: The not so-big software design

50

Tuesday, 12 March, 13

Page 58: The not so-big software design

Three Not-So-Big Habits

• Hide or de-emphasize the infrequent or unimportant

• Organize code by use, not type

• Write maximally literate test code

51

Tuesday, 12 March, 13

Page 59: The not so-big software design

The Message

• Our needs at the start of our experience with a framework or project should not dominate our choices

• Good design emphasizes what is frequent and important in houses, UX, and software design

• You are an important user. Design with you in mind.

52

Tuesday, 12 March, 13

Page 60: The not so-big software design

Dziękuję bardzo!

53

"It is easier to write an incorrect program than understand a correct one."--Alan J. Perlis

Tuesday, 12 March, 13

Page 61: The not so-big software design

reg braithwaitehttp://braythwayt.com

54

Tuesday, 12 March, 13