Last month, engineering leads at Duolingo held our first “engineerication.” (I got the idea from Stripe.) Basically, we took a week off from our regular jobs to sit together and code in order to see what our engineers do daily, get back into the tech stack to see what can be improved. 👩💻 Turns out, a lot has changed in the years since I last wrote a line of code 😅Some things have gotten much easier. Codespaces, for example, allows engineers to easily create a coding environment in the cloud instead of on their local machines. And GitHub Copilot auto-suggests chunks of code. But there were 3 big takeaways I had for how we can improve our engineers’ experiences: 1. On the first day, I set out to do a few small code changes. But as a new engineer, you can’t just sit down and make a change immediately, even a tiny one. You have to set up your environment and figure out where the code needs to go. Then you have to build the code, test it, get it reviewed, and push it live to production. All of this takes time—sometimes, too much time. I want to make it easy for new software engineers to be productive right away without having to set up their development environment or having to learn a lot of arcane tools, processes, and magical incantations. 2. When I started at Duolingo nine years ago, we had a few GitHub repositories. Now we have dozens of microservices. This means that even a small code change may require updates to several repositories. If you’re not regularly working in a given repo, this is much harder, especially if it’s one that your team doesn't own. More standardization is needed to make it easier to code across our various microservices and client repos (we’re starting to do this, but more can be done!) 3. Code review turnaround time slowed us down. We averaged about a 24-hour turnaround, but when making atomic (easily revertable) pull requests, lots of PRs stack up and eventually lead to merge conflicts, etc. In practice, I could see engineers cutting their turnaround time by making PRs that are less atomic, which leads to messier reverts and a harder time diagnosing bugs. Whenever software engineers are tempted to take shortcuts because the current process is too slow or painful, that’s an opportunity for improvement. Overall, taking a week to go hands-on with the code is a great way to build better processes and teams. It was an incredibly valuable week that helped us visualize the steps we can take to remove pain points and speed up some unnecessarily slow processes. 🐢 (One more learning: Next time, I’m going to invite one of our software engineers to pair program with me 😅) Help us develop new products and processes! We're hiring: https://lnkd.in/eSJYjYPG #engineering #processimprovement #leadershipidea
How to Create a Culture of Continuous Improvement in Software Development
Explore top LinkedIn content from expert professionals.
Summary
Creating a culture of continuous improvement in software development involves fostering an environment where teams regularly reflect, adapt, and make incremental changes to enhance processes, collaboration, and outcomes. This approach emphasizes learning, collaboration, and taking actionable steps to build sustainable progress.
- Encourage regular reflection: Implement practices such as retrospectives to assess successes, identify challenges, and collaboratively decide on actionable improvements for your development processes.
- Simplify workflows: Identify bottlenecks and streamline processes, such as onboarding or code reviews, to reduce friction and empower engineers to focus on impactful work.
- Promote shared ownership: Involve team members at all levels in process improvement, encouraging feedback, open communication, and documentation updates to ensure a cohesive, ever-evolving development culture.
-
-
I'm often asked which ceremony I think is most important when running Agile. While all of the ceremonies play a key role in success of delivering outcomes, I feel that the retrospective is what makes the Agile team a team! NFL teams dedicate hours to reviewing game film after each game. This practice helps coaches and players break down their performance to identify strengths, weaknesses, and areas for improvement. Some key elements of NFL film analysis include: 1. Reviewing successful plays and strategies to reinforce positive behaviors. 2. Pinpointing errors in execution and decision-making. 3. Strategizing ways to counteract opponents and improve for the next game. Watching film allows players to visualize their actions and receive direct feedback from coaches, much like Agile retrospectives foster open discussions and learning. In Agile software development, the retrospective ceremony is a cornerstone of continuous improvement. It's a time for teams to reflect on what went well, what didn’t, and how they can improve. The main goals of a retrospective include: 1. Recognizing what went well and building on those strengths. 2. Acknowledging obstacles and areas that need improvement. 3. Collaborating on action items to enhance productivity. Teams often follow frameworks like Start-Stop-Continue or the Five Whys technique to dig deeper and create actionable takeaways. The similarities between Agile retrospectives and NFL film study demonstrate a universal truth: consistent reflection and adaptation are key to success, whether you're coding software or running plays. Here are a few ways these practices align: - Both require honest feedback, communication, and alignment on goals. - Just as developers own their contributions, players must take responsibility for their performance. - Success hinges on iterative progress—making small, consistent improvements over time. By following the below, we can have more effective Agile teams. 1. Be Honest and Open: Like NFL players facing their game tape, Agile teams should embrace transparency and feedback. 2. Focus on Actionable Change: Improvement is valuable only if followed by concrete steps. 3. Celebrate the Wins: Recognizing achievements helps maintain morale and reinforces good practices. Whether you're part of an Agile team delivering software or an NFL team chasing a championship, the retrospective process is crucial for growth and success. By embracing lessons learned and continuously striving for improvement, both Agile practitioners and athletes can achieve peak performance.
-
This week highlighted a crucial observation about our newer SDEs and their role in process improvement. Many may not realize that the SDE role guidelines explicitly state that all engineers, regardless of level, should actively participate in: 1. Reviewing and improving team processes (not limited to code reviews). 2. Providing meaningful feedback to all team members, including senior engineers. 3. Proactively seeking feedback on their own work early enough to be actionable. In my experience, process improvement is often overlooked by engineers early in their careers. Yet, it's a fundamental expectation of the role, requiring both verbal and written communication skills to effectively update team documentation, runbooks, and other materials. A perfect example arose during our recent team discussion about on-call responsibilities. I often use on-call rotations as opportunities to identify and address process inefficiencies. My approach follows the Kaizen philosophy – making changes for the better through simple, frugal, and efficient improvements. These modest changes often have the most significant impact and foster a culture of continuous improvement. How do you identify opportunities for simple yet impactful changes? I follow a principle similar to the airport security message: "If you see something, say something." While you might notice numerous issues around you, the key is to start small, choose your battles wisely, focus on straightforward achievable improvements, and build momentum through quick wins. Remember: An improvement is never "done" – it's an ongoing journey. #process #leadership