fp adoption at rea2013 2014 2015 2016 2017 scala codebases 100 0 50 1 7 17 38 91 total codebases:...

117
FP adoption at REA A human-first approach @KenScambler

Upload: others

Post on 11-Jul-2020

0 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

FP adoption at REAA human-first approach

@KenScambler

Page 2: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 3: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 4: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 5: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

11

Page 6: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Major companies using FP

Page 7: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 8: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 9: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

FP journey

Page 10: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 11: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

• ~150 developers in Melbourne• ~100 TW consultants in China• ~90 in Malaysia• Handful in Singapore, Thailand,

Indonesia

Page 12: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

2013 2014 2015 2016 2017

Teams using Scala

Page 13: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

2013 2014 2015 2016 2017

Scala codebases

100

0

50

17

17

38

91

Total codebases: ~5200~2% are Scala

Page 14: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Beyond Scala

Of 858 public channels:• #28 all-time messages• #28 total members• #32 users posting messages

Page 15: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Weekly FP Guild session

2013 2014 2015 2016 2017

0

50

10

1518

25Attendance/week

10

20

30

40

4

15 1417

Different presenters

Page 16: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

YOW Lambda Jam 2017

C◦mp◦se :: Melbourne 2017

Page 17: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 18: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Human approach

Page 19: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

SOFTWARE COMPANY

• Solve my problems• Help me do what I

do• On time• Supported

Customers

Real world Software

Page 20: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Customers

Users

SOFTWARE COMPANY

• Easy to use• Make my

life easier• Reliable

Page 21: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Customers

Users

Management

• Bottom line• Hiring?• Long term view• Org health• Manage risk

Page 22: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Customers

Users

Product Managers

• Verify assumptions• Features!• Time to market

Management

Page 23: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Customers

Users

Product ManagersManagement

• Sleep at night• Visibility• Uptime, security,

latency, performance, etc

Site Ops

Page 24: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Customers

Users

Product ManagersManagement

• Determinism• Reproducibility• Confidence

Site Ops

QAs

Page 25: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Customers

Users

Product ManagersManagement

• Do great work• Solve problems• Feel productive• Learn!Site Ops

QAs

Developers

YOW

Page 26: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Customers

Users

Product ManagersManagement

Site Ops

QAs

THE CODEDevelopers

YOW

Page 27: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Tech is ok, but nothing makes sense unless it makes people’s lives better

YOW

Page 28: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

The easy bit

YOW

THE HARD BIT

Page 29: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

YOW Why bother?

Page 30: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

• Input Output • Less moving parts• Less coupling• Fewer possible incorrect

programs• Better separation of

concerns

THE CODE

Page 31: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

THE CODE

• Can actually know things about the code

• Refactoring is easier!• Great code reuse• I’m learning!

Developers

YOW

Page 32: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

THE CODEDevelopers

YOW

QAs

• Same input gives same response!

• We can reproduce things

Page 33: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

THE CODEDevelopers

YOW

QAs

• Rarely fails, in well understood ways

• I can sleep

Site Ops

Page 34: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

THE CODEDevelopers

YOW

QAs

• Devs could painlessly bolt my features on that old codebase!

• I don’t hear “no” as often

Site Ops

Product Managers

Page 35: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

THE CODEDevelopers

YOW

QAs

Site Ops

Product ManagersManagement

• Great for hiring!• Vibrant, energetic

team• Microservices mitigate

risk in tech choice

Page 36: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

THE CODEDevelopers

YOW

QAs

Site Ops

Product ManagersManagement

Customers / Users

• Reliable!• Regular

updates

Page 37: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Tech choices are important becausethey can make people’s lives better

YOW

Page 38: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

YOW

Page 39: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

YOW

Page 40: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Alan TuringTuring machines

Alonzo ChurchThe Lambda Calculus

Programming languages existed before computers did

Page 41: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 42: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 43: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Programs exist like numbers

exist!

Page 44: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Fundamental software principles

