Contents:
- Why the loan department needs a strong IT team
- How the frontend and mobile app development work
- How the backend of the loan issuing service works
- Scrum, Kanban and four different IDEs for one department
- How two programmers coded a new banking product in a month
- What fails happen in banking systems and how we fight them
- Why candidates go through four interviews at Tinkoff Bank
- Why refuse "Rock stars" and take juniors into the team
- How Tinkoff vacuumed up the entire market of Scala programmers in the CIS
- Why I love TypeScript and why I don't want to write in Java after Kotlin

Free course: "Quick Start in Python"
Learn moreVladimir Ivanov is a name that is familiar to many. He is a distinguished specialist in his field and actively works on projects that influence the development of modern technologies. His achievements and contributions to the profession make him a prominent figure. Vladimir Ivanov strives for continuous self-improvement and shares his experience with others, inspiring them to new achievements. Importantly, his work encompasses many aspects, including innovation and the practical application of knowledge. Thus, Vladimir Ivanov is not only a professional, but also a mentor for those who want to deepen their knowledge and skills.

An expert in his field, with deep knowledge and extensive experience, provides valuable recommendations and consultations. He analyzes current trends, researches best practices, and offers effective solutions to achieve goals. Drawing on his skills and professional achievements, the expert helps clients optimize processes and improve competitiveness. His work is focused on creating sustainable results and implementing innovative approaches, enabling clients to succeed in a dynamic environment.
Solutions Architect and Head of Development in the Credit Department of Tinkoff Business. He develops technological solutions for businesses, designs cloud systems and mobile applications. He is the author of the Architect's Roadmap and maintains a blog dedicated to solution architecture. He also hosts the podcasts Mobile People Talks and newpodcast2, where he discusses current topics in mobile technology and architecture.
Links play a key role on the web, providing connections between different pages and resources. They not only help users find the information they need but also contribute to improved SEO. It is important to consider that high-quality links can significantly improve a website's ranking in search engines. Using both internal and external links improves navigation and increases user time on the site. It's also worth paying attention to the anchor text, which should be informative and relevant. Careful placement of links within the content promotes better perception of information and increases trust in the resource. Therefore, the correct use of links is an important aspect of an effective website promotion strategy.
I head development in the corporate lending department at Tinkoff Business. The Tinkoff Group of companies includes not only our department but also such divisions as Tinkoff Bank, which serves individuals, the virtual mobile operator Tinkoff Mobile, and the online broker Tinkoff Investments. We strive to offer our clients innovative financial solutions and high-quality service in the field of business lending.
Each area of our company is designated as a business line. Within this structure, several departments operate, including accounting, cash management services, merchant and online acquiring, and compliance. One of our key areas of activity is loans.
Tinkoff Business offers unique solutions for legal entities to support their growth and development. If you already have a successful business and are looking to increase sales, you may need additional financial resources to purchase goods and expand your operations. We offer loans for business development, which will allow you not only to increase turnover but also to improve financial stability. By partnering with us, you gain a reliable partner who understands business needs and is ready to offer effective financial instruments to achieve your goals.
We strive to provide support by providing loans, simplifying services, and assisting with reporting. When we finance a business, this is truly important, as it will be able to develop independently and benefit society. Our mission is to promote the growth and sustainability of entrepreneurship, which ultimately benefits people and the economy as a whole.
We strive to provide support by providing loans and simplifying services for running a business and accounting. By providing financing, we truly help entrepreneurs, enabling them to develop their businesses and contribute to society. Our mission is to facilitate business growth and prosperity, which, in turn, positively impacts people's lives.
Why the Loan Department Needs a Strong IT Team
Our team consists of professionals who develop loan products and test new ideas. The IT department ensures the stable operation of all systems. We use a three-tier architecture: a mobile and web application, a backend to support them, and an advanced backend responsible for complex process logic. This allows us to effectively implement innovative lending solutions.
Issuing loans is a multifaceted process that requires a careful approach at every stage. When you apply for a loan, we begin by searching for your information in the Unified State Register of Legal Entities and other databases. If the collected data is insufficient to make a decision, we request additional information from you. This approach allows us to more accurately assess your creditworthiness and make an informed decision.
To determine a business's financial capabilities, it is necessary to know its turnover. This information plays a key role in assessing the loan amount and terms. Users most often upload their company's account statements from other banks into the application. This allows for a complete picture of the business's financial status and the development of optimal financing terms.
The application goes through a scoring process, during which the system decides whether a loan can be granted to the business and analyzes the associated risks. If lending is not possible, the system indicates the reasons for refusal. If approved, the available loan amount is determined.
We offer a wide range of credit products, including revolving loans, overdrafts, and lines of credit designed for government contracts. Secured lines of credit and secured cash loans are also available. If one of our products is denied approval, clients will be offered an alternative option that suits their needs and financial capabilities.
How the Frontend and Mobile App Development Work
Our frontend is developed using TypeScript and Angular. To speed up the development of new functionality, we use our own framework, known as Frame Manager. This tool allows us to effectively manage projects and integrate new features, which significantly streamlines the development process and improves team productivity.
Several Tinkoff developers have Google Developer Expert status in Angular. That's why we regularly share articles dedicated to this technology on the Habr platform. In one of our articles, we described our transition to a microservices architecture and the process of splitting the frontend into 100 separate applications. This experience may be useful for specialists interested in streamlining development and improving the scalability of web applications.
Our mobile applications have a multi-module architecture, making them modern and appealing to a younger audience. The Android version is developed using Kotlin, Dagger 2, and RxJava. We are currently actively implementing coroutines to improve performance. The build process for the consumer app takes 40 minutes, while ours takes just 10 minutes. We currently release updates every two weeks, but plan to increase the release frequency to twice a week in the near future.
We closely monitor the latest technologies and use impact analysis along with automated tests to ensure quality. These methods allow us to cover each new feature with minimal regression errors. We strive to run tests for every pull request, or at least every night, but this is time-consuming and not always justified, as new features typically only affect certain parts of the application.
Impact analysis helps us determine which tests need to be run to achieve the best results. At the recent Mobius conference, our developer Maxim Shchepalin shared his experience using this method. Impact analysis helps us plan tests more effectively and minimize risks, which is especially important during software development.
How the Loan Issuance Service Backend Works
Our loan backend consists of three microservices developed in Scala that provide APIs for the frontend and mobile app. These microservices are packaged in Docker containers and deployed in Kubernetes, running in two data centers. In addition, there are bank-wide systems responsible for money transfers, which are maintained by other teams. Our architecture ensures reliability, scalability, and high performance, which are key to the efficient operation of the credit service.
On our front-end, we use Scala, Akka, and Cats Effect to ensure the efficient operation and scalability of applications. In the near future, we plan to implement an API-first approach, which will improve interaction between system components and improve the quality of the API. PostgreSQL is the primary database, but Oracle is also used for bank-wide solutions, as this system is widely used in the fintech industry due to its reliability and functionality.
The deep backend includes microservices development using Kotlin, Spring, and Spring Boot. Camunda is used as a business process management (BPM) engine, allowing for the efficient management and automation of application processes. Using these technologies ensures high performance, scalability, and application reliability, which is essential for modern web services.
Previously, Java was used for backend development, but three years ago, the decision was made to switch to Kotlin. As a result, only one or two Java files remain for 15 services. The team prefers Kotlin for its speed, convenience, and active development. This programming language provides excellent integration with Spring and provides all the necessary libraries and tooling by default. Kotlin has become the preferred choice for development, reducing the time it takes to implement new features and improving code quality.
Some of our services are developed on the Node.js platform. We use Apache Kafka as our queue management system. A Cassandra database is used for data storage; Infinispan was previously used, but this solution was excluded.
Scrum, Kanban, and four different IDEs for one department
My department has seven teams consisting of 47 people. All participants use Jira for task management, but the choice of additional tools is made individually. The main goal is to ensure maximum process efficiency.
The mobile team uses the Scrum methodology, which allows for the effective organization of biweekly releases. The BPM teams use the Kanban method, where planning is carried out once a week to prioritize the backlog. After that, the team focuses on completing tasks. Releases occur daily, which allows for the implementation of new features and their prompt deployment to production.
We primarily use the paid IntelliJ IDEA IDE from JetBrains for coding. On the Android team, developers actively use Android Studio, while iOS developers work in Xcode. As far as I know, there are no users of AppCode from JetBrains among them.
Most front-end developers prefer to use WebStorm for writing code, but some prefer VS Code. Personally, I also used WebStorm when working with Node.js, and I can note its high convenience and functionality. WebStorm offers a variety of tools and integrations, which makes the development process more efficient and comfortable.
How two programmers coded a new banking product in a month
We have developed an effective process for quickly launching products and implementing new features. When receiving a task from a product owner, we collect requirements, conduct an analysis and look for optimal solutions. After that, we agree on the details and begin development. In our group of product owner companies, we often use the term "technologists". to refer to our team.
The technologist states: "We need to create credit lines for contract execution. If the participant wins the government procurement, we will provide them with financing." The architecture committee addresses the implementation of this product, analyzing which systems will be affected and what risks may arise. It is important to consider all aspects of the implementation to ensure the effective and secure functioning of the credit lines.
When we are faced with several solution options—one detailed and time-consuming, another quick and less than ideal—we present them to the technologist. The choice depends on the specific business situation. If we have time, we follow a standard process including thorough testing, analysis, and documentation. If temporary solutions are selected, we must also estimate the potential costs of reworking them in the future.
Creating a minimum viable product (MVP) can be an important step in the development process, especially when it is necessary to assess customer demand for a product or feature. To test a hypothesis, we can use limited resources efficiently: we'll develop a basic design, assign a small team of two people, and implement the project in one month. This approach allows us to quickly gather user feedback and make necessary changes before scaling the project.
We've launched loans for sellers on the Yandex.Market platform. A "I want a loan from Tinkoff" button is now available in their personal accounts. Clicking it redirects users to our landing page, where they can submit an application, providing their phone number, last name, first name, and patronymic. This simplifies the loan application process and makes it accessible to more sellers, which helps them grow their businesses.
Our system interacts with Yandex.Market, requesting information about the user's purchasing activity. After receiving these statistics, we evaluate the loan eligibility. If the terms meet our criteria, we open a Tinkoff Business account and transfer the funds. The client uses these funds to purchase goods, allowing them to increase sales on Yandex.Market. This approach contributes to business growth and strengthens the financial position of our clients.
We decided to accelerate the process due to the growth of online commerce during the pandemic, when a significant number of offline sales migrated online. Project testing was conducted directly on the production system, without the involvement of a separate tester; all tasks were performed by two developers. Some integrations with Yandex.Market were implemented by me myself.
We realized that everything was functioning effectively, and now we have the opportunity to improve the product. In modern business, such a pace of development is commonplace, and it should be perceived as the norm. Improving the product will allow us to remain competitive and meet customer needs.
What failures occur in banking systems and how we combat them
Banking is a vast and complex industry, so the IT products used in this area are highly sophisticated. When developing a single system across multiple teams, there is always a risk of errors or inconsistencies. This can lead to problems with integration, functionality, and the quality of the final product. The importance of careful coordination and communication between teams cannot be underestimated, as it directly impacts the success of a project. Effective project management and the use of modern development technologies will help minimize risks and ensure the reliable functioning of banking systems.
API issues can arise during the development process. On our team, one group is responsible for mobile development, while another focuses on the frontend and backend. To reach agreement on API issues, we need to hold dedicated meetings. We are often on the same page and define the API structure, but sometimes errors arise, such as typos in field names. These flaws are often discovered only during final testing, which can lead to project delays. To avoid such situations, it is important to implement stricter documentation controls and conduct regular compliance checks.
In 2022, we will create cross-functional teams that will include mobile developers for Android and iOS platforms, frontend and backend developers, testers, architects, and system analysts. This will allow us to effectively solve problems and minimize problems during the development process. Cross-functional teams will ensure high product quality and accelerate its time to market.
We have set ourselves an important goal - to implement an API-first approach. In the first stage, we will programmatically define the API, share it with all participants, agree on the details, make any necessary changes, and commit to the final version. After this, we will implement code generation for the server and client components, which will eliminate existing issues and increase development efficiency. This approach will ensure higher quality and stability of the software.
Disabling legacy services is an important step in process optimization. Recently, we experienced an unexpected shutdown of a legacy service that tracked the status of a loan application at various stages of review. We planned to upgrade this service in the future, but it unexpectedly stopped functioning on Friday.
The team tried to restore the system, but by 6:00 PM, they had failed. Some processes had already been migrated to the new engine, so we decided to urgently refine it. The team worked overtime, completed the task, and received a corresponding reward.
Scoring can be prone to glitches. Although we make all the decisions, the scoring model is developed by another department. Risk analysts develop the model, and the development team implements it in code. We interact with them via an API, and any error on their end significantly impacts our results. It is important to establish effective collaboration between teams to minimize risks and improve scoring accuracy.
As a result of this error, we were forced to deny loans to many clients. The scoring system is designed to assess a company's probability of default and produces values such as 0.10 or 0.15. However, due to a confusion between a comma and a period, the number format was changed. This resulted in some checks failing, and as a result, a number of clients were unable to obtain loans. Fixing this error is a priority to improve system accuracy and minimize risks for clients and the company.
The service is not always able to produce consistent results, as rejections are subject to a probabilistic distribution. Application density varies throughout the day and week. It's impossible to say that 100 rejections per day is bad. It's important to analyze the rejection rate cumulatively, which requires more sophisticated monitoring. Now we have the ability to conduct such analysis; all that remains is to enable notifications for prompt monitoring of the situation.
Why candidates at Tinkoff Bank undergo four interviews
The hiring process at the Tinkoff Group is standardized, which allows us to minimize the number of technical interviews in Tinkoff Business. This approach ensures an objective assessment of candidates and eliminates the situation where different divisions offer different salaries for similar positions. This creates a fair playing field for all applicants and fosters a unified corporate culture based on transparency and equality.
The interview process for Java engineers is standardized and includes three main stages, especially for senior-level specialists and above. Each stage is aimed at assessing the candidate's professional skills, experience, and ability to solve complex problems. The first interview typically tests technical knowledge and an understanding of the fundamentals of Java programming. The second stage may include solving practical problems or real-time coding, which allows us to assess the candidate's level of proficiency. The third stage often focuses on cultural fit and communication skills, as well as assessing their approach to teamwork. This structured process helps employers select the most suitable specialists and guarantees high-quality recruitment in the field of software development.
The application programming stage assesses a person's knowledge of the Java language and their skills in working with various tools. The candidate must demonstrate familiarity with the Spring framework, the ability to interact with databases from Java applications, and other important aspects of development. This confirms not only theoretical knowledge but also the practical skills necessary for successful work in the programming field.
Algorithmic testing. This section does not involve complex problems like those on LeetCode. The candidate is given a simple problem that includes a few if statements and for loops. For experienced developers, this task is fairly straightforward and doable.
At the systems design stage, the candidate is asked to develop a system design, for example, the Twitter platform. It is important to understand that at this stage, attention is not focused on small details, but for applicants for a senior developer position, it is important to collect all the requirements and incorporate them into the final design. This will help demonstrate a deep understanding of the system and the ability to perform complex analysis, which is a key criterion for successful employment.
Technical interviews are an important part of the recruiting process in the banking sector, which is carried out without our direct involvement. After this, the candidate comes to me, where we focus not on technical issues, but on the candidate's interests and their behavior in various situations. This allows us to better understand the person's personal qualities and motivation, which is important for successful teamwork.
Why reject "rock stars" and hire juniors?
When hiring candidates, I am always guided by specific business needs. When building a team from scratch, I need specialists with varying skill levels. This ensures a diverse range of skills and experience, which, in turn, contributes to the successful completion of projects and the achievement of business goals. Having specialists with diverse competencies helps create a balanced team capable of effectively solving problems and adapting to changing market conditions.
An experienced programmer is an important resource for the team. Their knowledge and skills inspire colleagues and create a positive working atmosphere. Without them, I would have to significantly increase the level of control over the team, which could lead to a decrease in motivation and productivity. Such a specialist not only helps solve technical problems but also promotes effective teamwork.
A reliable employee. Our work always involves a lot of routine tasks, so I need people who can complete them effectively and efficiently.
In a development team, it is important to have a balance between experienced specialists and newcomers. A team made up exclusively of senior specialists should not be formed, as this can negatively impact their motivation. Experienced employees should share their knowledge, which not only contributes to the development of the team but is also part of their professional growth. Investing in the training and development of less experienced colleagues is not only the right approach but also a way to increase overall motivation within the team.
I prefer to avoid collaborating with "rock stars", as they often exhibit toxic behavior. It is better to work with more modest specialists who have good soft skills. Such people are often more open to collaboration and have the ability to communicate effectively, which makes collaboration more productive.
I believe in the importance of the formula from the book "The Ideal Team Player", which states that the right candidate should have three key qualities: the desire to succeed (hungry), modesty (humble), and intelligence (smart). These characteristics make a person not only an effective team player but also capable of making a significant contribution to the development of the company. The drive to achieve goals helps overcome difficulties, modesty promotes harmonious interaction with colleagues, and intelligence helps make informed decisions. These qualities in a candidate are the key to successful teamwork and high results.
I strive to hire employees with the necessary qualities. If I notice that a candidate does not meet certain criteria, I prefer to reject them, even if they seem good, to avoid the risk of hiring the wrong person.
How Tinkoff Vacuumed the Entire Market of Scala Programmers in the CIS
At our bank, the main programming language is Scala. I have been working here since February 2021 and I can't say for sure why this language was chosen. Perhaps its immutability and other advantages make Scala an ideal choice for developing business logic. Scala delivers high performance and reliability, which is especially important for financial applications. Unfortunately, we have exhausted almost all the potential of the Scala developer market in the CIS, and finding new specialists is becoming increasingly difficult. This creates certain challenges for our further development. Therefore, we have decided to switch to developing new services using Node.js and TypeScript. We will rewrite some existing projects from Scala to other languages, while others will remain in support. If you are interested in collaborating, we would be happy to welcome you to our team. We support people in their desire to master new technologies. Some start with the frontend and learn Scala to move to the backend, while others write in Scala but have an interest in other languages and technologies. We believe that this desire to learn and expand their skills contributes to professional growth and opens up new opportunities in the IT field. Our Scala developers do not perceive themselves as elite and are comfortable moving to languages such as TypeScript or Kotlin. We strive to create a collaborative environment where programmers don't judge each other by their level of knowledge, but support each other in their development. This promotes the exchange of experiences and the improvement of skills, which ultimately has a positive impact on the quality of work and innovation on the project.
Why I love TypeScript and why I don't want to write Java after Kotlin
I enjoy writing in TypeScript. This language allows for rapid development and eliminates many of the problems inherent in JavaScript, where it is easy to make mistakes. TypeScript offers robust type checking, which I have learned to rely on. I am not afraid to rename variables, as the editor immediately points out all missing or changed elements of the code. This significantly simplifies the development process and improves the quality of the code.
I have a deep affection for Kotlin, which I worked with in mobile app development. This programming language has become my preferred choice, and after using it, Java seems less convenient. Kotlin offers a more modern and concise syntax, significantly simplifying the development process.
In September, we implemented a new business loan section in the Tinkoff Bank app for individuals. Now, clients who are sole proprietors or LLCs can easily access loan products, which has already attracted 40% of users. I was involved in this project, but the majority of the development was done in Java. As a result, I felt that after working with Kotlin, the transition to Java becomes quite challenging.
TypeScript and Kotlin are deservedly popular among developers. Although I have experience programming in Java, the language no longer holds my interest. I used to actively use C#, and that was an interesting experience, but I haven't written in this language since 2013. I'm currently focused on TypeScript and Kotlin, which offer modern features and convenient development tools.

