“End users - we are with you”: about Android development at CFT



In 2018, when using Android Pay it is possible to pay even a shawarma, the smartphone turns out to be the main financial tool for the user. Now people want to solve all the issues related to money with it. So, the corresponding mobile applications have become particularly relevant.

For financial applications developed by CFT for various customers, the total number of installations is estimated at millions - that is, few can boast of such experience in this area. Taking advantage of the fact that the company was present at our Mobius conference, we asked the head of the Android application development group, Mikhail Yemelyanov, a few questions about how Android development looks at CFT.

- To begin with, tell us briefly about CFT for those who have not heard this name before.

- The company has been working on the Fintech market for more than 25 years: when it appeared, there was not even the concept of “Fintech”, but already then it produced products and services, which are now called that way. Actually, the name “Center for Financial Technologies”, which appeared in the early 90s, still remains relevant and speaks for itself.

Of course, much has changed in the past time (who in 1991 could imagine Android?), But the essence remained the same: CFT develops and develops IT solutions and technological services that make financial transactions easy and convenient (including money transfers and payments).

The company appeared in the Novosibirsk Academgorodok, and its main development center is still located there. But now, besides him, there are offices in many other cities of Russia, as well as in Chisinau, Almaty and Dushanbe. Growth continues: new services and divisions constantly appear, the R & D direction is actively developing.

- And how many people are engaged specifically in mobile development, and can you give examples of applications developed in CFT?

—We have a distributed mobile team in Novosibirsk, Tomsk and St. Petersburg. Now it is more than 50 people, but the plans in the mobile development of the company are such that we have to grow twice as fast to meet them.

Our most popular applications for iOS and Android are “Money Transfer” (more than 1.3 million downloads on Google Play), payment offices of Beeline and Corn cards.

Also, more than 100 customized mobile applications for iOS and Android are available from our online banking provider Faktura.ru . In total, the Faktura.ru team implemented 340 projects of introducing online banking for corporate and private clients. In general, about 130 banks operate on this technological platform.

- The work with finance has its own specifics - how does the Android development in CFT differ from the “average” company?

- Since we work with personal data and user finances, one of the main rules is strict requirements for information security. We regularly deal with such topics as securing mobile banking at the API level and during data transfer, biometric authentication, Keychain, SSL pinning, etc. We accumulated a lot of relevant experience, which is why the “Basics of mobile application security” report was presented to Mobius.

But at the same time, mobile development in FINTECH does not turn into complete compliance with safety requirements, divorced from the desires of living people. The end users are still millions of ordinary ordinary citizens. Now everyone controls money from a smartphone - they pay for services, transfer money. And our final products are focused on such people.

Therefore, in Fintech, it is rather interesting to be engaged in just mobile development: there end users are, in fact, you and me. So applications should be not only safe, but also simple, the most technologically advanced. We do not create something in a vacuum, but a product for the consumer.

- In addition to the protection of information, you also need to be particularly stable: if a startup in production can get through mistakes, then they expect reliability from finance. But at the same time to turn into a slow "waterfall" and coordinate everything for six months, too, is impossible. How do you solve this problem?

- First of all, an architectural approach. We took the standard idea of ​​pure architecture, and its principles are working on real-world applications. We make new applications within the framework of division into layers, single responsibility and weak coherence of entities.

Profit: the use of various technologies without the need to rewrite all the code, high quality due to tests, and most importantly, simple scalability, which is very important for us.

We also have the strictest code rule, almost the whole team participates in it, and we mark most of the difficult moments at the review stage, so they don’t reach production.

Well and, of course, testing - almost everywhere we cover everything with unit tests, some developers write code using the TDD methodology. Of course, we don’t forget about UI not on TDD, but also about UI testing: we worked together with a team of testers to use Espresso as efficiently as possible.



“Since fintech requires conservatism, in some cases it may interfere with the use of new technologies.” Therefore, it is interesting to ask this: what have you tried in Android over the past year? And what technologies, by the way, do you use at all?

- We try quite a lot. When Google released the Android Architecture Component version, we decided to experiment and implement it in one of the new projects. But we stumbled upon a rake: for example, we did not see in its ViewModel a sufficiently effective means of solving the life cycle problem for our project. But LiveData seemed to us useful for the presentation layer.

