Education

iOS development at VKontakte and Tinkoff — a senior developer explains

iOS development at VKontakte and Tinkoff — a senior developer explains

Free Python Course ➞ Mini-course for beginners and experienced coders. 4 cool projects in the portfolio, live chat with the speaker. Click and find out what you can learn in the course.

Find out more

Head of Mobile Development at VK, who previously held the position of iOS team leader at Tinkoff, is passionate about programming and cooking. His experience in mobile development and passion for creating high-quality software make him a valuable specialist in the industry. He actively codifies and shares his culinary discoveries, highlighting his diverse interests.

Links play a vital role in the structure and functionality of web pages. They allow users to easily navigate between different resources and pages, providing convenient access to information. Web links can be internal, directing to other pages on the same site, or external, leading to other domains. Link optimization is an important aspect of SEO, as search engines consider the quality and quantity of links when evaluating a site's relevance and authority. Effective links help improve navigation, enhance the user experience, and influence search engine rankings. Proper use of anchor text and creating high-ranking links can significantly improve a site's visibility in search results.

My programming journey began six years ago with the first version of the Swift language and the purchase of a MacBook. Currently, I hold the position of Head of Mobile Development at VK. Previously, I worked as a middle manager at Tinkoff and spent two years at an outsourcing company. I have experience comparing outsourcing and enterprise work, and I can explain why working in an enterprise has its advantages.

Outsourcing often involves performing tasks for different clients, which can be interesting, but also unstable. In contrast, in an enterprise, you get the opportunity to work on long-term projects, see the results of your work, and develop within a single company. Moreover, an enterprise offers more stable working conditions and opportunities for career advancement.

The Difference Between Enterprise and Outsourcing

Enterprise in IT means working in large companies on large-scale projects. In such organizations, the business sets clear deadlines for releases, but within these timeframes, the team independently determines priorities and allocates resources to solve them. One of the advantages of working for an enterprise is a fixed salary, which provides stability for employees.

Outsourcing organizes work differently. Clients often face limited budgets and strive to deliver a finished product as quickly as possible. This forces developers to choose between creating a low-quality product or reworking it, which can negatively impact the final result and deadlines. In such circumstances, it is important to find a balance between quality and deadlines to meet client needs without sacrificing professionalism.

Outsourcing company managers pay special attention to tracking their employees' work time. To do this, they use specialized programs that allow them to track time spent on tasks. This helps not only with project management but also with justifying the final cost of services. For example, companies can provide transparent data on the number of hours spent on a project, which builds client trust and confirms fairness in calculations. This approach allows outsourcing companies to effectively manage resources and improve the quality of services provided.

Enterprise teams typically consist of a small number of specialists. For example, our team has only three iOS developers. However, there are also larger projects where up to twenty iOS developers work on a single product. Our team also includes Android developers, managers, designers, testers, and back-end developers, requiring active collaboration with a large number of participants. This collaboration enriches the project, allowing for the combination of various skills and expertise.

In large companies, software development is carried out with careful planning of deadlines and developer tasks. This is one of the key distinguishing features of enterprises compared to outsourcing. In outsourcing projects, situations often arise where, due to budget constraints, products are created "as is," and their release occurs immediately after development is completed. This approach can negatively impact the quality of the final product and its compliance with user needs. Therefore, the importance of competent planning in large companies cannot be underestimated, as it ensures a higher level of quality and stability of the solutions developed.

What languages ​​and technologies do iOS developers use at large companies?

Currently, Swift is the primary programming language for iOS development due to its simplicity and active support from Apple. This makes it one of the most in-demand languages ​​in the labor market. Large companies such as Tinkoff, VK, and Alfa-Bank actively use Swift in their projects. Some of our projects still contain legacy Objective-C code, as many third-party libraries are written in this language. To effectively work with multiple codebases, we use the GitFlow version control system, which helps us maintain order and manage changes in the project.

Branch diagram in the GitFlow version control system Source: Atlassian

Tinkoff had a separate repository containing common components, such as chats and document scanning tools. A unified design system was also developed for all applications, simplifying the use of code across different projects. This task was handled by a dedicated team. The VK ecosystem has many different design systems, so creating common components for all projects is impractical.

The main problem with our app is the difficulty of implementing new technologies. This is not only due to the time it takes to learn new tools, but also to the fact that users are reluctant to update their devices to the latest versions. As a result, we are unable to use SwiftUI, Combine components, and other innovations available in iOS 13. Many companies continue to work on iOS 12, while others are actively using the features introduced in iOS 14. This creates additional barriers to developing and implementing modern solutions in our app.

Increasing the number of users of your app complicates the process of switching from one language version to another and implementing new technologies. The more users you have, the higher the risks and costs of updates and adaptations. Therefore, it's important to plan changes in advance and consider your audience's needs to ensure smooth app operation and minimize negative impact on users.

