Tatiana Shepeleva is a Staff Engineer with StashAway. In this article, she discusses speeding up development and improving product quality by connecting engineering and product teams through APIs.
In a typical development cycle, people from different teams collaborate. We plan the design and work on the implementation, sometimes step by step but often simultaneously. When the cycle repeats, the product team starts by fleshing out requirements by working with designers to ensure the product is nice and easy to use. They give feedback to developers during the implementation phase and testing phase. For planning and design, we utilize many tools. In Figma, designers and product managers prepare mock-ups and sometimes pixel-perfect designs. It’s the home for our design system. We use JIRA to organize and keep track of the whole project. But what do we have for acceptance testing?
Let us consider two avatars: Rachel, a product manager overseeing a development team, and Amanda, a software engineer working with Rachel. We just started working on a new exciting feature. Both are very enthusiastic.
After Amanda completes developing her features, Rachel needs to prepare for testing. You need a testing environment with test cases to ensure that you don’t miss anything, and test accounts with access to the feature and enough data to work with. Ideally, we already have the first step automated. Amanda uses Docker to build an image of the application we need, set up in Kubernetes to manage containerized applications. She follows CI CD best practices to organize the deployment process. Amanda can provide Rachel with a link to a personal testing environment or is deployed immediately on a shared test environment on each metric. Sometimes, we even forget that this step exists. Rachel will use JIRA, Asana, or something similar for acceptance testing. The tricky part is setting up different test accounts. For that, Rachel will need Amanda’s help. Getting a test account can be a tedious process. Most companies use a service-oriented architecture. Amanda can create an account for Rachel step-by-step and set it into the right state. She can do it through UI, internal API calls, or both. Another way to get an account is to search for it in a big anonymized data set in your test environment. This is usually faster than setting up an account from scratch. But Amanda needs to write complex Secure Shell and go through multiple databases. A lot of time is spent creating test accounts, to run multiple test cases and test runs. This can lead to inefficient bug fixing, testing, and waiting cycles, leading to frustration and decreased productivity.
To streamline this process, we developed the Test Query API, an API that automates the search for test accounts. It’s a user-friendly interface designed with our product glossary, allowing Rachel to find accounts easily. This query searches through multiple databases and returns results based on flexible criteria, such as account or portfolio data. It also shows aggregated from multiple databases, data, bases. It has a simple UI with different search criteria. So, anyone who just joined the team and has limited knowledge of the product can get a random account and click around on the applications in our staging environment.
To develop this API, we gathered popular requests from two engineers and the queries that engineers stored for themselves to do manual testing. We analyzed them, focused on the most popular ones, and converted them to filters. We added support for more complicated queries, search for multiple databases, and, for example, we added support to search for an account with a specific portfolio. And it covers about 80% of use cases. Then, we tailored the API for engineers and provided a very flexible API. We found it helpful to have shareable links to a search result. Even for rare and complex requirements, we can still provide a unique result each time. This is very important, especially when integration tests run on the stage. So, even if the requirements are rare, we still try to provide a unique result. No one interferes in each other’s testing. This query has become a daily tool for almost everyone in the engineering statuary.
We are transforming our testing practices by providing repeatable, reliable access to test accounts and supporting a smoother, more effective testing process. By breaking the cycle of testing delays, we enhance not only our operational efficiency but also our overall product quality.