156
Beam me up, Scotty! Rails for the “Enterprise” Rick Bradley Charles Johnson Project Manager Director, IS Applications Centerstone Centerstone 1

Beam me up, Scotty!

Embed Size (px)

DESCRIPTION

 

Citation preview

Page 1: Beam me up, Scotty!

Beam me up, Scotty!

Rails for the “Enterprise”

Rick BradleyCharles JohnsonProject ManagerDirector, IS Applications

Centerstone Centerstone

1

Page 2: Beam me up, Scotty!

What Enterprise?

2

Page 3: Beam me up, Scotty!

What Enterprise?• Enterprise system?

2

Page 4: Beam me up, Scotty!

What Enterprise?• Enterprise system?

•Enterprise software?

2

Page 5: Beam me up, Scotty!

What Enterprise?• Enterprise system?

•Enterprise software?

•Enterprise platform?

2

Page 6: Beam me up, Scotty!

Centerstone Enterprise

3

Page 7: Beam me up, Scotty!

Centerstone Enterprise

• 25 Counties

3

Page 8: Beam me up, Scotty!

Centerstone Enterprise

• 25 Counties • 150 Locations

3

Page 9: Beam me up, Scotty!

Centerstone Enterprise

• 25 Counties • 150 Locations

• 40,000 Clients

3

Page 10: Beam me up, Scotty!

Centerstone Enterprise

• 25 Counties • 150 Locations

• 40,000 Clients • 1,100 Staff

3

Page 11: Beam me up, Scotty!

Centerstone Enterprise

• 25 Counties • 150 Locations

• 40,000 Clients • 1,100 Staff

• Comprehensive Electronic Record

3

Page 12: Beam me up, Scotty!

Centerstone Enterprise

DimensionRequirements

4

Page 13: Beam me up, Scotty!

Centerstone Enterprise

Dimension

Available & Reliable

Requirements

4

Page 14: Beam me up, Scotty!

Centerstone Enterprise

Dimension

Available & Reliable • All the time

Requirements

4

Page 15: Beam me up, Scotty!

Centerstone Enterprise

Dimension

Available & Reliable • All the time

Accessible

Requirements

4

Page 16: Beam me up, Scotty!

Centerstone Enterprise

Dimension

Available & Reliable • All the time

Accessible • Everywhere

Requirements

4

Page 17: Beam me up, Scotty!

Centerstone Enterprise

Dimension

Available & Reliable • All the time

Accessible • Everywhere

Scalable

Requirements

4

Page 18: Beam me up, Scotty!

Centerstone Enterprise

Dimension

Available & Reliable • All the time

Accessible • Everywhere

Scalable • 300 to 9000 users

Requirements

4

Page 19: Beam me up, Scotty!

Centerstone Enterprise

Requirements Dimension

5

Page 20: Beam me up, Scotty!

Centerstone Enterprise

Maintenance

Requirements Dimension

5

Page 21: Beam me up, Scotty!

Centerstone Enterprise

Maintenance • Invisible

Requirements Dimension

5

Page 22: Beam me up, Scotty!

Centerstone Enterprise

Maintenance • Invisible

Management

Requirements Dimension

5

Page 23: Beam me up, Scotty!

Centerstone Enterprise

Maintenance • Invisible

Management • Central

Requirements Dimension

5

Page 24: Beam me up, Scotty!

Centerstone Enterprise

Maintenance • Invisible

Management • Central

Agnostic

Requirements Dimension

5

Page 25: Beam me up, Scotty!

Centerstone Enterprise

Maintenance • Invisible

Management • Central

Agnostic• Hardware

Requirements Dimension

5

Page 26: Beam me up, Scotty!

Centerstone Enterprise

Maintenance • Invisible

Management • Central

Agnostic• Hardware

• Database

Requirements Dimension

5

Page 27: Beam me up, Scotty!

“Enterprise”

6

Page 28: Beam me up, Scotty!

“Big”

7

Page 29: Beam me up, Scotty!

Bureaucratic

8

