Our client is an innovative company offering a highly secure system to manage digital assets such as cryptocurrencies, which allows transferring, defining user’s entitlements and verifying particular transactions (e.g. for anti-money laundering purposes). The client cooperates with many big financial institutions and companies from other sectors.
The goal was to create a highly secure extension around an existing wallet and cryptocurrencies transaction management system which allows to model an organisation with a hierarchy of its users, manage permissions and approvals to particular operations—including transactions. The technological choices included Scala, microservice architecture, and the functional programming paradigm. The initial prototypes allowed us to evaluate the technical feasibility and choose the right tools.
We verified the algorithms and data structures that, along with the cryptographic libraries, allow us to efficiently ensure that all data processed in particular operations is real, untampered and signed using HSM.
We started working with an Agile mindset of prototyping and experimentation. Our goal was to deliver something that users could start testing as soon as possible, following the standard path of POC -> Prototype -> MVP.
After two attempts and a few brainstorming sessions, we made a conclusion that we know enough and can proceed from prototype to proper implementation. The system has been built using an agreed, improved and more informed architecture. At VirtusLab we care a lot about business continuity so it effectively meant that in the transitory period we were maintaining and developing two diverged codebases. Still, we were able to adjust and effectively deliver the solution (e.g. by using the existing integration tests for ensuring compatibility).
It took a while to achieve feature parity but eventually, a prior implementation has been replaced by a new, improved product. All this was done while maintaining a consistent release schedule for end clients.
Results - A short consultancy that turned into long-term cooperation
It was supposed to be a short-term consultancy for just a few months with the goal of helping to make an MVP version and an important release on time. The client initially planned to extend its own team. However, our cooperation proved to be so seamless that eventually VirtusLab ended up extending significantly its size of the team and started to cooperate on core pieces of the product, hand in hand with the client’s team.
VirtusLab was able to help the customer to rapidly develop POC/MVP versions, with rapid prototyping and frequent release cycle.
We rapidly scale from 2 to 6 engineers to meet the demands of changing business.
Our team’s help was crucial for securing customer’s funding for further product development.
Challenges and added value
Startup challenges are unique on its own. Requirements and priorities change frequently and many business adjustments or pivots need to be made to meet the actual needs and achieve the mythical product-market fit. Despite this, VirtusLab delivered a secure and well-tested system iteratively and we continue our cooperation up to this day.
Conclusion: Build and expand an effective team
Building your own team is a slow and often tedious process that demands a lot of effort and is characterized by a lot of uncertainty. It is even more difficult when you need to deal with changing requirements, product pivots, deadlines and struggles for external financing—realities that are all too familiar to many startups.
VirtusLab is able to meet the client’s changing needs and expand the team whenever there is a new business opportunity. Not only that, but we also can bring the new developers quickly up to speed due to our structure and processes.