SlideShare a Scribd company logo
The Silent
Productivity
Killer
Paul Phillips
paulp@improving.org
Source: It's xkcd, yes.
Ex-Hacker Tells All!
• One-time scalac hacker
• Now full-time malcontent
• Voted Mr. Congeniality by scala community
• Zero years in a row (and counting)
Jon Pretty admits it took
him 10 years to amass 10
years scala experience.
The picture suggests he
was enjoying the forty
weeks vacation standard in
Western Europe.
I dub thee Jon Pretty Slow.
< 10 years
Scientifically Determined Facts
about me, in the domain of interpersonal orientation
How Software Is Made
Initiate
build
sequence!
TIME
PASSES
You're older than you've ever been
and now you're even older
and now you're even older
and now you're even older
!
You're older than you've ever been
and now you're even older
and now you're older still
!
-- They Might Be Giants
Hmm, let's try it with
that one brick three
millimeters to the left.
Wait a Minute
• The titular "silent killer" is not the
time spent waiting
• It is the inhibition of flow state
• Outside of flow, you are but a
shadow of your best self
Mihaly Csikszentmihalyi
(mee-hy cheek-sent-mə-hy-ee)
identifies these preconditions
for flow:
!
1) Goals are clear
2) Feedback is immediate
3) A balance between
opportunity and capacity
The Lag Analogy
• Imagine editing system files on a faraway server
under a 6 second echo lag. No mistakes!
• Is the time to completion only 6 seconds greater?
• Is your error rate only "6 seconds" higher?
• Is the task only "6 seconds" less enjoyable?
• How often do we tolerate a "6 second lag"
when writing code?
• To a first approximation: always
• Optimistically: way too often
The Lag Analogy
The Lag Analogy
• "You should have been using screen/tmux!"
• Right: why tolerate such uncivilized conditions?
• A highly responsive layer coalesces inputs and
batches them to the high-latency system
• It's madness to have to traverse every
requirement to connect cause to effect
What IS a compiler?
• Responsiveness is a (or THE) key to a UX
• It is mandatory to achieve flow state
• We are unwise to turn this critical task over to
a general purpose compiler
• More responsive does not mean faster:
usually it means slower! (i.e. less throughput)
repl startup
• Initialize the compiler in a separate thread
• Print the prompt immediately
• Result: startup feels impossibly faster!
• Yet "minimum time to first result" is unchanged
• Responsiveness, where perception IS reality
multitasking
• scalac is so slow to build, I always had two work
trees going simultaneously
• Context switching in that codebase is not cheap
for the wetware
• Incremental compilation is useless in scalac
Interrupting Myself
• Everyone seems to agree interruptions are costly
• I experience no interruptions - from humans
• Flow state is no less elusive for that
• "Flow interruptions" are everywhere
"incremental comp..."
• Incremental compilation recompiles less (at best)
• I say: recompile never! Recompiling is rebooting
• First requirement is a functional compiler
• And we derive the output from the delta
A change to a base trait
may incur the
recompilation of
over one thousand files.
!
The regeneration of 100
MB of class files.
!
While the ΔOutput
requires writing 4 bytes to
a single classfile.
Skeptical Hippo
"that's impossib..."
• Yes, very likely it's impossible for scala, and most
existing languages
• But a language can be engineered around it
• And a language SHOULD be engineered around it
"who needs a comp..."
• Bad news: most software cannot be reasoned about
• Try some pure reasoning against a few scalac bugs
• We can design better software, but that won't unwrite
the rest of it
• And regardless, frobbing knobs and seeing what
happens is how most of the humans learn
"The next step is to transfer some
psychic energy each day from tasks
that we don’t like doing, or from
passive leisure, into something we
never did before, or something we
enjoy doing but don’t do often enough
because it seems too much trouble.
!
There are literally millions of potentially
interesting things in the world to see,
to do, to learn about. But they don’t
become actually interesting until we
devote attention to them."
Mihaly Csikszentmihalyi

More Related Content

Similar to Keynote, LambdaConf 2014 - The Silent Productivity Killer

Scratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry PieScratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry PieESUG
 
Yet Another Dan Kaminsky Talk (Black Ops 2014)
Yet Another Dan Kaminsky Talk (Black Ops 2014)Yet Another Dan Kaminsky Talk (Black Ops 2014)
Yet Another Dan Kaminsky Talk (Black Ops 2014)Dan Kaminsky
 
Generating Sequences with Deep LSTMs & RNNS in julia
Generating Sequences with Deep LSTMs & RNNS in juliaGenerating Sequences with Deep LSTMs & RNNS in julia
Generating Sequences with Deep LSTMs & RNNS in juliaAndre Pemmelaar
 