Page 30: Beam me up, Scotty!

SOA

9

Page 31: Beam me up, Scotty!

SOL

10

Page 32: Beam me up, Scotty!

Vendor-driven definition -- the true source of the term “Enterprise”.

11

Page 33: Beam me up, Scotty!

Java, XML, RDF... EJB3.0, J2EE, JUnit... Hibernate + XDoclet

... n-phase commit... RMI, XML-RPC, WSDL

... JMX, JAXL, SASL, CORBA... WOTA, FRXN, JOKE

Vendor-driven definition -- the true source of the term “Enterprise”.

11

Page 34: Beam me up, Scotty!

12

Page 35: Beam me up, Scotty!

Aggressive!

-- with sincerest apologies to the creators of “Bunk and Rambling”...

12

Page 36: Beam me up, Scotty!

Inverted

We don’t use the Internet to track down a market for our product.

We have a fixed market for whom we build a new product.

13

Page 37: Beam me up, Scotty!

ExistingUnlike “green field” applications,

“Enterprise” applications fight the ills of the organization at least as much as

technical hurdles.

14

Page 38: Beam me up, Scotty!

Stubborn

Changing business processes (even horrid ones) can be very difficult.

15

Page 39: Beam me up, Scotty!

@#$%!

Rick’s First Rule of Enterpriseyness:

Any sufficiently large system left at rest in any sufficiently @#$%!-ed up

environment will decay into a stack of electronic post-it notes.

16

Page 40: Beam me up, Scotty!

Start

17

Page 41: Beam me up, Scotty!

small team

+

18

Page 42: Beam me up, Scotty!

isolated offices

-

19

Page 43: Beam me up, Scotty!

open source open minds

+

20

Page 44: Beam me up, Scotty!

Big Design Up Front

-

21

Page 45: Beam me up, Scotty!

non-profit

+

22

Page 46: Beam me up, Scotty!

for-profit “collaborator”

-

23

Page 47: Beam me up, Scotty!

web + DB experience

+

24

Page 48: Beam me up, Scotty!

Java + Oracle

-

25

Page 49: Beam me up, Scotty!

support from the Penthouse

+

26

Page 50: Beam me up, Scotty!

widely distributed “customers”

-

27

Page 51: Beam me up, Scotty!

camaraderie

+

28

Page 52: Beam me up, Scotty!

bad legacy habits...

-

29

Page 53: Beam me up, Scotty!

no unit tests,no functional tests,no automated tests,no automated build.

-

30

Page 54: Beam me up, Scotty!

Goal

31

Page 55: Beam me up, Scotty!

agility

+

small milestones, story-driven design, refactoring, pairing, few meetings, ...

32

Page 56: Beam me up, Scotty!

domaindriven design

+

in some ways we have to be careful not to end up BDUF. This can be meshed with “Getting Real” and TDD/BDD if done carefully. “Shared Domain Language” is critical. Avoid “too much talk, too little code.”

33

Page 57: Beam me up, Scotty!

solid testing

+

34

Page 58: Beam me up, Scotty!

reproducibility

+

continous integration, one-word builds, automated deployments, automated upgrades and rollbacks, nightly data conversions, etc.

35

Page 59: Beam me up, Scotty!

scalability&

portability

+

“Share Nothing” horizontal scalability, lightweight software, fast commodity hardware; database agnosticism, browser agnosticism.

36

Page 60: Beam me up, Scotty!

launch bonus:a basket full of psychotropics.

+++!!!

37

Page 61: Beam me up, Scotty!

legacy system

250,000+ lines of embedded “thedailywtf”-compliant

Oracle PLSQL code

38

Page 62: Beam me up, Scotty!

java system

JBoss, Struts, JSP, Hibernate, EJB3 (draft), JUnit, Ant, CruiseControl, ...

39

Page 64: Beam me up, Scotty!

41

Page 65: Beam me up, Scotty!

rails transition

20+ : 1 code reduction25+ : 1 “stuff” reduction

41

Page 66: Beam me up, Scotty!

