Join CTO Moataz Soliman as he explores the potential impact poor performance can have on your bottom line. 👉 Register Today

ebook icon

App Development

General

Best Practices for Creating Efficient Mobile Engineering Teams

Bugs and crashes are an inevitable part of the development process, but scaling apps and teams face unique challenges when it comes to handling quality fixes. The sheer density of information crash reporting software collects can become overwhelming for teams to manage at scale—in fact, some of the most pervasive time sinks for large engineering teams are  unrelated to coding.

Often, organizational and operational issues are as much to blame for these time and effort costs as technical hurdles. The quantity and diversity of incoming crashes increase with application size and complexity. These factors increase the time and personnel needed for issue discovery, triaging, and assignment, slowing overall issue resolution time. 

For companies with large mobile engineering teams, building efficient team structures and crash workflows is a crucial, proactive move that will reduce issue resolution time. So, how do quality-oriented engineering teams at scale optimize efficiency while prioritizing performance? In this post, we’ll explore common challenges large engineering teams face and strategies for solving them. 

Challenges for Large Teams

Team structure

Large applications have many components and features, each one adding complexity in terms of coding and performance management. Operations like payments, orders, know your customer procedures, and more add layers to the development process, necessitating division into subteams, each responsible for a different part of the code. This division often comes at the cost of reduced visibility and collaboration between members. If responsibilities aren’t clearly defined and divided between teams, it can lead to feature creep, code conflict, or confusion and delay during crash assignment and resolution.

Triaging crashes

Releases inevitably involve bugs and crashes, and scaling apps have even more to manage. But not all errors are equal—developers have to determine which issues are not worth fixing and deploy fixes where they are most impactful. It can be difficult for both leadership and engineers to identify the most critical performance and stability issues to tackle with urgency. Knowing which issues to prioritize is imperative for keeping teams on schedule and user satisfaction rates high.

Issue assignment

When applications scale and crashes increase in density and origin, it takes longer for teams to assign them to their proper owners. Manually assigning crashes becomes overwhelming with application size, so much so that large enterprises often hire product managers for the sole purpose of assigning incoming issues. They need to be able to determine where the crash originated and which team member to assign it to, a process that consumes valuable time.

Release cycles

With the introduction of each new feature, coupling introduces code conflicts and decelerates  development cycles. Build times typically escalate as teams and apps grow larger. These longer release cycles affect issue resolution time, user satisfaction, and even user acquisition rates. The top-grossing apps typically update once every two weeks

Debugging complexity

With large apps, it’s natural for numerous quality issues to exist, which means a lot of debugging data to sort through. This task goes from increasingly difficult to impossible to manage manually as the application grows and dependencies increase. Developers need an abundance of data–and the right kind of data–to debug efficiently. Finding patterns in large sets of data is a time-consuming task that the right crash reporting software can expedite.

Best Practices for Team Efficiency

Organization by ownership

An efficient way to organize large teams is to divide members based on the features or modules in your app(s). Establish clear team ownership rules for each member’s respective parts of the code, so that everyone knows exactly which bugs and crashes belong to them. You could delineate these teams by feature and app, or, if you have multiple apps with shared architecture, across multiple apps. Clear division of responsibilities will reduce confusion and make crash assignment straightforward.

Internal consistency

Create shared processes across teams. For example, establish company-wide templates for planning and design documents. Standardize naming conventions and language between apps and teams for concepts such as features, spans, flows, and file names. Consistency will make it easier to categorize, address, and assign issues as they arise.

Shared architecture

If your organization is responsible for multiple apps, consider reusing architecture during development of new features and apps. This will eliminate redundancies when developing similar features across multiple apps and make common issues easier to assign and debug. For large quality teams, you can divide teams based on function, such as feature flags, experiments, or specific performance metrics, rather than creating app-specific teams.

Team collaboration

Foster an environment of collaboration between and within teams by implementing cross-team and cross-platform planning sessions and syncs. Meeting regularly will help teams avoid feature creep and overlapping or overlooked responsibilities. In addition, regular interaction builds stronger team communication, especially among dispersed or remote teams. 

Peer code review

Regularly review your code base as a team to share challenges and solutions. This practice will also help with on-boarding new members and standardizing during development. Peer code review not only improves communication within your team, but connects a larger web of expertise, resulting in a better overall app. Additionally, it can help developers detect and fix issues rapidly, costing less money and effort in the process.

Mobile-first solutions

Mobile apps require the sensitivity of mobile-first solutions to detect and debug all quality issues. Many crashes and errors that cause crash-like behavior—issues like app hangs, ANR and OOM errors—go undetected by other platforms. NDK and C++ crashes are invisible to most crash reporters, yet have the same negative impact on the user experience. Full visibility into these issues will save your team from addressing them late or missing them entirely.

Tools and team integration

The software your teams use in development will shape their everyday experience and overall workflow efficiency. For example, crash reporting solutions need the flexibility to recognize team and code divisions. Crash management gets noisy; being able to calibrate team dashboards keeps members focused on what’s relevant to them. Moreover, your crash reporter should also have a diversity of integrations to accommodate the other tools you already use so your team avoids building workflows around inflexible solutions.

Automated crash workflows

The fastest way to improve your team’s issue response and resolution time is to automate as much of the quality process as possible. With the right information, you can triage and assign crashes without human intervention. For example, using Instabug, you can set rules that automate assignments and alerts for incoming crashes. By removing the time and effort spent manually identifying, triaging, and assigning crashes, your teams can focus their efforts on what’s important to them—and fix crashes faster. 

Build Automated Crash Workflows

Why automate?

For complex apps, issue triage and assignment is one of the primary phases where large teams lose time responding to crashes. For teams that manage crashes manually, the responder must process a large amount of data to determine the root cause, priority, and which team member can deploy the fix. When this happens for repeated issues, teams lose even more valuable time unnecessarily. 

The simplest way to slash this inefficiency is to establish team ownership designations for members’ respective parts of the code. Ownership rules and automated crash workflows enable teams to skip straight to the debugging phase without manually monitoring or filtering through irrelevant crashes. 

Streamline your crash workflow with code ownership

Instabug’s team ownership features give teams the tools to manage and resolve crashes efficiently. It’s quick and straightforward to configure custom rules that will automate prioritization, assignment, and real-time alerting for future incoming crashes. 

Automate alerts for incoming crashes 

In addition to assigning crash ownership to teams, another way to expedite the debugging and repair process is to use custom alerts for incoming crashes. Members will be immediately informed of urgent issues, and only of those relevant to them. 

Conclusion

Ultimately, creating efficient teams as your app scales relies on both unification and division — unifying and standardizing the development processes and naming conventions used by teams, and clearly dividing the responsibilities and code ownership by team. Consistency, clear areas of ownership, and automated workflows all contribute to greater team efficiency at scale. 

By automating crash workflows with Instabug, you can eliminate most of the time spent manually filtering and assigning crashes, keep teams focused, and minimize crash response time with proper alerting. 

Learn more:

Instabug empowers mobile teams to maintain industry-leading apps with mobile-focused, user-centric stability and performance monitoring.

Visit our sandbox or book a demo to see how Instabug can help your app

Seeing is Believing, Start Your 14-Day Free Trial

In less than a minute, integrate the Instabug SDK for iOS, Android, React Native, Xamarin, Cordova, Flutter, and Unity mobile apps