How to stop sucking and be awesome instead
How to stop sucking and be awesome insteadHow to stop sucking and be awesome instead
How to stop sucking and be awesome insteadcodinghorror
 
Howtostopsucking
HowtostopsuckingHowtostopsucking
HowtostopsuckingHugo Pinto
 
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01Hugo Pinto
 
How To Be A Real Developer In Two Easy Steps
How To Be A Real Developer In Two Easy StepsHow To Be A Real Developer In Two Easy Steps
How To Be A Real Developer In Two Easy Stepsnorthofnormal
 
Steelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with PythonSteelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with Pythoninfodox
 
Do Languages Matter?
Do Languages Matter?Do Languages Matter?
Do Languages Matter?Bruce Eckel
 
iMyCom:Tripping along iOS development of Langauge Communication tool
iMyCom:Tripping along iOS development of Langauge Communication tooliMyCom:Tripping along iOS development of Langauge Communication tool
iMyCom:Tripping along iOS development of Langauge Communication toolVijaya Prakash Kandel
 
Things you should know if you plan to ship a game
Things you should know if you plan to ship a gameThings you should know if you plan to ship a game
Things you should know if you plan to ship a gameDevGAMM Conference
 
How To Run a 5 Whys (With Humans, Not Robots)
How To Run a 5 Whys (With Humans, Not Robots)How To Run a 5 Whys (With Humans, Not Robots)
How To Run a 5 Whys (With Humans, Not Robots)Dan Milstein
 
Car hacking 101 rev2
Car hacking 101 rev2Car hacking 101 rev2
Car hacking 101 rev2ZachZaffis
 
There Are Fates Worse Than Death: The OPW2013 Keynote
There Are Fates Worse Than Death: The OPW2013 KeynoteThere Are Fates Worse Than Death: The OPW2013 Keynote
There Are Fates Worse Than Death: The OPW2013 KeynoteJohn Anderson
 
Watch Your Language! - What my Mother Taught Me about Being an Engineer.
Watch Your Language! - What my Mother Taught Me about Being an Engineer.Watch Your Language! - What my Mother Taught Me about Being an Engineer.
Watch Your Language! - What my Mother Taught Me about Being an Engineer.Neal Richardson Sr
 
Codebits Handivi
Codebits HandiviCodebits Handivi
Codebits Handivicfpinto
 
There Is No JavaScript
There Is No JavaScriptThere Is No JavaScript
There Is No JavaScriptNoam Kfir
 
Noam Kfir - There is no Java Script - code.talks 2015
Noam Kfir - There is no Java Script - code.talks 2015Noam Kfir - There is no Java Script - code.talks 2015
Noam Kfir - There is no Java Script - code.talks 2015AboutYouGmbH
 
Java in High Frequency Trading
Java in High Frequency TradingJava in High Frequency Trading
Java in High Frequency TradingViktor Sovietov
 

Similar to Keynote, LambdaConf 2014 - The Silent Productivity Killer (20)

Scratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry PieScratching the itch, making Scratch for the Raspberry Pie
Scratching the itch, making Scratch for the Raspberry Pie
 
Yet Another Dan Kaminsky Talk (Black Ops 2014)
Yet Another Dan Kaminsky Talk (Black Ops 2014)Yet Another Dan Kaminsky Talk (Black Ops 2014)
Yet Another Dan Kaminsky Talk (Black Ops 2014)
 
Generating Sequences with Deep LSTMs & RNNS in julia
Generating Sequences with Deep LSTMs & RNNS in juliaGenerating Sequences with Deep LSTMs & RNNS in julia
Generating Sequences with Deep LSTMs & RNNS in julia
 
How to stop sucking and be awesome instead
How to stop sucking and be awesome insteadHow to stop sucking and be awesome instead
How to stop sucking and be awesome instead
 
Howtostopsucking
HowtostopsuckingHowtostopsucking
Howtostopsucking
 
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
Howtostopsuckingandbeawesomeinstead 120601013410-phpapp01
 
How To Be A Real Developer In Two Easy Steps
How To Be A Real Developer In Two Easy StepsHow To Be A Real Developer In Two Easy Steps
How To Be A Real Developer In Two Easy Steps
 
Steelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with PythonSteelcon 2014 - Process Injection with Python
Steelcon 2014 - Process Injection with Python
 
Do Languages Matter?
Do Languages Matter?Do Languages Matter?
Do Languages Matter?
 