42

Page 67: Beam me up, Scotty!

rails transition

8:1 reduction in books© Darrin Weissinger ([email protected])

42

Page 68: Beam me up, Scotty!

rails today+----------------------+-------+-------+---------+---------+-----+-------+| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |+----------------------+-------+-------+---------+---------+-----+-------+| Helpers | 385 | 227 | 0 | 29 | 0 | 5 || Controllers | 989 | 593 | 19 | 64 | 3 | 7 || Components | 0 | 0 | 0 | 0 | 0 | 0 || Functional tests | 1110 | 815 | 31 | 117 | 3 | 4 || Models | 1418 | 508 | 56 | 47 | 0 | 8 || Unit tests | 2218 | 1407 | 49 | 213 | 4 | 4 || Libraries | 0 | 0 | 0 | 0 | 0 | 0 || Integration tests | 42 | 33 | 2 | 5 | 2 | 4 |+----------------------+-------+-------+---------+---------+-----+-------+| Total | 6162 | 3583 | 157 | 475 | 3 | 5 |+----------------------+-------+-------+---------+---------+-----+-------+

Code LOC: 1328 Test LOC: 2255 Code to Test Ratio: 1:1.7

43

Page 69: Beam me up, Scotty!

Techniques

44

Page 70: Beam me up, Scotty!

domaindrivendesign

45

Page 71: Beam me up, Scotty!

party, accountability, observation, phenomenon, measurement, plan, action,

specification, time ranges, ...

analysis patterns

46

Page 72: Beam me up, Scotty!

47

try to burn a little time here... talk about how finding “Analysis Patterns” was such a useful discovery, having gotten to meet Martin was a real boon to us, even exchanged some emails. Keeping Martin Fowler at the core of the system ended up being really beneficial to us.

Page 73: Beam me up, Scotty!

database “agnosticism”

...any database, as long as it’s Oracle or Postgres

48

to paraphrase Henry Ford: ....; Actually we may support SQLServer. We simply need to have an ACID db, with standard SQL support, with support for constraints and triggers sufficient to perform auditing.

Page 74: Beam me up, Scotty!

49

Page 75: Beam me up, Scotty!

50

Page 76: Beam me up, Scotty!

51

Page 77: Beam me up, Scotty!

searching

52

searchable_models plugin provides the ‘searchable’ DSL as well as a search controller, and a helper to let you put simple searches anywhere for any class.

Page 78: Beam me up, Scotty!

53

Page 79: Beam me up, Scotty!

Graphs

53

Page 80: Beam me up, Scotty!

Graphs

53

Page 81: Beam me up, Scotty!

stories

54

Page 82: Beam me up, Scotty!

55

Page 83: Beam me up, Scotty!

Form mocking

55

Page 84: Beam me up, Scotty!

Form mocking

55

Page 85: Beam me up, Scotty!

Form mocking

55

Page 86: Beam me up, Scotty!

ActiveRecord magic

56

Page 87: Beam me up, Scotty!

Level 0 - No auditing.

Level 1 - Read-only. Audit creation.

Level 2 - No deletion. Audit creation, changes.

Level 3 - Archive all changes and deletions.

auditing

57

Page 88: Beam me up, Scotty!

58

Page 89: Beam me up, Scotty!

foreign key extensions

59

Page 90: Beam me up, Scotty!

acts_as_date_range

60

Page 91: Beam me up, Scotty!

USPScounty, state, ZIP modelsCD-ROM import scripts

61

Page 92: Beam me up, Scotty!

Pitfalls

62

Page 93: Beam me up, Scotty!

N. I. H.syndrome

63

Refusing to use good code simply because it wasn’t written by us. With Ruby sometimes it /is/ faster to write it ones self than use a plugin. Fortunately, as the plugin space has matured this has become less of an issue for us.

Page 94: Beam me up, Scotty!

I. H.syndrome

