Today’s customers have become increasingly demanding when it comes to software and website quality, expecting regular updates with new features and functionalities from their vendors. However, meeting these expectations and ensuring customer satisfaction requires the use of agile application development methods and techniques, as well as highly skilled software engineers who can adeptly use the latest development tools, technologies, and methodologies.
Consequently, the world of software development has become significantly more demanding and complex. Let’s examine five big pain points faced by modern software developers and explore potential strategies to overcome them.
1. Reconciling misaligned goals
Pain point: Software developers often work with a less-than-complete understanding of the business requirements established by the business leaders and product owners. This can lead to misaligned goals that result in unnecessary and inappropriate features. Just as important, perhaps, it creates missed opportunities as developers focus on the wrong priorities. Put it all together, and you get dissatisfied customers who aren’t getting what they need.
Misaligned goals can create a trust deficit among teams and can lead to conflict and unsuccessful products, costing your company customers, revenue, and profits.
What to do about it: Regular communication between developers and business leaders is essential to prevent misaligned goals. Additionally, as business goals shift and refine over time, a process that accounts for these changes is critical for long-term success. Developers must be open and flexible to evolving ideas and requirements.
You need to realize that when a product owner changes their requirements, there’s usually a good reason for it. Sure, business owners sometimes shift their goals, priorities, and expectations without legitimate need. And sometimes rapidly evolving business requirements can make life difficult for developers. But nimble business leaders and strong inter-team relationships can lead to better end products and ultimately happier customers and a more successful organization.
2. Keeping up with the required speed of innovation
Pain point: Emerging technologies are driving new product offerings at a dizzying pace. Accelerating innovation in software development tools and processes can impact your products’ capabilities and market acceptance, and ultimately the success of your company.
Innovations like DevOps, cloud computing, AIOps, intelligent systems, and even mobile computing were mostly unknown just a few years ago. Yet today, they are all integral components to the development of modern software applications.
What to do about it: Modern software applications are no longer static, and you can no longer be static either. Developers must remain open to new ideas and concepts, keep up on the latest ideas and innovations, and find creative ways to apply new tools and techniques to continuously evolving enterprise application requirements.
Ironically, this puts software developers in a similar position to their business leaders. Your business leaders are responsible for understanding the evolving needs of your customers. You are responsible for understanding the evolving capabilities available to help solve these needs.
3. Staying on top of the latest software engineering technologies
Pain point: Remember when Ruby was all the rage? Remember when XML was the solution to inter-application communications? How about the days when enterprise software development was built on carefully scheduled waterfall development processes? Or when PHP made web application development a breeze?
If you’ve been in the industry for more than a few years, you’ve likely been impacted when parts of your highly tuned skill set suddenly seemed less relevant. Instead, a new set of skills became more highly sought after.
In the software industry, the lifespan of a skill, technique, or process seems to be around two to three years. By the time you build an application and begin to see success with it in the marketplace, the techniques used to develop it may already be obsolete. In order to cope with this extreme rate of innovation, you have to stay abreast of changing industry norms and requirements. Even as the pressure mounts to do more with less, faster than ever before, you have to find time to invest in keeping your skills up to date.
What to do about it: Popularized in the 1980s, the concept of the T-shaped individual is a crucial metaphor for successful positioning in the ever-changing software industry. T-shaped individuals have a broad understanding of lots of technologies, yet also a deep understanding in a few critical areas. This combination makes these individuals highly valuable in their areas of expertise without losing sight of the big picture.
As time goes on, the specific technologies you focus on for the trunk of the “T” should and will evolve. Meanwhile, the breadth of exposure and understanding (the crossbar of the “T”) helps you decide which technologies to specialize in next.
4. Navigating environmental distractions
Pain point: Modern work environments can be both a blessing and a curse. Shared work pods, open offices, and dedicated team spaces have been credited with reducing hierarchies, boosting creativity and collaboration, and increasing flexibility—not to mention saving money on real estate.
However, software engineers still require time to actually work on developing software, and many modern work environments seem to have lost sight of this requirement. While there has been a significant post-pandemic cultural shift to many companies now allowing employees to work remotely, modern collaboration tools such as Slack can still create the expectation that everyone is always available for a quick discussion. Developers can find it difficult to focus on the job at hand as they get pulled in different directions.
What to do about it: Even in the modern work environment, it’s important to find the time and space for quiet, reflective thinking, and productivity. Downtime away from the bustle of the open office can be critical to being an effective developer.
Many developers use headphones to create a distraction-free environment, but they may not be enough. For deeper focus, find a quiet corner away from the normal team environment. Whether you’re in the physical office or your home office, turn off notifications and quit the collaboration and communications apps on all devices, including your computer and your phone. Put on music that creates a meditative environment. Mindful practices like these can help you be a more effective engineer—and better able to help your colleagues when you’re not focused on a tough development problem.
5. Managing operational overhead
Pain point: With the rise of DevOps, gone are the days when developers could take software and “throw it over the wall” for operations to manage. Ready or not, modern software engineers are becoming their own operations engineers. The upside? Nothing focuses your mind on building a high-quality, scalable, and highly available application like being the one who will be awakened in the middle of the night when something goes wrong.
Integrating dev and ops functions has been proven to be good for applications and beneficial for the businesses that create them. Understanding the tools and techniques necessary to build applications that run effectively, efficiently, and reliably at scale is also good for the growth and development of software developers. But DevOps’ increased operational responsibility comes at a cost. Many developers are given ops responsibilities without understanding what’s involved in maintaining an application at scale. And the increased operational burden can become yet another distraction from focusing on creating great software.
What to do about it: Software-support rotations can help developers focus on developing when not on call, and focus on improving the application’s operational capabilities when they are on call. Teams should emphasize that on-call developers should not plan on working to meet new product development commitments. Instead, they should use the opportunity to better understand operational requirements and improve the operational infrastructure. Focusing on the operational aspects when you are on call should help you focus on development issues when you are not on call.
Like it or not, the days when a developer could sit back, bang out some code, and toss it over the wall for someone else to worry about are long gone. In the modern software world, expectations for working on more complex software in more complex environments requires developers to grow and expand and modernize themselves, just like they do for the applications they create and maintain.
More from Lee Atchison:
- Assessing Your Organization’s Cloud Maturity Level
- The Dangers of Data Partitioning While Scaling
- ModernOps with Beth Long: Transferring Operational Expertise to the Cloud [podcast]
- Software Architecture: From Developer to Architect [online course]