Coding Fast and Slow

Prof. Daniel Kahneman Mar 5, 1934 – Mar 27, 2024

“for having integrated insights from psychological research into economic science, especially concerning human judgment and decision-making under uncertainty”

Economics? × × × × ECON101: People are rational; that’s why markets work. - Nope, they aren’t; here’s 50 years of study. - Oh, wow, they really aren’t. It probably has a profound effect on economics! Here’s a Nobel Prize for ya! ECON101: People are rational; that’s why markets work.

A bat and a ball cost $1.10 in total. The bat costs $1 more than the ball. How much does the ball cost?

How much does the ball cost? 0.10 + (1.00+0.10) = 1.20 0.05 + (1.00+0.05) = 1.10

Baruch Sadogursky - @jbaru ch × Developer Productivity Advocate × Gradle Inc × Development -> DevOps -> #DPE

shownotes × × × × speaking.jbaru.ch Slides Video All the links!

Two systems x x x x x Fast Intuitive Automatic Emotional Cheap and eager x x x x x Slow Analytical Controlled Logical Expensive and lazy

Wait, let’s think about that! I recognize this pattern!

class UniqueWords { public static void main(String[] args) throws IOException { if (args.length != 1) { throw new IllegalArgumentException(“Invalid argument”); } Set<String> words = new HashSet<>(); for (String line : Files.readAllLines(Path.of(args[0]))) { // Ignore commented lines if (!line.startsWith(“#”) || !line.startsWith(“//”)) { Collections.addAll(words, line.split(“\W+”)); } } System.out.println(”Count of unique words: ” + words.size()); } }

You have “mental fuel”

Attention and Capacity Limits in Perception: A Cellular Metabolism Account × × × × BNIRS and oxCCO Cellular Metabolism as Mental Fuel Finite Energy Supply High Load Mode vs Low Load Mode 23

Which system do we use for co d ing? x x x x x Fast Intuitive Automatic Emotional Cheap and Eager x x x x x Slow Analytical Controlled Logical Expensive and Lazy

effortless

29

public class DiscountCalculator { public static void main(String[] args) { calculateDiscount(100, 15); } public static void calculateDiscount(double price, double discount) { double finalPrice = price - (price * discount / 100); System.out.println(“The final price after a ” + discount + “% discount is: ” + finalPrice); } }

How Many Triangles?

public class TaxCalculator { public static void main(String[] args) { calculateTax(100, 5); } } public static void calculateTax(double amount, double taxRate) { double totalAmount = amount + (amount * taxRate); System.out.println(“The total amount with tax: ” + totalAmount); }

The problem: × You deplete your fuel by contextswitching × You’re not in the flow because of context-switching × Loose-loose: you need more fuel needed, but you have less fuel

When we are tired, we produce worse code × “Developers are cutting corners on quality when fatigued.” (duh)

But We don’t know when to qu x x x x it Default parole decision: deny Fewer paroles when judges are tired/hungry Granting parole needs System 2 thinking Judges unaware of switching to System 1

Real-life outcome: you run on system one x x x x x Fast Intuitive Automatic Emotional Cheap and Eager x x x x x Slow Analytical Controlled Logical Expensive and Lazy

Real-life outcome: you run on system one x x x x x Fast Intuitive Automatic Emotional Cheap and Eager x x x x x Slow Analytical Controlled Logical Expensive and Lazy

× × × × × 10,000 hours of practice mov e some system 2 activities to sy stem 1 Driving Golf Tennis Music playing Safety drills for fire fighters

Wait, let’s think about that! I recognize this pattern!

Real-life outcome: you run on system one x x x x x Fast Intuitive Automatic Emotional Cheap and Eager x x x x x Slow Analytical Controlled Logical Expensive and Lazy

Which sucks less? Bad code “OK” code

The problem of “ok code” It looks “OK” to us System 1 It looks “OK” to PR review System 1 It looks “OK” to pipelines System 1

Next thing you know: You have an “ok” product

Invest in The goal: Have enough mental fuel to last all day

Time Management Strategies × Time Blocking × Pomodoro Technique

Time Management Strategies × Time Blocking × Pomodoro Technique × Task Batching

× Block time × Batch tasks × Allow access

Mindfulness and Cognitive Pra ctices × Mindfulness and Meditation × Reflective Practices × Single-tasking

Workspace and Interruption M an agement × Workspace Organization × Notification Management × Prioritization Techniques

Physical and Mental Well-bein g × Physical Exercise × Breaks and Downtime

And… Developer productivity Engineering!

Developer Productivity Enginee Foster Faster Feedback Collaborate through Effective Tooling Eliminate Toil for Developers Dedicated Organizational Mindset ring Embrace Rigorous Observability for Proactive Improvement Prioritize Automation and Eliminate Bottlenecks Outcomes Over Output

feedback efficiency × × × × IDE: Sub-seconds (I type, it marks it red) Build: Seconds CI: Minutes Production: Hours/Days

Reverse dependency on distance from developers IDE Build CI Production Feedback Time Faster Slower Distance from Developers Expected Real

Two types of feedback x e.g., CI/CD x we never wait for it x results are distracting x e.g., build x we’ll wait for it in the flow x we’ll be pissed off when it’s slow

Reverse dependency on distance from developers Faster IDE Build CI Feedback Time Commit time synchronous asynchronous Slower Distance from Developers Production

“Faster foster feedback” saves Speeding up local build minimizes context switch Less context switch saves mental fuel mental fuel Run on System 2 all-day

How can we engineer less con tex × × × × × t switches? Measure local build times! Avoid building and testing what didn’t change Speed up what can’t be avoided Fight evil flaky tests! Watch your build like a hawk for degradations

What you can do today (for fr ee × × × × × ) Parallel local Local caching Remote caching* Build Scans Win Prizes (a.k.a. speed challenge)

What your company should pa y for × All the books (see shownotes) × Top development hardware × Develocity (or similar)

Learn more and try it today! × × × × Take the Gradle/Maven Speed Challenge Be DPE Agent of Change! Read the DPE Handbook Watch the DPE Summit videos x speaking.jbaru.ch