64feeling compelled to write a bit of functionality. when someone else, two weeks later, releases a plugin for the same thing, feeling compelled to adopt it. Also, overturning homegrown methodologies to do things The Rails Way. Contrast: moving from homegrown Login to Acts_as_authenticated-generated homegrown login with moving from SQL table scripts to Migrations.

Page 95: Beam me up, Scotty!

CTI

65

In implementing Fowler’s “Party” and “Accountability” patterns, we attempted to use Class Table Inheritance with Rails. Getting inherited behavior, much less cross-database, was a nightmare.

Page 96: Beam me up, Scotty!

parties in class table inheritance

66

Page 97: Beam me up, Scotty!

parties in single table inheritance

67Downsides: we still have report writers, outside processes working against database. Makes it difficult to allow access to some identifying data (for example, staff data) without giving access to client data. We were planning on using exports to reporting database anyway, but this requires us to think more carefully about views, etc., to control reporting access.

Attempts at CTI failed -- while possible to get the database semantics correct, synchronizing the separate tables (esp. efficiently, was a nightmare -- esp. database independent). We shared common methods with a module, but still hackish.

Page 98: Beam me up, Scotty!

Bleeding Edge

68

In a number of areas we were able to identify just whose blood was on the bleeding edge.

Page 99: Beam me up, Scotty!

Oracle

-

69performance issues, primary key names, performance, adding/removing constraints, testing with constraints, synonyms, Windows-only/Oracle-only date problem, etc.

Nearly all the oracle people you find want to show you how cool they are by writing a bunch of non-portable Oracle crap, half of which doesn’t work half as well as half of them think. As for standards-compliance and ease of use, Oracle blows.

Page 100: Beam me up, Scotty!

70

here’s a fun one: oracle 10g, with rails running on Windows, can’t store dates prior to the UNIX(!) epoch.

Page 101: Beam me up, Scotty!

monkey-patching

+

71

Page 102: Beam me up, Scotty!

72

Page 103: Beam me up, Scotty!

great upstream

+

73

when we wrote a ticket, sent in a patch, we dealt directly (and immediately) with the maintainers of those functional areas. When the patch landed and we pulled edge or a new release, we just removed our monkey-patch.

Page 104: Beam me up, Scotty!

plugins

+

74

Now, instead of monkey-patching, we refactor fixes to plugins, which are a clean point of change and which can be easily removed when patches land in trunk.

Page 105: Beam me up, Scotty!

Maximum Rateof Change

75

Page 106: Beam me up, Scotty!

<

76

Less than the maximal rate of change? The obvious risk would be that the change by the target date would be less than ideal. The real risk is that without an aggressive change rate, NO real change would take place.

Page 107: Beam me up, Scotty!

>

77

Faster than maximal? You risk confusing the team members, failing to provide enough stability to allow progress. Worse, you may awaken politically entrenched opponents who will cause harm to the project.

Page 108: Beam me up, Scotty!

78

Page 109: Beam me up, Scotty!

time

suckage

good

age

78

Page 110: Beam me up, Scotty!

Oracle time

suckage

good

age

78

Page 111: Beam me up, Scotty!

Oracle time

suckage

good

age

Big Design Up Front

78

Page 112: Beam me up, Scotty!

Oracle time

suckage

good

age

Big Design Up Front

“deployments”

78

Page 113: Beam me up, Scotty!

Oracle time

suckage

good

age

Big Design Up Front

for-profit partner

“deployments”

78

Page 114: Beam me up, Scotty!

Oracle

Java

time

suckage

good

age

Big Design Up Front

for-profit partner

“deployments”

78

Page 115: Beam me up, Scotty!

Oracle

Java

cvs

time

suckage

good

age

Big Design Up Front

for-profit partner

“deployments”

78

Page 116: Beam me up, Scotty!

Oracle

Java

cvs

time

suckage

good

age

SQL schemae

Big Design Up Front

for-profit partner

“deployments”

78

Page 117: Beam me up, Scotty!

Oracle

Java

cvs

JBoss

time

suckage

good

age

SQL schemae

Big Design Up Front

for-profit partner

“deployments”

78

Page 118: Beam me up, Scotty!

