Slide 1

Slide 1 text

From no line of code to a profitable business The one where we don’t have to be perfect to succeed RuLu 2013, June 20-21

Slide 2

Slide 2 text

Look ma’, I speak at a conference

Slide 3

Slide 3 text

WWAPD?

Slide 4

Slide 4 text

great models, but hard to reach when you begin

Slide 5

Slide 5 text

4 years small team big goals

Slide 6

Slide 6 text

from a prototype to many applications

Slide 7

Slide 7 text

we haven’t been perfect but we won anyway

Slide 8

Slide 8 text

with great people you can do great things

Slide 9

Slide 9 text

Jérémy Lecour hotelhotel.com

Slide 10

Slide 10 text

this team is too small to do anything significant

Slide 11

Slide 11 text

No world-class expert No money to hire some Do all the things by yourself

Slide 12

Slide 12 text

4 roles main in the developer’s job

Slide 13

Slide 13 text

architect

Slide 14

Slide 14 text

builder

Slide 15

Slide 15 text

rocket surgeon

Slide 16

Slide 16 text

firefighter

Slide 17

Slide 17 text

you can wear any of those hats but switching all the time if exhausting

Slide 18

Slide 18 text

WORKING IS HARD LET’S GO SHOPPING! DEAL WITH IT

Slide 19

Slide 19 text

imperfect everywhere is better than very bad anywhere iOS 7 style Comic Sans MS

Slide 20

Slide 20 text

frequent changes in technologies use what you need now, change it later (if needed)

Slide 21

Slide 21 text

with a good background you can make quick and educated choices

Slide 22

Slide 22 text

we’ve changed the data store and it’s not that bad 3x

Slide 23

Slide 23 text

hotels are sold by many merchants at different prices

Slide 24

Slide 24 text

2,100 hotels, 17 merchants 30 external requests 20K prices saved by 15 threads 30-90 seconds to complete a search for PARIS :

Slide 25

Slide 25 text

at first MySQL was easy and did the job

Slide 26

Slide 26 text

then it was no longer a good fit too much work on lots of data

Slide 27

Slide 27 text

MongoDB documents { "search_results": [ { "hotel": { "name": "Sofitel Marseille", "rating": 4, }, "merchants": { "accor": 145.20, "expedia": 150.00, "ratestogo": "full" } },{ "hotel": { "name": "Radisson Blu", "rating": 4, }, "merchants": { "hotelclub": 150.00, "expedia": 154.00, "booking": "full" } } ] }

Slide 28

Slide 28 text

under bigger load MongoDB freaked out too

Slide 29

Slide 29 text

-5ms ➘ +250ms database locked 99%

Slide 30

Slide 30 text

some optimization helped for a while

Slide 31

Slide 31 text

if you #fail spectacularly hopefully you can rollback

Slide 32

Slide 32 text

ElasticSearch very fast indexing database awesome REST API

Slide 33

Slide 33 text

experience & knowledge are gained along the way

Slide 34

Slide 34 text

learning and sharing all the f•••ing time

Slide 35

Slide 35 text

#TGIF LET’S GO LEARNING

Slide 36

Slide 36 text

conferences local user groups code-retreats, coding-dojos open-source contributions explore, meet, share

Slide 37

Slide 37 text

have people who care for the team, the product and the craft

Slide 38

Slide 38 text

passionate value the result more than being at your desk

Slide 39

Slide 39 text

self-driven You manage things, You lead people. Grace Murray Hopper aka. Grandma COBOL

Slide 40

Slide 40 text

self-driven micro-management is a waste of time

Slide 41

Slide 41 text

open-minded different background and expectations bring new perspectives and better solutions

Slide 42

Slide 42 text

an {A,a}gile attitude … well, kinda, sorta

Slide 43

Slide 43 text

cherry picking FTW! Scrum, XP, Kanban, Lean, …

Slide 44

Slide 44 text

No formal stand-up meetings we all know each other’s status BUT

Slide 45

Slide 45 text

WE DON’T ALWAYS DO PAIR-PROGRAMMING BUT WHEN WE DO, IT’S FOR knowledge sharing critical code and fun

Slide 46

Slide 46 text

a small team can move rapidly

Slide 47

Slide 47 text

Git-flow simplified we’ve adopted

Slide 48

Slide 48 text

change doesn’t need global approval we try, then keep or ditch new tools and practices all the time

Slide 49

Slide 49 text

Don’t break the team’s dynamics Refine processes incrementally

Slide 50

Slide 50 text

empirical: based on, concerned with, or verifiable by observation or experience rather than theory or pure logic. empiricism: the theory that all knowledge is based on experience derived from the senses.

Slide 51

Slide 51 text

we are not a model we could have done better

Slide 52

Slide 52 text

have great goals improve gradually

Slide 53

Slide 53 text

4 years intense highly rewarding thanks to awesome people

Slide 54

Slide 54 text

Dave Thomas RailsConf 2010 You don't have to be perfect, you just have to survive. And along the way, remember that the reason you're doing it, is to make it fun.

Slide 55

Slide 55 text

Thank You with a special to Fabien Catteau

Slide 56

Slide 56 text

[email protected] @jlecour jeremy.wordpress.com github.com/jlecour