Developer Experience: Cracking The Code For Peak Productivity
TL;DR It's not the free unlimited salad bar
Immersing fully into a coding session is the ultimate dream for all developers. Yet, among distractions, looming deadlines, and the anxiety of unfinished tasks, it's often challenging for developers to reach their peak productivity.
Today, I’ll discuss the DevEx paper I recently read on three critical factors shaping the developer experience. These factors ultimately drive project success while significantly impacting the business world.
Flow State
The term "flow state" refers to a mental state where a person is fully immersed in the task, experiencing a sense of energized focus, full involvement, and enjoyment in the process. This term was introduced by psychologist Mihaly Csikszentmihalyi and is often called "in the zone."
Emails & Popups
It’s been a few years since I worked in a physical office, but boy, do I remember people stopping by my desk with one tiny question. Of course, the questions were tiny, but the answers were never. This one interruption would turn out to be several hours of at-desk discussion.
Now, we are a fully remote company, and the people stopping by are replaced by alerts from chat agents and popups from email clients! These interruptions are the enemy number one of the flow state. Many non-remote companies have come up with innovative solutions to fight these interruptions. Like putting a cone on a desk to signal, “Do not disturb me.”
Luckily, most computer operating systems, chat, and email clients nowadays come with a Do Not Disturb setting, preventing alerts and popups from showing up. Also, batching focus hours and meeting hours during the day helps. Some studies have also found that working in pairs helps stop people from interrupting working pairs.
Delays
The second disruptor of the flow state is delays. Most delays happen because of interdependency on people, other teams, and hand-offs.
Where there are handoffs, there is a queue, and where there is a queue, there is a delay.
This delay in turn creates a slow feedback loop, leading to interruptions! Some prime examples of such delays are waiting for code reviews, manual test cycles, slow builds, etc. These are the times when developers start working on something just to realize that they must revisit the old work.
Delays can range from organizational behavior to technologies and come in all kinds of varieties; thus, it’s not easy to remove them.
On the tech side, faster CI/CDs, automated code reviews, trunk-based development, etc. can reduce delays, but these delays are never as bad as the delays people and processes can cause. A company can start with a value stream mapping exercise to make its processes and associated delays visible.
Achieving a flow state is about creating the right conditions that align challenges with skills, foster intrinsic motivation, and allow for full immersion in the task at hand. Balancing these elements can lead to enhanced performance, learning, and satisfaction.
Cognitive Load
Cognitive load refers to the total amount of mental effort being used in working memory. In my experience I have seen developers and designers struggling to understand one of the two things, business domain or technologies involved in the project.
Domain knowledge refers to the understanding of the subject area for which the software is being developed. It involves understanding the business rules, requirements, and goals of the software project. For example, developing software for the healthcare sector would require knowledge of medical terminologies, regulations, and workflows.
Some of the high-performing organizations I have worked with do the following to decrease cognitive load from domain knowledge:
Great onboarding through very domain-specific trainings, workshops, and recorded videos
Regular knowledge sharing in the form of brown bag sessions, recorded videos, chat channels, and lightening talks to keep the team updated with the latest happenings
Access to domain experts to clarify any doubts and to gain insights
Clear requirements to minimize misunderstanding
Documentation for developers to gain clarity whenever needed
Technical knowledge involves understanding the technologies, tools, and processes required to develop the software. It includes knowledge of programming languages, frameworks, development tools, practices, and software architecture.
To decrease the cognitive load from technical knowledge, good teams, and organizations also do the following:
Tool simplification to reduce the complexity of project setup and increase productivity
Code reviews have helped me learn architecture, coding conventions, and best practices for projects
Pair programming is like code reviews with the added advantage of being more social and eliminating delays.
Feedback Loop
When I started working almost twenty years ago, it would take a couple of months, if not quarters, to have our work validated, released, and finally used by the customers. By the time we got feedback on our work, in the best case, developers had changed the teams; in the worst case, they had changed the employers.
Having faster feedback loops offers advantages such as:
Faster identification of issues and sooner opportunities to correct the course.
Learn fast by failing small. One way to get faster feedback is to work in small batches, which means when you fail you fail small and learn fast.
Amazon CEO Jeff Bezos once said, "People who are right a lot change their mind a lot." Of course, Bezos meant that changing your mind should be based on data. Quicker feedback helps you obtain the much-needed data faster. And with this data, you can make better decisions.
Reducing costs by fixing issues faster, possibly while they're still in the development lifecycle, is much cheaper than addressing them after release to customers.
Similarly, improving quality through early detection of issues and risks helps to enhance the overall product quality.
Studies have consistently shown that organizations deploying more frequently and maintaining shorter lead times are twice as likely to exceed performance goals as their competitors.
Conclusion
To wrap up, DevEx ensures developers have a good working experience. This means removing any obstacles that get in their way and ensuring they have the tools and resources they need to succeed. Happy developers are more productive, which directly correlates with improved business performance. For those interested in delving further into the topic of DevEx, I highly recommend reading this paper on DevEx: What Actually Drives Productivity.
Check out previously published articles-