Should I Consider Working In Fintech As An Engineer?
Tags: fintech, career, discuss
Published: 2022-01-27 12:38:56

_Yes, if you would like to learn how to create reliable software, fast. However, it usually comes at a cost._

## What inspired me to write this

The several years I spent building some of the core systems in a top unicorn fintech turned out to be a challenging, yet incredibly satisfying time. I was very lucky to meet some of the brightest software engineers in my career so far. Overall the experience also boosted my expertise as a professional.

However, as fulfilling as the experience was, it may not be for everyone. Here are a few thoughts that will help you make a more informed decision about whether or not to add a fintech to your career portfolio. These thoughts are based on my work experience and relationships with engineers both inside and outside of the finance domain.

## A few words about the industry
Finance is special. It plays a vital role in society, and so is strictly regulated in almost any country. This causes decision-making and execution to be much slower and more “corporate”, as even minor negligence may cost a company its reputation and lead to hefty fines.

Technology has recently started to liberate that space, making even banks be seen more like technology companies on a more regulated side of the business, with all the same challenges to overcome.

## Who can you meet there?
As Fintechs compete with traditional big players in finance, they need to develop features much faster, provide superior UX while maintaining regulatory compliance. Time to market is essential to acquire new customers and retain them. For engineers, it usually means a lot of pressure and a demand for creativity, given the resources are scarce and roadmaps are fluid. This creates a demanding entry bar for talent.

Joining a growing fintech company can be a lucrative decision. Not only are compensation packages usually above the market average, but also the industry self-selects for people who are more motivated, structured, and goal-oriented. This forms a great environment for someone who wants to grow not only as a professional but as a person as well, quite possibly making a few very important connections.

## The technology side of things
A considerate, pragmatic approach to technology and the development process is of utmost importance in Fintech. Not only does it have to support the ever-growing ambitions of the business, but also has to keep regulatory and reputational risk managed. Trust and reputation pay long-term dividends.

Business problems usually revolve around managing different entities (like users, accounts, assets), their relationships, and states. The most complicated part here is preserving the consistency and integrity of the data as requirements change (be it growing load or introducing new features). 

This requires a relatively solid understanding of, at least, the following:
- **Distributed systems**: the ability to understand how different agents collaborate within the network, as well as how to manage consistency/availability/partition tolerance of such systems if required ([CAP theorem](https://en.wikipedia.org/wiki/CAP_theorem))
- **Concurrency control**: consistency of shared resources is a fundamental problem, relating here to the way concurrent resource access is managed both on a database level ([transactions](https://en.wikipedia.org/wiki/Database_transaction#:~:text=A%20database%20transaction%20symbolizes%20a,any%20change%20in%20a%20database.), [row locks](https://en.wikipedia.org/wiki/Record_locking), and [isolation levels](https://en.wikipedia.org/wiki/Isolation_(database_systems))) or on the business logic level in the corresponding implementation language runtime
- **Writing well-tested code**: automated tests should ideally cover at least the main business functions of the code, to prevent systems from potential major degradation due to the human factor, and to serve as decent documentation over time. Unit-level tests are highly desirable too as they will make sure smaller parts of the code are properly abstracted and functioning according to the defined contract.

System performance is important, but not as important as consistency. Card transactions, client-facing operations, market orders, etc. should be done fast. However, for the most part, latencies within a few seconds can be tolerated.

In some other domains, for example, video or music streaming, availability and overall performance, as well as responsiveness is paramount. The same is true when developing different analytics engines for example — sometimes partial data loss can be tolerated and interpolated/back-filled without any significant repercussions. Such a setting would allow for a bit more freedom when it comes to trying and using some of the new technologies that have potential benefits in speed or developer experience.

This implies a different learning trajectory for a fintech engineer: you may not be able to learn as many new cool technologies or develop systems digesting terabytes of data in minutes, but, you will learn how to write quality code and deeply understand everything that happens to the data streams systems handle.

## A few pinches of salt
Retaining employees is very hard and failing to do so may come at a serious cost, especially in finance. Even with well-tested code, some parts of the system may be more obscure than others and easily become sources of unexpected bugs once more experienced engineers leave the company.

Naturally, people change jobs for many reasons, but so far I have been able to observe the following be among the most popular ones:
- **Boring and routine problems**: once people get accustomed to the basics of the domain, some may get stuck in a plateau, doing repetitive work. Unresolved technical debt and a reactive approach to product management are usual causes for this
- **Stressful environment**: venture-backed fintech companies tend to optimize for growth, and sometimes rapid company scaling may lead to toxic culture or unbearable volume of technical issues when company structure or systems architecture was not well-thought upfront
- **Limited career path progression**: fintech is naturally a bit more limited in terms of engineer progression than some other technology companies, as it heavily relies on the knowledge in the main business domain, and promotion beyond “senior” may come with additional requirements to know the intricacies of finance, which is not for everyone

## Place of Fintech in your career
For a technologist, understanding how things work is very important. Given the fast growth and attention to detail required, spending a few years in a fintech may be beneficial for someone who wants to boost their confidence as a software engineer and learn some of the essential tools in greater detail, as well as master programming and system design skills in a rapidly evolving environment. However, staying longer would require a keen interest in the finance domain, the ability to manage and dedicate time to work sustainably, and finally, accepting a potentially limited career progression as an engineer.