After the result of AAC did not meet the expectations, we cut it out, replacing it with a more efficient approach. Thanks to the clean architecture, we didn’t have to redo the whole application, it was enough to refine the presentation layer. There is another example using the new ORM Room.

We are now actively developing on Kotlin. At Mobius, many wondered "why is Kotlin everywhere," but this suggests itself. It provides more features than Java, “out of the box”: the code has become much less, the functionality - more. Much can be done with a single line of code, for example, class declaration. Now we are also trying Korutin in one of the projects.

In general, we like the way Kotlin develops, and we are pleased that its community is growing. And since it has become so widespread, now, in order not to develop it, you must have very strong beliefs and principles.

We also use RxJava / RxKotlin, the popular Retrofit and Dagger 2, google data binding, we plan to try RxBinding, you can list everything for a long time. In general, FINTECH does not interfere to play with various technologies.

- You Android architecture Components did not fit - and if you can recommend them to others? How much resource-consuming has migration turned out to be: should existing projects think about this for a long time, or is it better to leave it new?

“Although AAC didn’t meet our expectations, they do some tasks well: for example, saving and restoring data when the screen orientation changes. So, if in a project with a bunch of legacy code, support for changing orientation is inefficiently implemented, then you should consider using AAC. But it will not be possible to implement this without thinking, you first need to prepare the architecture, correct critical errors and find the integration points so as not to recycle the entire application.

- The above-mentioned Room is a fairly recent technology that many have not yet had time to try. Therefore it is interesting: what was your experience with her?

- Room pleased us. Using annotations, you can easily describe the creation of tables, define transactions, etc. There is built-in support for Kotlin, Rx, LiveData. Of the minuses in the current stable version (1.1.0) - the lack of commands to clear the database and the need to configure the connection manually. There were still inconvenient trivia when using Room in Kotlin, but they gradually decided with the release of new versions. For example, default Transaction methods in interfaces were supported only in 1.1.0-alpha2.

In general, with Room, working with databases has become much easier and more efficient.

- There is a point of view "all these ORMs are from the evil one, abstractions are still going on and you have to descend to the SQL level" - what do you think about this?

- In any technology to solve non-trivial tasks, you have to write code, even SQL. The main thing is that it does not turn into an overhead. In Room, you can also write SQL queries by hand (for example, migration or complex queries), but through annotations it is much more convenient to do this. For example, you can pull data from multiple tables using Relation.

- Since CFT is older than Android itself, the question of Legacy is surely relevant for you. Do you often refactor?

- Of course, in any project there will be a legacy code. Yes, and the popular statement "any code written today, becomes legacy tomorrow" is quite true.

So it is with us. There are applications that are released a few years ago. If there are objective reasons to change the whole code (bugs, low scalability, lack of effective technologies, etc.), then we do it. We perform step-by-step refactoring, in parallel, we release features, where the code is processed by components, layers, or just screens.

Also in the use of technology. For example, in one of our projects, Volley was used as the http client. The technology is not new, and we wanted to switch to OkHttp + Retrofit. To do this, we analyzed the links in the project with the rest-client, prepared the architecture for the transition and moved to it at one time, without spending much time on it.

- CFT has courses, including Android - and what are you learning there? And what, in your experience, is most lacking for novice Android developers?

- Yes, there are several educational projects in CFT. For undergraduate students - School of Shift, in the framework of which we conducted a course of basic Android-development based on the NSU. And for senior and junior students - the Focus Start project, where there are 6 multidirectional courses, including mobile development (Android and iOS). The Android course program provides in-depth knowledge of Android, Java, Kotlin, Rx. We have already released several sets, some of the best graduates have become our employees.

Often, novice Android developers lack the experience of using OOP, the SOLID principle. Some do not understand the difference between MVC - MVP - MVVM patterns and Clean Architecture principles, because of this, business logic is misunderstood.

Also there are gaps in the Android SDK, Java, understanding multithreading and how it is implemented in Android. Well and basic: understanding of Rx, Dagger, Retrofit. Many do not try to read the documentation of various technologies.

But our practice shows that the training intensives close the gaps quickly and efficiently enough to work in IT.

Source: https://habr.com/ru/post/414475/


All Articles