Oracle

Java

cvsPostgres

JBoss

time

suckage

good

age

SQL schemae

Big Design Up Front

for-profit partner

“deployments”

78

Page 119: Beam me up, Scotty!

Oracle

Java

cvsPostgres

JBoss

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

for-profit partner

“deployments”

78

Page 120: Beam me up, Scotty!

Oracle

Java

svn

Postgres

JBoss

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

for-profit partner

“deployments”

78

Page 121: Beam me up, Scotty!

Oracle

Java

svn

Postgres

Ant

JBoss

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

for-profit partner

“deployments”

78

Page 122: Beam me up, Scotty!

Oracle

Java

svn

Postgres

Ant

JBoss

EJB3.0

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

for-profit partner

“deployments”

78

Page 123: Beam me up, Scotty!

Oracle

Java

svn trac

Postgres

Ant

JBoss

EJB3.0

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

assigned tickets

for-profit partner

“deployments”

78

Page 124: Beam me up, Scotty!

Oracle

Java

svn trac

Postgres

Ant

JBoss

EJB3.0

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

domain driven design

assigned tickets

for-profit partner

analysis patterns

“deployments”

78

Page 125: Beam me up, Scotty!

Oracle

Java

svn trac

Postgres

Ant

continuous integration

JBoss

EJB3.0

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

domain driven design

assigned tickets

for-profit partner

CruiseControl

analysis patterns

“deployments”

78

Page 126: Beam me up, Scotty!

Oracle

Java

svn trac

IRCPostgres

Ant

continuous integration

JBoss

EJB3.0

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

domain driven design

assigned tickets

for-profit partner

CruiseControl

analysis patterns

“deployments”

78

Page 127: Beam me up, Scotty!

Oracle

Java

svn trac

IRCPostgres

Ant

continuous integration

JBoss

EJB3.0

time

suckage

good

age

SQL schemae

Hibernate

Big Design Up Front

domain driven design

assigned tickets

pair-on-demand

for-profit partner

CruiseControl

analysis patterns

“deployments”

78

Page 128: Beam me up, Scotty!

Oracle

Java

svn trac

IRCPostgres

Ant

continuous integration

JUnit, etc.JBoss

EJB3.0

time

suckage

good

age

unit tests

SQL schemae

Hibernate

Big Design Up Front

domain driven design

assigned tickets

pair-on-demand

for-profit partner

CruiseControl

analysis patterns

“deployments”

78

Page 129: Beam me up, Scotty!

Oracle

Java

svn trac

IRCPostgres

Ant

continuous integration

JUnit, etc.JBoss

EJB3.0

time

suckage

good

age

unit tests

SQL schemae

Hibernate

Big Design Up Front

domain driven design

assigned tickets

pair-on-demand

for-profit partner

CruiseControl

analysis patterns

auto deployments

78

Page 130: Beam me up, Scotty!

Oracle

Java

svn trac

IRCPostgres

Ant

continuous integration

JUnit, etc.JBoss

EJB3.0

time

suckage

good

age

unit tests

SQL schemae

Hibernate

Big Design Up Front

domain driven design

assigned tickets

pair-on-demand

for-profit partner

CruiseControl

public svn

analysis patterns

auto deployments

78

Page 131: Beam me up, Scotty!

Oracle

Java

svn trac

IRCPostgres

Ant

continuous integration

JUnit, etc.JBoss

EJB3.0

time

suckage

good

age

unit tests

SQL schemae

Hibernate

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

for-profit partner

CruiseControl

public svn

analysis patterns

auto deployments

78

Page 132: Beam me up, Scotty!

Oracle

Java

svn trac

IRCPostgres

Ant

continuous integration

JUnit, etc.JBoss

EJB3.0

time

suckage

good

age

unit tests

SQL schemae

Hibernate

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

for-profit partner

CruiseControl

public IRC

public svn

analysis patterns

auto deployments

78

Page 133: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

public IRC

public svn

Rakeanalysis patterns

auto deployments

78

