Chapter 4: Roadblocks and opportunities

Software development challenges and how to solve them

1. Time and resource estimation

One common obstacle in delivering new software is not being able to gauge time and resource requirements. Project managers may fall prey to expectation and set unrealistic deadlines without taking into account multiple variables and unexpected delays. This results in subpar quality of work. Developers may be forced to push code that doesn't meet the organization's standards, just to move on to the next project and keep the timeline on track.

Solution: Use the right tools and techniques

  • Break down large, complex tasks into smaller ones that are pliable.
  • Project managers need to work with developers to understand how much time a task would take and how many developers would be required to complete the project within the ideal timeframe.
  • Add cushion time to your project to cover any minor hiccups.
  • Use project management tools to keep track of project-related activities. Assigning resources and monitoring the time taken for each project helps teams plan better for upcoming launches. Leads are also responsible for prioritizing tasks in line with the project's goals. ManageEngine's IT help desk contains a project management module that allows managers to easily stay on top of tasks, view detailed history and reports, and oversee the entire process to completion.

2. Integration

Using a wide range of tools, applications, and technologies, and integrating all of them into one system often poses a challenge, especially when third-party applications are involved. Things become even more complicated when there's data silos and inaccurate data is shared across applications and teams. Developers also face challenges when:

  • The integration needs to scale up.
  • It needs to work for multiple use cases.
  • The integration involves legacy systems.
  • It requires bi-directional integration, i.e, data has to flow between two systems in both directions.

These often result in unexpected setbacks and delays in delivery.

Solution: Keep it simple

The product you ship has to work seamlessly with solutions already in use by customers. Here's what you can do:

  • Automate processes wherever possible with a focus on security and privacy.
  • Implement test-driven development (TDD) if it's the right approach for your team. Create tests, then write the code to pass those tests, and refactor as needed.
  • Check the compatibility of the integration solutions before you use them in your environment. Verify that it satisfies the integration objectives.
  • Monitor your integration and ensure you've set up a notification system that can alert you when a component or process fails.

3. Feature creep

Customers will always have feature requests—tons of them. The problem lies in identifying which ones make the cut. Product teams often fail to understand the difference between needs and wants. They get carried away by adding too many features to an application, losing sight of what it was made for in the first place. What you have at the end of this is complicated, bloated software that no one wants to use.

Solution: Maintain a less-is-more strategy

Identify the core problems you're trying to solve and keep usability in mind when you're selecting new features. Some features might be appealing but might may not necessarily add value to your product. For instance, a social media app can introduce gamification. However, its core identity is connecting people and sharing content, so it doesn't really add value to the product and might be ignored by users.

Additionally, if your product is already on the market, you can monitor feature adoption and sunset the features that aren't popular. Removing rarely used features to make way for new features prevents bloat in the long run.

4. Incidental security

Projects often face delays in release even after software is completed because security isn't necessarily a top priority, rather an addendum. Combating security threats through code adds complexity to the project, and developers may not spend too much time on it, especially if they are working with tight deadlines.

Solution: Incorporate security checks in every phase

Developers need to understand the importance of cybersecurity while writing code. Attention to detail at the QA stage is crucial to spot vulnerabilities. Techniques like white box testing and unit testing are a must-have in the development cycle. The security team also plays a role here with an ironclad cybersecurity framework that supports secure software development.

5. Existing code

Creating your own code from scratch and working with existing code or a large code base are vastly different and can be overwhelming. This is especially the case with young developers who join the team to work on a matured product. They may not understand why a piece of code was written the way it was and what purpose it serves. Coding styles have changed over the years and interpreting legacy code to combine it with modern practices is a challenge for many developers.

Solution: Collaborate and advocate for knowledge-sharing

  • Review documentation created by the original developer (if available) to know what it's supposed to do. Project leads must also provide adequate training before they introduce the working setup to new developers.
  • Try to learn on the job and become familiar with the environment as soon as possible. Reach out to experienced developers to understand the code.
  • Look for open-source projects that may have been built with similar code where you can interact with contributors and build your skills.
  • Refactor code only when required and on code that you understand thoroughly. Make incremental changes and document them to enable collaboration.

6. Communication

Communication gaps between developers and managers can limit productivity. Working with large teams or distributed environments also requires effective coordination and communication, especially when language barriers and geographical differences play a role. Miscommunication can also occur between product teams and customers. If end users are not in the loop at different stages of development, developers could misinterpret their requirements.

Solution: Establish communication channels

  • Have regular discussions with team members so everyone is aware of their responsibilities and understands the direction of the project. This also avoids task overlap.
  • Provide stakeholders with updates wherever possible to ensure everyone is on the same page.
  • Use tools like GitHub for communication where developers can share timely updates and changes. These tools also offer version control to manage code changes without causing confusion amongst team members.

7. Rapid technological advancement

Who would've thought we'd be able to write code with ChatGPT? Keeping up with current trends and staying relevant while meeting user requirements can be a tricky line to balance. Maintaining a competitive edge requires knowledge of the latest tools and technologies, being able to adapt, and still delivering in pace with business.

Solution: Polish your skills

  • Read up on emerging technologies regularly. There are plenty of blogs, newsletters, books, and e-books that talk about the evolving market trends.
  • Follow tech thought leaders and industry experts.
  • Update your skills with courses and certifications.
  • Take part in industry events, conferences, and online communities.

Wrapping Up

What's in store for us down the line?

  • Zoho's security and privacy team has introduced a course on secure coding practices for all employees working with Java. It was created to help Java developers adhere to best security practices. This course comprises a curated list security code practice documents that are indispensable for safeguarding applications against common attack vectors. The team is also working on similar dedicated security resources for developers on other platforms.
  • An in-house product team is experimenting with a tool that targets software bloat and mitigates latent vulnerabilities. It conducts a comprehensive analysis of third-party JAR dependencies and application JARs, and displays the unused dependencies.
  • And perhaps the most exciting development of all, Zoho Corp's CEO, Sridhar Vembu, is working on software that helps developers generate correct code by design. The goal is to be able to reinvent our solutions using this program. While we can't say much about it at this point in time, we are optimistic that it holds the potential to elevate our solutions and user experience. Stay tuned.
Mahanya

About the author

Mahanya is a content writer who specializes in IT stories, documenting the journey of enterprises like ManageEngine - their ups and downs, internal processes, and core principles. She is keenly interested in interacting with IT thought leaders to get their perspective on digital transformation. A true zillennial at heart, she spends her spare time on social media finding homes for rescue dogs.

Putting together your sales enablement starter kit

Introduce your inbox to a whole new perspective

By clicking 'keep me in the loop', you agree to processing of personal data according to the Privacy Policy.