I develop iOS apps using standard libraries such as UIkit, Foundation, and Core Data. These tools help me with interface layout, networking, and other essential tasks. I use Xcode and various plugins, including linters and resource generators, which significantly simplify the development process. We also actively utilize unit and snapshot testing, and practice Continuous Integration (CI) to automate project builds and their subsequent delivery to testers and the App Store. This approach allows us to maintain high code quality and respond quickly to changes.

To optimize development and reduce the amount of manual coding, I use OpenCombine and frameworks for analytics and networking. Working with databases isn't my primary focus, although at Tinkoff we had specialized libraries for working with SQLite and Core Data, which provided secure data encryption.

During my time as a middle manager at Tinkoff, I designed individual application components, interacted with databases, and implemented new features. Currently, as a team lead, my primary focus is creating a scalable and easily maintainable application. While I previously focused on button design and individual screens, today my work includes developing the application's architecture, which improves its performance and simplifies future development.

My typical day includes holding daily meetings, discussing tasks with the team, debugging, and resolving infrastructure issues. When planning a weekly sprint, additional tasks often arise that need to be completed by the end of the week. These activities help optimize work processes and improve the overall team efficiency.

How updates are made and bugs are fixed

We follow Agile principles, which allows us to effectively organize work processes and control task execution. Our team works in two-week sprints, after which we hold a retrospective to analyze the results and identify opportunities for improvement. After this, we move on to the planning stage, during which we review the backlog together with managers, estimate time costs and task priorities to form a new sprint. This approach promotes high work transparency and a clear distribution of responsibilities among team members.

Our main goal is to complete the maximum number of tasks. At the same time, we are not too strict about deadlines - if we do not manage to complete a task by the established deadline, we postpone it to the next sprint. This approach allows us to maintain productivity and flexibility.

When a bug appears, we first prioritize it and then decide on a fix. In most cases, we fix bugs within a few days, but there are complex cases that require significant time and resources. After fixing the code, we hand it over to testers and then to Apple for review. In total, the bug fixing process takes one to three days.

The speed of developing new features directly depends on their dependency on the backend. For example, changing badges can be completed in one to two days. However, implementing the authorization process in the application takes significantly longer – in our case, it took over two weeks. This was due to thorough testing of all possible scenarios and the need to wait for the backend team to complete its work. This emphasizes the importance of synchronization between the frontend and backend teams to optimize the development process.

Every month, we complete one or two releases, combining all the tasks completed in sprints. Some teams regularly release updates every two weeks, using a different technology to deliver new features to users. This allows us to keep the product current and quickly respond to user needs.

Why join a large company

Before choosing a job, it's important to clearly understand your expectations. For me, stability and clarity are priorities. I want to know how much money I earn and what exactly I'm getting paid for. It's also important to have my own area of ​​responsibility, which allows me to effectively manage resources and properly balance time between work and personal life. Understanding these aspects helps me make more informed decisions when choosing a career path.

Working for a large company provides income stability and clear financial expectations. You always know exactly how much you'll be receiving each month, which allows you to plan your expenses and budget. This level of predictability is a significant advantage for many professionals seeking financial security and a secure future.

Startups offer unique opportunities for personal and professional growth. Being immersed in various aspects of the business beyond development can greatly expand your skills as an entrepreneur. However, be prepared to sometimes work more than you planned.

Working for a startup has its pros and cons. The main downsides are unstable income and frequent overtime. However, the pros are also significant: if the startup is successful, you can receive a significant stake in the company and improve your financial situation.

It's important to trust your gut instincts. If you seek stable employment and a reliable income, choose the enterprise sector. However, if you enjoy taking risks and succeeding in a dynamic environment, startups may be your ideal choice.

There is a third option: outsourcing. In this case, you develop programs for various companies, which often don't have a clear understanding of their needs and are limited in budget. As a result, you may not have time to develop your skills, as you will be constantly switching between projects. I don't recommend outsourcing for mid- and senior-level developers, but for beginners, it can be a good experience.

What you need to work in IT

A university degree is not always a guarantee of successful employment in the IT field. Many programmers began their careers without formal technical education and achieved significant success in the profession. The most important aspects for a job in IT are practical skills, experience, and the ability to self-learn. Employers are increasingly looking at a portfolio of work and the real achievements of candidates, not just a diploma. Therefore, even without a higher education, you can build a successful career in IT if you develop your skills and actively participate in projects.

Still: the film "Fast and Furious 7"

In interviews, we focus not on the presence A diploma, but rather the technical knowledge and skills of a programmer. A candidate's experience and professional qualities play a key role in the hiring decision. If a candidate does not meet our requirements, we will not consider them, regardless of whether they have a diploma or not.

There is a common belief that all programmers are introverts. While this may be true for many, experience shows that having developed soft skills significantly facilitates the job search, improves interaction with a team, and contributes to the development of other professional skills. Communication and collaboration skills are becoming important assets in the labor market for programming specialists. By developing these skills, programmers can not only increase their competitiveness but also create a more effective working environment.