Applicability

VSLast week’s hot web framework

Every single dayEvery languageEvery problemEvery context

Next 6 months, if you’re lucky

Substance Eternal and unchanging fabric of the universe

Eternal hamster wheel of memorising steaming piles of human error

Long-term consequence

Happiness, productivity & wisdom

Quit and become a dentist like Mum always wanted

Page 45: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 46: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

...It would be a mistake to characterize lambda calculus as a universal language, because calling it universal is too limiting.

Phil Wadler

Page 47: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

@

FP Guild, team dojos Chat channels

Shared norms Central expert group

#

Page 48: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

shared normsiOS

shared norms

shared norms

shared norms

Weekly guild meetings

#functionalprogramming

Page 49: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Weekly guild meetings

#functionalprogramming#sig-scala

shared norms

shared norms

shared norms

Page 50: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

advicecode reviewarticlessupport

secondmenttraining sessions

shared norms

shared norms

shared norms

Central expert group

Page 51: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Should my team use Scala?

Hey do you mind helping out with some advice for my team?

We’re thinking about using Scala for the new service…

Sure!

Page 52: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Maybe

We’ve got a couple of Scala devs, and the rest of the team is keen.

We want more maintainable assets.

I can pay for an up-front learning curve.

Maybe. Here’s some options, tradeoffs etc...

Page 53: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

We have tight deadlines, a new team of junior Ruby programmers, multiple stakeholders, and half our team is in Xi’an.

I heard Scala will make us more productive.

How can I make them like it?

ABSOLUTELY NOT

Page 54: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Good signs Bad signs

• Stable, established team• Existing FP/Scala experience• Project can bear learning curve• Good sentiment• Local developers• Realistic expectations

• Unstable team• Nobody knows Scala/FP• Very tight deadlines• Mixed or negative sentiment• Offshore developers • “It’s the cool new thing”• “We’ll be immediately more

productive”

Page 55: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Case study 1: Colliding teams

Chalk Services Cheese Experience

Page 56: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Time for a re-org!

You are now the “Chalk & Cheese Dept”

Page 57: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Hi there! Welcome!

Hooray! Let’s get to work.

Page 58: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

The hell am I even looking at

Page 59: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Seriously, I’ve been doing this for 10 years and now I

can’t do anything

Page 60: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Oops! Let’s scale it back a notch.

Page 61: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Cheers!

No worries! You’re doing great.

Page 62: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

6 months later…

Oof. This is all going a bit

slower than we thought…

Not going to lie, this

Scala/FP stuff is tough

Is this really the right approach for us?

Hmmm.

Page 63: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

We have to help our

teammates! I’ll make

tutorials…

I’ll run a weekly training session!

Page 64: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

6 months later… Success!

Woohoo! Productivity!

This software is rock solid!

Love it!

Devs are knocking down the door to join. Great results.

Future though?

Page 65: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Case study 2: Decay & drift

Time for something new! Let’s use Scala

Page 66: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Can you help us with some weekly training sessions?

Sure!

Page 67: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 68: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

6 months later… turnover!

Page 69: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

What do we do with this thing?

Page 70: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

I never really wanted this tbh

Me neither

Page 71: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Case study 3: Empathy FTW

?

We do a lot of maintenance, quality

matters.

A lot of our stuff is already Scala.

We really want to learn.

I’m happy to invest in our

skills!

Page 72: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Sure, I can fit you in

once/week!

Could you help us with some training?

Page 73: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

It’s up to me to make sure my

teammates are having a good time with this

Page 74: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Let’s keep it simple…

Good idea!

Page 75: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

val modifyBanana(b: Banana): Banana = ???

Page 76: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

val modifyBanana(b: Banana): Banana = ??? Oh man.

Struggling.Let’s slow down!

I’ll help out.

Page 77: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Weekly survey

How are you finding it?

1 5

etc

1 5

Can you use technique X in anger?

Let’s keep track of out progress, to work out how we’re doing!