iMyCom:Tripping along iOS development of Langauge Communication tool
iMyCom:Tripping along iOS development of Langauge Communication tooliMyCom:Tripping along iOS development of Langauge Communication tool
iMyCom:Tripping along iOS development of Langauge Communication tool
 
Things you should know if you plan to ship a game
Things you should know if you plan to ship a gameThings you should know if you plan to ship a game
Things you should know if you plan to ship a game
 
Software + Babies
Software + BabiesSoftware + Babies
Software + Babies
 
How To Run a 5 Whys (With Humans, Not Robots)
How To Run a 5 Whys (With Humans, Not Robots)How To Run a 5 Whys (With Humans, Not Robots)
How To Run a 5 Whys (With Humans, Not Robots)
 
Car hacking 101 rev2
Car hacking 101 rev2Car hacking 101 rev2
Car hacking 101 rev2
 
There Are Fates Worse Than Death: The OPW2013 Keynote
There Are Fates Worse Than Death: The OPW2013 KeynoteThere Are Fates Worse Than Death: The OPW2013 Keynote
There Are Fates Worse Than Death: The OPW2013 Keynote
 
Watch Your Language! - What my Mother Taught Me about Being an Engineer.
Watch Your Language! - What my Mother Taught Me about Being an Engineer.Watch Your Language! - What my Mother Taught Me about Being an Engineer.
Watch Your Language! - What my Mother Taught Me about Being an Engineer.
 
Codebits Handivi
Codebits HandiviCodebits Handivi
Codebits Handivi
 
There Is No JavaScript
There Is No JavaScriptThere Is No JavaScript
There Is No JavaScript
 
Noam Kfir - There is no Java Script - code.talks 2015
Noam Kfir - There is no Java Script - code.talks 2015Noam Kfir - There is no Java Script - code.talks 2015
Noam Kfir - There is no Java Script - code.talks 2015
 
Java in High Frequency Trading
Java in High Frequency TradingJava in High Frequency Trading
Java in High Frequency Trading
 

Recently uploaded

Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfmbmh111980
 
AI/ML Infra Meetup | ML explainability in Michelangelo
AI/ML Infra Meetup | ML explainability in MichelangeloAI/ML Infra Meetup | ML explainability in Michelangelo
AI/ML Infra Meetup | ML explainability in MichelangeloAlluxio, Inc.
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamtakuyayamamoto1800
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Anthony Dahanne
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfkalichargn70th171
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAlluxio, Inc.
 
GraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisGraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisNeo4j
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...Alluxio, Inc.
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILNatan Silnitsky
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyanic lab
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...informapgpstrackings
 
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1KnowledgeSeed
 
Crafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationCrafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationWave PLM
 
Studiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting softwareStudiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting softwareinfo611746
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowPeter Caitens
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion Clinic
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTier1 app
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessWSO2
 

Recently uploaded (20)

Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdfMastering Windows 7 A Comprehensive Guide for Power Users .pdf
Mastering Windows 7 A Comprehensive Guide for Power Users .pdf
 
AI/ML Infra Meetup | ML explainability in Michelangelo
AI/ML Infra Meetup | ML explainability in MichelangeloAI/ML Infra Meetup | ML explainability in Michelangelo
AI/ML Infra Meetup | ML explainability in Michelangelo
 
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoamOpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
OpenFOAM solver for Helmholtz equation, helmholtzFoam / helmholtzBubbleFoam
 
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
Paketo Buildpacks : la meilleure façon de construire des images OCI? DevopsDa...
 
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdfA Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
A Comprehensive Appium Guide for Hybrid App Automation Testing.pdf
 
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAGAI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
AI/ML Infra Meetup | Reducing Prefill for LLM Serving in RAG
 
GraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysisGraphAware - Transforming policing with graph-based intelligence analysis
GraphAware - Transforming policing with graph-based intelligence analysis
 
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
AI/ML Infra Meetup | Improve Speed and GPU Utilization for Model Training & S...
 
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.ILBeyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
Beyond Event Sourcing - Embracing CRUD for Wix Platform - Java.IL
 
Cyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdfCyaniclab : Software Development Agency Portfolio.pdf
Cyaniclab : Software Development Agency Portfolio.pdf
 
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
Field Employee Tracking System| MiTrack App| Best Employee Tracking Solution|...
 
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
A Python-based approach to data loading in TM1 - Using Airflow as an ETL for TM1
 
Top Mobile App Development Companies 2024
Top Mobile App Development Companies 2024Top Mobile App Development Companies 2024
Top Mobile App Development Companies 2024
 
Crafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM IntegrationCrafting the Perfect Measurement Sheet with PLM Integration
Crafting the Perfect Measurement Sheet with PLM Integration
 
Studiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting softwareStudiovity film pre-production and screenwriting software
Studiovity film pre-production and screenwriting software
 
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital TransformationWSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
WSO2Con2024 - WSO2's IAM Vision: Identity-Led Digital Transformation
 
Advanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should KnowAdvanced Flow Concepts Every Developer Should Know
Advanced Flow Concepts Every Developer Should Know
 
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
Abortion ^Clinic ^%[+971588192166''] Abortion Pill Al Ain (?@?) Abortion Pill...
 
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERRORTROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
TROUBLESHOOTING 9 TYPES OF OUTOFMEMORYERROR
 
Accelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with PlatformlessAccelerate Enterprise Software Engineering with Platformless
Accelerate Enterprise Software Engineering with Platformless
 

Keynote, LambdaConf 2014 - The Silent Productivity Killer

  • 2. Ex-Hacker Tells All! • One-time scalac hacker • Now full-time malcontent • Voted Mr. Congeniality by scala community • Zero years in a row (and counting)
  • 3. Jon Pretty admits it took him 10 years to amass 10 years scala experience. The picture suggests he was enjoying the forty weeks vacation standard in Western Europe. I dub thee Jon Pretty Slow.
  • 5. Scientifically Determined Facts about me, in the domain of interpersonal orientation
  • 7.
  • 9. TIME PASSES You're older than you've ever been and now you're even older and now you're even older and now you're even older ! You're older than you've ever been and now you're even older and now you're older still ! -- They Might Be Giants
  • 10.
  • 11. Hmm, let's try it with that one brick three millimeters to the left.
  • 12.
  • 13. Wait a Minute • The titular "silent killer" is not the time spent waiting • It is the inhibition of flow state • Outside of flow, you are but a shadow of your best self
  • 14. Mihaly Csikszentmihalyi (mee-hy cheek-sent-mə-hy-ee) identifies these preconditions for flow: ! 1) Goals are clear 2) Feedback is immediate 3) A balance between opportunity and capacity
  • 15. The Lag Analogy • Imagine editing system files on a faraway server under a 6 second echo lag. No mistakes! • Is the time to completion only 6 seconds greater? • Is your error rate only "6 seconds" higher? • Is the task only "6 seconds" less enjoyable?
  • 16. • How often do we tolerate a "6 second lag" when writing code? • To a first approximation: always • Optimistically: way too often The Lag Analogy
  • 17. The Lag Analogy • "You should have been using screen/tmux!" • Right: why tolerate such uncivilized conditions? • A highly responsive layer coalesces inputs and batches them to the high-latency system • It's madness to have to traverse every requirement to connect cause to effect
  • 18. What IS a compiler? • Responsiveness is a (or THE) key to a UX • It is mandatory to achieve flow state • We are unwise to turn this critical task over to a general purpose compiler • More responsive does not mean faster: usually it means slower! (i.e. less throughput)
  • 19. repl startup • Initialize the compiler in a separate thread • Print the prompt immediately • Result: startup feels impossibly faster! • Yet "minimum time to first result" is unchanged • Responsiveness, where perception IS reality
  • 20. multitasking • scalac is so slow to build, I always had two work trees going simultaneously • Context switching in that codebase is not cheap for the wetware • Incremental compilation is useless in scalac
  • 21. Interrupting Myself • Everyone seems to agree interruptions are costly • I experience no interruptions - from humans • Flow state is no less elusive for that • "Flow interruptions" are everywhere
  • 22. "incremental comp..." • Incremental compilation recompiles less (at best) • I say: recompile never! Recompiling is rebooting • First requirement is a functional compiler • And we derive the output from the delta
  • 23. A change to a base trait may incur the recompilation of over one thousand files. ! The regeneration of 100 MB of class files. ! While the ΔOutput requires writing 4 bytes to a single classfile.
  • 24.
  • 26. "that's impossib..." • Yes, very likely it's impossible for scala, and most existing languages • But a language can be engineered around it • And a language SHOULD be engineered around it
  • 27. "who needs a comp..." • Bad news: most software cannot be reasoned about • Try some pure reasoning against a few scalac bugs • We can design better software, but that won't unwrite the rest of it • And regardless, frobbing knobs and seeing what happens is how most of the humans learn
  • 28. "The next step is to transfer some psychic energy each day from tasks that we don’t like doing, or from passive leisure, into something we never did before, or something we enjoy doing but don’t do often enough because it seems too much trouble. ! There are literally millions of potentially interesting things in the world to see, to do, to learn about. But they don’t become actually interesting until we devote attention to them." Mihaly Csikszentmihalyi