Page 134: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

continuous builder

public IRC

public svn

Rake continuous integrationanalysis patterns

auto deployments

78

Page 135: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

continuous builder

public IRC

public svn

Rake continuous integrationanalysis patterns

auto deployments

78

Page 136: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

continuous builder

public IRC

public svn

CTI

Rake continuous integrationanalysis patterns

auto deployments

78

Page 137: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public IRC

public svn

CTI

Rake continuous integrationanalysis patterns

auto deployments

78

Page 138: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public IRC

public svn

lose technical lead

CTI

Rake continuous integrationanalysis patterns

auto deployments

78

Page 139: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

lose technical lead

CTI

Rake continuous integrationanalysis patterns

auto deployments

78

Page 140: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

hire new developers

CTI

Rake continuous integrationanalysis patterns

auto deployments

78

Page 141: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

hire new developers

CTI

Rake continuous integrationanalysis patterns

auto deployments

78

Page 142: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

SQL schemae

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

hire new developers

CTI

1,000 meetings

Rake continuous integrationanalysis patterns

auto deployments

78

Page 143: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

hire new developers

migrations

CTI

1,000 meetings

Rake continuous integrationanalysis patterns

auto deployments

78

Page 144: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

hire new developers

migrationsswitchtower

CTI

1,000 meetings

Rake continuous integrationanalysis patterns

auto deployments

78

Page 145: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit tests

Big Design Up Front

domain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

hire new developers

migrationsswitchtower

STI

1,000 meetings

Rake continuous integrationanalysis patterns

auto deployments

78

Page 146: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit testsdomain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

hire new developers

migrationsswitchtower

STI

1,000 meetings

stories

Rake continuous integrationanalysis patterns

auto deployments

78

Page 147: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit testsdomain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

wifi

hire new developers

migrationsswitchtower

STI

1,000 meetings

stories

Rake continuous integrationanalysis patterns

auto deployments

78

Page 148: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit testsdomain driven design

AJAX

assigned tickets

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

wifi

hire new developers

migrationsswitchtower

STI

1,000 meetings

stories

getting more “Real”

Rake continuous integrationanalysis patterns

auto deployments

78

Page 149: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit testsdomain driven design

AJAX

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

wifi

hire new developers

migrationsswitchtower

STI

1,000 meetings

stories

getting more “Real”

Rake

voluntary tickets

continuous integrationanalysis patterns

auto deployments

78

Page 150: Beam me up, Scotty!

Oracle

svn trac

IRCPostgres

time

suckage

good

age

unit testsdomain driven design

AJAX

pair-on-demand

Rails

nightly conversions

public releases

continuous builder

public trac

public IRC

public svn

mac laptops

wifi

hire new developers

migrationsswitchtower

STI

1,000 meetings

storiesrelocating

getting more “Real”

Rake

voluntary tickets

continuous integrationanalysis patterns

auto deployments

78

Page 151: Beam me up, Scotty!

Insights

79

Page 152: Beam me up, Scotty!

The Rails Way

80You really have to do things the Rails Way. All the little opinionated choices turn out to be right, whether they seem important or not. We fought pluralization for a long time. When we finally turned it on so many little headaches disappeared. When we were able to get onto Migrations (too early to start there) so many big headaches disappeared. We still keep foreign keys, auditing, various constraints, which are a big headache -- but at least we can have them in plugins and not have to think about them again.

Page 153: Beam me up, Scotty!

81

Page 154: Beam me up, Scotty!

Back in the fall I'd go to Healthcare Technology conferences and I'd

mention to people that we were doing our system in Ruby on Rails and they'd say, ‘Ruby on Rails... What's that?’

81

Page 155: Beam me up, Scotty!

Back in the fall I'd go to Healthcare Technology conferences and I'd

mention to people that we were doing our system in Ruby on Rails and they'd say, ‘Ruby on Rails... What's that?’

Now when I go to conferences they say, “Nobody is using Ruby on Rails.”

81

Page 156: Beam me up, Scotty!

Q&A

82