Posts Tagged ‘BaruchSadogursky’
[VoxxedDaysAmsterdam2026] Coding Fast and Slow: Managing Mental Energy for Sustainable Software Development
Lecturer
Baruch Sadogursky is a Developer Advocate at Tessl, focusing on package management for AI agent skills. A Java Champion with extensive experience in DevOps and software engineering, Baruch explores the intersection of behavioral psychology and programming practices to improve developer effectiveness and well-being.
Abstract
Software development demands significant cognitive resources, yet the mental costs of context switching, interruptions, and decision fatigue are frequently overlooked. Baruch Sadogursky applies insights from behavioral psychology, particularly Daniel Kahneman’s framework of fast and slow thinking, to examine how developers can manage mental energy more effectively. The presentation analyzes the biological and psychological mechanisms underlying attention, fatigue, and intuition, while offering practical strategies for preserving cognitive capacity throughout the workday. Topics include reducing unnecessary context switches, implementing deliberate work patterns, and leveraging AI tools with appropriate context engineering. These approaches enable developers to maintain high-quality output while avoiding burnout and sustaining long-term productivity.
The Dual Systems of Human Cognition in Programming
Human decision-making operates through two distinct cognitive modes. System one functions automatically, emotionally, and with minimal effort. It excels at pattern recognition and rapid responses but can lead to errors when complex analysis is required. System two engages deliberate, logical, and effortful thinking. It handles complex problem-solving and critical evaluation but consumes significant mental energy and operates more slowly.
In software development, system one drives much of routine coding activity. Experienced developers intuitively navigate familiar codebases, recognize common patterns, and make quick implementation decisions. This efficiency feels productive and satisfying. However, system one also introduces risks. Code that “looks okay” may contain subtle flaws that system two would identify through careful review. When mental resources are depleted, developers default to system one even for tasks requiring deeper analysis, resulting in overlooked issues and technical debt.
System two becomes essential for architectural decisions, debugging complex interactions, code reviews, and learning new technologies. The challenge lies in preserving sufficient system two capacity for these critical activities rather than exhausting it on routine interruptions and low-value tasks.
The Hidden Costs of Context Switching and Interruptions
Modern work environments are engineered to fragment attention. Email notifications, messaging platforms, meetings, and status updates create frequent context switches throughout the day. Each interruption forces the brain to reload relevant information, reestablish mental models, and regain focus. This process is metabolically expensive and significantly reduces overall effectiveness.
Research demonstrates that developers check email approximately 77 times daily on average. Attention spans on digital interfaces average just 47 seconds before shifting to another task. Returning to deep work after an interruption requires substantially more time than most people realize. The cumulative effect is reduced code quality, increased errors, and diminished creative problem-solving capacity.
Critically, developers often fail to recognize when their cognitive performance has declined. Similar to how tired individuals overestimate their driving ability, programmers working on system one may believe their code quality remains high. This self-assessment bias makes proactive management of mental energy essential rather than reactive.
Strategies for Preserving and Replenishing Cognitive Resources
Effective mental energy management requires both prevention of depletion and strategic restoration. Time blocking dedicates specific periods to focused work without interruptions. The Pomodoro technique, originally using 25-minute intervals, establishes minimum focused periods while allowing flexibility for natural flow states. When developers enter deep concentration, they should continue beyond the timer rather than forcing artificial breaks.
Task batching groups similar activities to minimize context switches. Responding to all messages during designated periods rather than reacting immediately preserves cognitive continuity for primary development work. Physical exercise, adequate sleep, and mindfulness practices support overall cognitive resilience. Sleep in particular serves as the primary mechanism for restoring system two capacity, making consistent rest non-negotiable for sustained performance.
Workspace organization and notification management reduce environmental triggers for attention shifts. Tools that intelligently manage calendars and protect focus time help implement these practices at scale. Delegation of routine tasks to appropriate automation or AI assistance frees cognitive resources for higher-value activities.
Engineering Context for Human and Machine Systems
Context engineering addresses both human and artificial intelligence systems. For developers, clear documentation, consistent coding standards, and well-structured codebases reduce the mental effort required to understand and modify systems. When context is preserved, system two can focus on creative problem-solving rather than basic comprehension.
Artificial intelligence systems similarly require rich context to perform effectively. Large language models benefit from detailed prompts, relevant examples, and domain-specific knowledge. The same principles that help human developers maintain context—clear boundaries, explicit documentation, and systematic organization—enhance AI performance when integrated thoughtfully.
Modern AI coding assistants represent both opportunity and responsibility. When used with appropriate context, they augment human capabilities without replacing critical thinking. However, over-reliance on AI without sufficient system two engagement can lead to acceptance of suboptimal code that appears functional but lacks deeper quality. Balancing AI assistance with human judgment remains essential for maintaining code integrity.
Building Sustainable Development Practices
Organizations can support cognitive sustainability through intentional practices. Protected focus time, reduced meeting loads during deep work periods, and recognition of the costs of context switching contribute to better outcomes. Engineering workflows that minimize unnecessary interruptions while maintaining necessary collaboration create environments where developers can consistently access their full cognitive capabilities.
Individual developers benefit from self-awareness of their energy patterns and implementation of personal systems for protection and restoration. Regular reflection on work patterns, experimentation with different techniques, and honest assessment of code quality under varying conditions build more effective personal practices.
The goal extends beyond short-term productivity to sustainable careers in software development. By treating mental energy as a finite and valuable resource, developers and organizations can achieve higher quality outcomes while reducing burnout and turnover.
Technology continues to evolve, with AI assuming more routine tasks and shifting human roles toward system-level thinking and creative problem framing. The ability to manage cognitive resources effectively becomes increasingly valuable in this landscape. Developers who master these skills will maintain their effectiveness and competitive advantage regardless of technological changes.
Conclusion: Toward More Conscious Software Creation
Software development is fundamentally a cognitive activity requiring sustained mental effort and clear thinking. Understanding the mechanisms of attention, fatigue, and decision-making empowers developers to work more effectively. By applying principles from behavioral psychology to daily practices, teams can reduce unnecessary cognitive costs and preserve capacity for the most valuable aspects of their work.
The combination of thoughtful process design, appropriate tool usage, and individual self-management creates conditions where developers can consistently produce high-quality work while maintaining their well-being. In an industry characterized by rapid change and high demands, these skills become essential for long-term success and satisfaction.
Conscious management of mental energy transforms software development from a reactive, exhausting process into a sustainable, engaging craft. The investment in understanding and optimizing cognitive performance yields returns in code quality, innovation, and professional fulfillment.
Links:
[VoxxedDaysTicino2026] Technical Enshittification: Why Everything in IT is Horrible Right Now and How to Fix It
Lecturer
Baruch Sadogursky is the Head of Developer Relations at TuxCare, with a distinguished career in Java and DevOps ecosystems. A Java Champion and Microsoft MVP for AI, he has authored books on these topics and is known for his candid analyses of industry trends.
Abstract
This article examines Baruch Sadogursky’s critique of technical enshittification, where software platforms degrade user experiences after gaining dominance. It explores the underlying causes, such as excessive complexity and bloat, and proposes remedies through AI, smart tooling, and refined workflows. By analyzing real-world examples and systemic issues, the discussion highlights methodologies for restoring efficiency and innovation in IT.
The Phenomenon of Enshittification in Technology
Baruch Sadogursky introduces the concept of technical enshittification as an extension of Cory Doctorow’s idea, where platforms initially attract users but subsequently exploit them at the expense of quality. In software, this manifests as bloated applications, sluggish performance, and accumulating bugs that erode reliability. He illustrates this with examples like operating systems losing files or password managers suffering repeated breaches, underscoring how such degradation is not isolated but systemic. The contexts reveal that this trend stems from economic pressures favoring monetization over maintenance, leading to innovation that often amounts to superficial changes rather than substantive improvements. The implications are profound, as they diminish developer productivity and user satisfaction, fostering a cycle of frustration in the industry.
Systemic Causes and Their Interconnections
The talk delves into how complexity has become an obstacle course in software development, with layers of tools, approvals, and abstractions slowing progress. Baruch points to attention fragmentation, where developers spend minimal time coding—around 52 minutes daily—due to distractions like meetings and context switching. He references studies showing it takes 25 minutes to refocus after interruptions, amplifying the toll of lengthy builds or code reviews. Organizational habits, such as frequent reorgs, further destroy shared knowledge, while technical debt accumulates from unrefactored legacies. Bloat exacerbates vulnerabilities, as more code lines create more attack surfaces, evidenced by rising malicious packages in repositories. The contexts connect these to broader industry dynamics, where rapid feature additions outpace quality controls. The implications include stalled innovation and heightened risks, as teams grapple with outdated contexts rather than advancing core functionalities.
AI as a Double-Edged Sword in Development
Baruch views AI as a catalyst that accelerates code generation but risks compounding technical debt through unvetted outputs. While it promises faster features, it often introduces bugs and vulnerabilities, as seen in Java’s poor performance on AI security benchmarks. He critiques the “credit card” mindset, where AI enables unchecked experimentation, leading to more complexity. However, he advocates for its responsible use in context engineering—compressing knowledge for relevance and expanding it thoughtfully. Spec-driven development emerges as a safeguard, where high-level specs guide agents, ensuring traceability. The contexts highlight the need for integrity chains to verify AI-generated code against intentions. The implications suggest AI can revitalize workflows if paired with human oversight, but without it, it perpetuates enshittification.
Organizational Reforms and Workflow Optimizations
To combat these issues, Baruch recommends streamlining processes to minimize distractions and preserve context. Agile principles, when applied purely, encourage reactive planning over rigid foresight, allowing small bets to test assumptions iteratively. DevOps practices, like automation and “you build it, you run it,” offload context to systems, reducing manual toil. Management should focus on documentation of decisions and protecting focus time. The contexts draw from attention research, showing how interruptions fragment productivity. The implications include enhanced efficiency, where teams reclaim coding time and foster cultures of continuous improvement.
Reclaiming Joy and Progress in Software Engineering
In conclusion, Baruch urges embracing these reforms to restore the joy of building software. By prioritizing context preservation and leveraging AI judiciously, organizations can escape enshittification’s grip. The talk serves as a call to action, reminding developers they are not alone in facing these challenges and that proactive changes can lead to meaningful progress.
Links:
[DevoxxUS2017] Java Puzzlers NG S02: Down the Rabbit Hole by Baruch Sadogursky and Viktor Gamov
At DevoxxUS2017, Baruch Sadogursky and Viktor Gamov, from JFrog and Hazelcast respectively, entertained attendees with a lively exploration of Java 8 and 9 puzzlers. Known for their engaging style, Baruch, a Developer Advocate, and Viktor, a Senior Solution Architect, presented complex coding challenges involving streams, lambdas, and Optionals. Their session combined humor, technical depth, and audience interaction, offering valuable lessons for Java developers. This post examines the key themes of their presentation, highlighting strategies to navigate Java’s intricacies.
Decoding Java 8 Complexities
Baruch Sadogursky and Viktor Gamov kicked off with a series of Java 8 puzzlers, focusing on streams and lambdas. They presented scenarios where seemingly simple code led to unexpected outcomes, such as subtle bugs in stream operations. Baruch emphasized the importance of understanding functional programming nuances, using examples to illustrate common pitfalls. Their interactive approach, with audience participation, made complex concepts accessible and engaging.
Navigating Java 9 Features
Transitioning to Java 9, Viktor explored new puzzlers involving modules and CompletableFutures, highlighting how these features introduce fresh challenges. He demonstrated how the module system can lead to compilation errors if misconfigured, urging developers to read documentation carefully. Their examples, drawn from real-world experiences at JFrog and Hazelcast, underscored the need for precision in adopting Java’s evolving features.
Tools for Avoiding Pitfalls
Baruch and Viktor stressed the role of tools like IntelliJ IDEA in catching errors early, noting how its inspections highlight potential issues in lambda and stream usage. They advised against overusing complex constructs, advocating for simplicity to avoid “WTF” moments. Their practical tips, grounded in their extensive conference-speaking experience, encouraged developers to leverage IDEs and documentation to write robust code.
Community Engagement and Resources
Concluding with a call to action, Baruch and Viktor invited developers to contribute puzzlers to JFrog’s puzzlers initiative, fostering community-driven learning. They shared resources, including their slide deck and blog posts, encouraging feedback via Twitter. Their enthusiasm for Java’s challenges inspired attendees to dive deeper into the language’s intricacies, embracing both its power and pitfalls.