Introduction

A San Francisco-based startup was facing a tight deadline and needed additional development support to improve its iOS application and increase test coverage. With a complex existing codebase and a target of increasing coverage from 2% to 25%, the project required a developer who could quickly understand the product, address existing issues, and contribute to ongoing development.

BDIT Engineering joined the project with previous experience working on the application. Within six months, the team helped improve test coverage to over 25%, address critical issues, and strengthen the project's testing and development process — all before the deadline.

About the client

The client was a San Francisco-based startup working in office management and work process automation. The company had developed an iOS app designed to support both hybrid and remote workers as well as employees working from the office.

The app provided an all-in-one solution for visitor and employee registration, work schedule coordination, desk booking, conference room allocation, delivery handling, invitation management, and more. It also included features designed to support workplace safety and compliance during the pandemic.

BDIT Engineering had previously worked on the application, giving the team valuable familiarity with the product and its codebase.

About the project

The six-month engagement focused on fixing bugs, improving test coverage, supporting the development of new features, and improving the reliability of the project's development and testing process.

The main goal was to increase code coverage from 2% to at least 25% by the end of the year, while also helping the development team move quickly toward upcoming deadlines.

Challenges

Getting Familiar with a Complex Codebase

One of the first challenges was understanding a large and complex existing codebase and identifying why some bugs appeared intermittently.

Because BDIT had previous experience with the application, the team was able to get familiar with the project quickly. However, understanding the existing architecture and the client's original technical decisions was still necessary before creating reliable tests and addressing the underlying issues.


Proper tests could only be created once the code was fully understood.


Evaluating a Third-Party Testing Solution

The project also involved evaluating a third-party application that could potentially help with testing.

After approximately three weeks of testing and evaluation, it became clear that the solution would not meet the project's needs. While the evaluation took time, it helped the team understand the limitations of the third-party solution and confirmed that a more flexible, custom approach would be more suitable.

Working Across Time Zones

The client and BDIT team were working from different time zones, with the client based in San Francisco and the BDIT team in Serbia.

Establishing overlapping working hours was important for maintaining communication and keeping the project moving. Regular meetings provided a faster way to discuss issues, clarify requirements, and avoid unnecessary delays caused by asynchronous communication.


The time difference had a great benefit: tasks could be prepared while one team was offline and picked up by the other team at the start of the workday. This helped us move fast, and gave the impression of working on the project 24/7.

Approach

Quickly Integrating Into the Existing Team

Previous experience with the application allowed the BDIT developer to become productive quickly without having to learn the entire product from scratch.

The focus was on understanding the existing code, identifying the causes of recurring issues, and creating the tests needed to make further development more reliable.

Improving Test Coverage

The team worked on adding missing unit, integration, and UI tests while also fixing issues that made some existing UI tests unreliable.

Outdated and obsolete tests were updated or removed, while flaky tests were fixed. Additional test suites were also taken into consideration as part of the overall testing strategy.

Improving Build Reliability

The project also required identifying issues affecting the speed and reliability of CI builds.

After fixing problems with internal components and updating build scripts, tests could be run in parallel. This improved the overall CI process and made it easier to run the growing test suite reliably.

Monitoring Test Coverage

To make progress easier to track, Codecov was integrated into the GitHub Actions workflow.

This provided improved visibility into test coverage at the repository level and helped the team monitor progress toward the project's coverage target.

Supporting Development

In addition to testing and bug fixing, BDIT participated in the development of new features based on the client's existing technical and visual designs.

Having an experienced developer who was already familiar with the application allowed the team to contribute to development without a lengthy onboarding process.

Results

The collaboration helped the development team address the project's immediate challenges while continuing to move toward its deadline.


Development speed

BDIT contributed to new feature development and testing, helping the team move faster.

Increase test coverage

Code coverage increased from 2% to over 25% before the deadline.

Improve test reliability

Missing tests were added and issues with internal components were fixed, making existing UI tests more reliable.

Improve CI builds

Build scripts were updated and tests were parallelized to improve the CI process.

Monitor test coverage

Codecov was integrated into GitHub Actions to provide repository-level coverage monitoring.


The project reached its target of more than 25% code coverage before the deadline, while also improving the reliability of the testing and development process.

The combination of previous product knowledge, senior development experience, and the ability to integrate quickly into an existing team allowed BDIT to provide additional support when the project was under significant time pressure.