In addition to passing the technical part of the interview, it is also important to be an interesting conversationalist. The employer wants you to feel comfortable working in a team. During the process, you will have to interact with managers, designers, quality specialists, and backend developers. Interpersonal skills will help you better understand tasks and effectively explain them to colleagues. Developing soft skills will significantly increase your value as a specialist and improve the atmosphere in the team.

Many developers sooner or later strive to share their knowledge and experience at meetups and conferences. Soft skills play a crucial role in this process, helping to effectively convey information to the audience. The ability to communicate, present your ideas, and interact with people becomes key to a successful presentation. Developing these skills opens new opportunities for career growth and professional development in the industry.

How to pass interviews and what to teach beginner iOS developers

Interviews at large companies are a difficult and stressful process, especially for applicants without experience. It is important to prepare for this stage to increase your chances of success. Understanding typical interview questions and the specifics of large companies will help you feel more confident. Preparing your resume, researching the company, and practicing answers to frequently asked questions can significantly improve your position. Remember that even a lack of experience can be compensated for by your motivation and willingness to learn.

The main goal of the interview is to assess the candidate's level of knowledge and skills. The interviewer asks in-depth questions to identify areas where the candidate may have doubts or difficulties in answering. Interviewing is a process that can only be mastered through practical experience. However, preparing for the interview is a key step that will help increase confidence and improve results. Preparation includes studying typical questions, analyzing your own achievements and skills, and understanding the job requirements.

I recommend everyone create a GitHub account. For our team, this is a key aspect in evaluating candidates, as it allows us to evaluate the quality of their code. Having an active profile with starred projects significantly increases a programmer's chances of career success. GitHub serves as an important indicator of skills and experience, making it an indispensable tool for developers.

There are many platforms online that can help you learn development and prepare for a technical interview. Below is a list of resources useful for all developers:

  • Twitter. This social network is home to many developers who share their experience and knowledge. For example, John Sandell, a Polish programmer, writes articles about new technologies and guides for beginners. They are all in English, but very interesting and useful. So if you don't have a Twitter account yet, you're missing out.
  • Telegram. There are many great channels about iOS development here. For example, iOS Good Reads or the programmers' channel from Dodo.
  • YouTube. There are plenty of channels about iOS development here. For example, Paul Hudson, AppleProgramming, and CodeWithChris.
  • Courses. This is also a good way to master the profession, especially if you lack motivation or need a mentor. You can find both in courses. But even if you take courses, continue programming independently and read additional resources.

For beginner iOS developers, learning UIKit is an important step. This framework is the foundation for iOS app development and underlies SwiftUI. Most existing iOS apps are built on UIKit, making knowledge of it essential for a successful start in development. By mastering UIKit, you'll gain a solid foundation that will help you better understand SwiftUI and simplify the process of creating modern apps. For those transitioning to iOS development from another technology stack, taking a specialized course is recommended to make the most of your time. Free YouTube tutorials or Stanford courses are excellent options. It's important to be highly motivated and eager to learn, which will help you quickly master the necessary skills and delve deeper into iOS app development. Creating projects is an important step in mastering new technologies. Don't be afraid to experiment and implement your ideas. SwiftUI is a powerful tool, but you have many other options. The key is to get started and develop your skills, regardless of your chosen platform or programming language. Write, try things out, learn from your mistakes, and don't hesitate to share your projects with the community. Your experience can inspire others!

What an iOS developer does and dreams about outside of work

In mobile development, I value the opportunity to be part of large-scale projects. My apps are used by users, and the results of my work become immediately apparent. This brings satisfaction and inspires further achievements in the field of mobile app development.

I don't devote much time to my projects, but when I start writing, it always involves learning new technologies and tools. For example, I had no experience with 3D graphics, and I had never rendered triangles and polygons. This piqued my interest, and I decided to download a book on the topic and create a project that could become something significant. I also once wanted to understand how dependency injection works, and as a result, I developed a library that has garnered 100 stars on GitHub. This is very gratifying and inspires me to continue experimenting.

While working remotely, I realized that it would be great to work for a company abroad. The main incentive for me is the opportunity to work in an English-speaking team, which will help me significantly improve my knowledge of the language. At the moment, this is extremely important to me. Working in an international environment will not only enhance my professional skills but also provide an opportunity to immerse myself in the culture and practice of communicating in English.

The desire to live in another country presents a unique opportunity for personal and professional growth. A change of environment promotes the development of communication and adaptation skills. When we remain in a familiar environment, progress becomes more difficult. This also applies to a career: staying in one position for a long time can lead to stagnation. Therefore, the experience of living abroad not only enriches one's biography but also opens new horizons for self-improvement and career growth.

Reworking text with SEO in mind includes using keywords, improving sentence structure, and making it more clearly worded. It is important that the text remains informative and relevant to the topic.

Read also:

  • iOS Developer: Salary, Career, Where to Study, Where to Work
  • "Data Science is a synthesis of all my interests"
  • Who is a mobile developer and how to become one