Page 78: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

val modifyBanana(b: Banana): Banana = ???

Still struggling.

You’re doing great! We’ll all

help

Page 79: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

6 months later… success!

Project was a success! Well done team!

We’re really happy with this

code!

We’ve levelled

up!

Page 80: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

AntipatternsHow FP adoptions fail

Page 81: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Antipattern 1: Under the rug

I’m going to lose my

hipster badge at this rate

Page 82: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 83: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 84: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Haskell in prod,LIVING THE

DREAM BABY!!!

Page 85: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 86: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 87: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 88: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Where did this come from??

I never would have agreed to this!

It looks weird and we didn’t sign up for this

Page 89: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Antipattern 2: Wizard Tower

Page 90: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Profunctor optics! Church-encoded free

monad. Left Kanextension enriches our algebra into a

functor…..etcWhy on earth would we care about all that?

Tense, fragile situation…

Page 91: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Soon enough… Howdy folks I’m the new CTO!

I’m really excited to….GOOD LORD what

is going on there

Page 92: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 93: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 94: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

You hear something? Nope.

Page 95: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Antipattern 3: Flock of seagulls

Can you folk help us out? AgileConsultyCorp

Sure can!

Page 96: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

This will never do!

Let’s add some AgileConsultyCorp

pizzazz!

Page 97: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 98: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 99: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala
Page 100: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

FP Guild

Every Wednesday 4pm without fail

f ◦ (g ◦ h) = (f ◦ g) ◦ h

Page 101: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

2014

f ◦ (g ◦ h) = (f ◦ g) ◦ h

4x

Page 102: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

2015

(theory)

f ◦ (g ◦ h) = (f ◦ g) ◦ h

15x

(12x first time speakers)

Page 103: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

2016

(theory)f ◦ (g ◦ h) = (f ◦ g) ◦ h

14x

(6x first time speakers)

Page 104: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

2017

f ◦ (g ◦ h) = (f ◦ g) ◦ h

(theory)17x

(7x first time speakers)

Page 105: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Low bar

• Timebox to 2 hours prep, max• Lower bar means more speakers• More diverse speakers• Sanity for organisers

Page 106: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Consistency

“The show doesn’t go on because it’s ready; it goes on because it’s 11:30.”

- Lorne Michaels, SNL creator

Page 107: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Consistency

• Consistency is really important for building confidence in a group

• Every Wednesday 4pm without fail, 4 years running

• (except for Christmas & Hackathons)

Page 108: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Consistency

1. Call for talks on Monday2. Pester individuals 3. Riff on something off the top of head4. Watch video

Fallbacks:

Page 109: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Variety

Same thing…

Page 110: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Variety

Same thing…

Page 111: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Variety

Same thing…

Page 112: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Variety

Same thing…

Week-to-week variety in speakers & topics is important!

Page 113: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Look after beginners and the experts will look after themselves

Page 114: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Blah blah monad stack, typeclass coherence

I’ll bet I’m the only person who

doesn’t understand this

Imagined:

Page 115: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

Blah blah monad stack, typeclass coherence

I’ll bet I’m the only person who

doesn’t understand this

Actual: I’ll bet I’m the only person who

doesn’t understand this

I’ll bet I’m the only person who

doesn’t understand this

I’ll bet I’m the only person who

doesn’t understand this

I’ll bet I’m the only person who

doesn’t understand this

Page 116: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

• Natural bias toward advanced talks• Encourage beginner talks• Encourage beginners talking!• Bigger, more diverse crowds

Page 117: FP adoption at REA2013 2014 2015 2016 2017 Scala codebases 100 0 50 1 7 17 38 91 Total codebases: ~5200 ~2% are Scala

• Functional programming is totally awesome

• Technical benefits are worth pursuing

• None of it matters a damn unless you can make it help people

• By taking a human-first approach, a sustainable, self-perpetuating culture of learning and achievement is possible, to everyone’s benefit

Conclusion