iOS chapter stories

TBC Engineering
TBC Engineering
Published in
13 min readSep 28, 2021

There are a lot of chapters in TBC which combine people with the same competence and interests. Luckily we have an iOS chapter too, with excellent talents in different stages of their careers. Each of the chapter members has a distant past and present experience with the ecosystem or working environment. All of them can provide unique perspectives and angles on different topics.

We want to introduce a mini-series of articles that will contain different thoughts about various subjects. It could be a comment, some life experience, or a technical challenge. This kind of format could initiate new ideas or motivation to explore.

We took the inspiration from the book Living by the code. Living by the Code brings the experiences and insights of over 40 of today’s top developers, leaders, and innovators in tech together in one single book. We took the same idea but in a smaller format.

Let’s 🤿 in

Giorgi Sandroshvili

When I think about the job, My very first necessity is the ability to grow. So I’m always striving to work with the newest technologies that our platform suggests to us.

WWDC was quite thrilling this year. Even though I haven’t seen all of its videos, the developer soul is already full of freshness. As new features in language and technology are so essential, we need to somehow satisfy technological geeks in ourselves. The projects we work on might not always allow us to work with such modern technologies, as they might support old iOS versions. There is the moment when the chapter joins the chat to give us building blocks of our growth. I want to remind the first talk that I gave to the chapter. It was about Combine. I was a bit nervous. Okay, maybe a byte, not a bit. I discussed the key parts of that framework and its usages. I thought it was not a good presentation, but my colleagues’ feedback kept me motivated and striving for more. I’m glad to be a part of the team, which is enriched with empathy, alongside the tech skills.

Shota Ioramashvili

In the iOS chapter, we have weekly meetings around some specific topics. We chose the topic and presenter in advance. Sometimes we go without a presenter and discuss. The previous several weeks were exciting and interesting for us as for the community. WWDC21 brings the familiar feelings of freshness and sadness simultaneously (Yes, you know what I’m talking about 😭).

We discussed and analyzed tens of sessions around different topics, and the Developer app helped us, especially with a Code tab. Swift 5.5 reminded us about the never-ending journey of improvement and moving forward. For example, Async/await will fundamentally change how we reason in Swift. One of my favorite presentations was the more matured SwiftUI and deep dive about what’s going on behind the scene. But the real show-stealer was the Xcode cloud. The team pushed it and delivered one of the most exciting additions to the Apple development ecosystem. Also, Xcode code review and collaboration improvements truly shined.

This is a part of the year when we are all buzzing. 🥁

Levan Koberidze

Imagine when the project is in the initial and the most crucial phase, time is against you, and your experienced partner quits the job (yes, it often happens). Now you are alone for an indefinite period, and all the responsibility falls on you. You are alone in making the most critical decisions to solve the problems. It is an unpleasant but, at the same time, the most enjoyable and memorable experience.

One thing is to make all the conditions for a person to learn, grow, assist, give feedback, and all this to happen gradually, slowly but surely, and the other one is to throw them directly into the fire. As a result, they will go through the most crucial situations and stages that will be life-changing and key for their future success. So both have their advantages and disadvantages, and it is exciting if you think about it.

Nino Godziashvili

What drives us?
I guess a person is constantly looking for something like a destination. I once heard that happiness is in achieving a goal and not in the destination point. Indeed, if you look back, you realize that only this way brings you joy, which does not seem so pleasant initially. New goals appear, and you go … go endlessly and grow from previous experience. I mean, you are not the same person as you were before.

One evening, on the social network, I saw a post from Geolab. This is how pot was started “We have a special offer for special Witches at the Digital Magic School. Take the online test and learn the spells of the mobile app world. After testing and interviewing, our Distribution Hat will tell you if you are ready for this challenge or not”

Was I ready? Yes, I was, and I knew it! It was like an inner voice. After testing and interviewing, I was waiting for several hours when they called me, and I remember how happy I was when they chose me, and I realized that the learning process was ahead.

If anyone ever asked me what enthusiasm meant, it was exactly what the learning and project-making process gave me — from the beginning to the end. I realized that I loved solving those problematic issues and feeling after the solving process brings.

Two years have passed since the submission of this course. During this period, I studied, worked, developed, and had many exciting challenges as Test Automation Engineer and Chapter Lead.

Circumstances were in such a way that the continuation of the learning iOS did not come out despite my attempts. Still, I am convinced of one thing — often circumstances are created so that even if you decide something, this time may not be the best for you. In such a case, you should realize that it is because even greater joy awaits you in the future.

Then there was the realization and my thoughts that unfulfilled dreams are behind us, and if we do not take steps, it will remain where we left them off, and then I made a decision, and I think that it was the right time. Friendships … I mean precisely the massive support on this path from the people !! Without it, probably nothing is worth it. The thing is that I always had in mind that someday I will become an iOS developer .. Yes! It came out after a lot of hard work and a journey! Today I am who I am .. I guess this is exactly what we drive.

Khatia Khutsishvili

Some people think that open-mindedness is not essential for a developer to be a professional. If the developer knows technical skills very well, that’s enough. I don’t think so. I believe broad thinking and interest in various things help the developer in many ways. The more open-minded a person is, the more enjoyable the process of working with her. Developers have to work with people from many other professions. For example, with designers, testers, CJE-s. It is vital for the developer not to be locked into her world, have a good understanding of business ideas, and empathize with the user’s pain. This brings her closer to the product she is working on, her teams, and the users. An open-minded developer is receptive to news and new ideas. In addition, open-mindedness and receptivity to information, and interest in the difference can make the developer avoid the routine. When a developer becomes more specialized and can engage in management activities, these skills will significantly help leadership and bring collaboration to the highest level. Also, mind openness promotes acceptance of criticism as well as personal growth. These unique qualities are valued today and should have been as open-minded, open, friendly as a good developer. This will increase her professionalism a lot.

We all know very well that development means constantly learning new things and therefore it is necessary to have an interest in innovations. Of course, we can generalize this issue of open-mindedness to other professions. Still, developers need to be reminded that we should not lock ourselves in a shell and not just be busy writing code.

Giorgi Bostoganashvili

For the advancement of a developer, especially in the early stage of a career, besides motivation and hard work, it’s vital to have an environment that provides you with the opportunity for stable growth. The primary indicator of such an environment is the culture of sharing experience and knowledge in a team. When a person is presented with a task for the first time (not just in the tech, but in general), they tend to proceed with trial and error, which might be an effective method of problem-solving, but it’s a long process. Mentorship of an experienced person or simply observing the patterns of solving specific issues requires remarkably less time. It can be invaluable to work with people who have successfully walked the path you’re on.

Weekly chapter meetings in TBC serve this exact purpose. Discussions related to WWDC week were incredibly informative. The material was immense, and the time was short, but the information shared in the meetings emphasized the most vital points and groundbreaking innovations. After discussions, I found it easier to put the correct accents on the material and structure it better.

Sandrika Janjghava

As an iOS Engineer, developing features takes a lot of time and dedication. Sometimes we do only the things which are business logic related. Maybe you are working in a place where only a simple product is needed. When I look into some applications as a user and not an iOS developer, it is important to see some animations. Also, I’m always trying to do complex or straightforward animations in my projects. Maybe you often use UIView’s property isHidden, if we try not to use isHidden property (if not using StackView, because, with isHidden property, we can make a great simple animation) replace with property alpha, will do the same thing. Alpha = 0.0 hides and alpha = 1.0 shows; So if we put it in some UIView animation block, we will get simple great animation, it will take your work’s 5-minute maximum, but for the user, it will be more valuable. For example, I like Revolut, Wolt, and many other applications with great UI and the toughest animations, but fantastic for the user. Also, everything can be animated, but of course, it needs more code lines.

You can animate UITableViewCell, UICollectionViewCell, UIScrollView, and many other exciting classes, with whom we live every working day. Imagine you are in a bank’s application and trying to end your credit, or you are in some payment application and must pay a significant sum of money. Yeah, sorry, no animation will help. :)))). But if you are making a different application, you can add some animations, and it will be more fun. In my iOS development career, I always try to make animations. Of course, there is no need to do it, but it is a pleasure to make the app more modern than it is now. Also, an exciting thing is introducing hidden features with your teammates on your current project. For example, my previous position was in a bank too, and there we were having onboarding flow, where a user must take a selfie. We were using Google’s vision for detecting user’s selfies. I wanted to use Apple’s vision, but that project was on a lower version of iOS 10.3, and Apple’s vision is from iOS 11. So I implemented the hidden feature when the user is smiling and taking selfies Google Vision can detect the smile (of course Apple vision can do it better :)) and had some text with typing action “Keep Smiling”, this was my first hidden feature, which was tested only by two persons, the first person was me and the second one, was a tester, after the second person, I got a bug with high priority, and the feature was lost :(, :))))

So it’s exciting and fun to make your application as a live person. The app is alive and humorous for your users if you are using animations, so I recommend making some awesome animations in your app, which will not take much time. I think switching from writing code depending on business logic to animations will be less stressful. See ya.

Mishka Chargazia

I remember when I tried to write my first unit tests, it’s been only 3–4 months since I started working in TBC as an iOS developer, and I still wasn’t that experienced to feel confident with writing my code for such a big project. I was a junior developer who had just started to fix some minor bugs, and now I’ve been told to unit test the code written by another developer. So I started researching and studying the nuts and bolts of the unit testing. I learned the basics of the XCTest framework, mocks, stubs, and much other related stuff, and I thought testing the code wasn’t a big deal.

So after understanding the basics of the framework, I started right away with writing my first unit tests. It was an easy job. I looked at the code, figured out what it was supposed to do, and wrote tests to check if it did its job, I executed them, and everything worked like a charm. To be honest, I liked it. After a while, I even presented the unit testing at our iOS chapter meeting.

But the real thing is that, now, when I think about those days, I realize that I didn’t even really understood the term “unit testing”. I was asking myself why I should do it? What value will it bring to the project? Is it just a waste of time? I was writing them because I was told to do so (and this was one of the biggest mistakes I’ve ever made as a developer). I would like to tell you the continuation of my story of how I started appreciating the power of unit testing. But for now, I think it will be better to tell an example that could be applied to any of you reading this without unit testing experience.

So, let’s say you’ve been given a new feature to work on for the next few weeks. You work hard to get it done, write some complex logic and try to do your best to make your code look remarkable, readable, and understandable. Finally, you finish working on it, run it several times to make sure it works perfectly, and now you are confident and proud of what you’ve done. You give the feature to testers, a few hours pass, and everything seems okay, but soon they report one bug. Still, okay, everyone makes mistakes… oh no, another bug… one more, more and more, and now you are looking at your code trying to figure out what’s wrong, you find the problem, fix it quickly, run the code, and Jokes on you! Those changes have broken another part of your code. Now you have to refactor your code so that this change can be applied. You start refactoring one piece, which leads to refactoring another one, you spend hours, and soon you come to the point where you realize that you have refactored almost half of your code. Now that painful, itchy thought that this code should be tested again and it still may have bugs, and you will have to go through the same process, again and again, keeps you awake at night. So, you start thinking of the way to break this infinite loop of fixing code and refactoring, and here comes our savior — Unit Testing.

Yeah, I had to go through this hell to understand that unit tests don’t just exist to show your managers how high your code coverage is. It’s a development tool that gives outstanding performance when creating new features, fixing bugs, or refactoring the legacy code. Once, as a new team member, I had to refactor the legacy code (which wasn’t covered by unit tests) to the new architecture pattern. Other developers approved my pull request, then it was tested by manual testers, and the code was deployed to production. After a few days, several users reported that they weren’t able to use the feature. It turned out that I missed some of the critical points while refactoring, and the functionality was partly broken. Shortly, unit tests play a significant role in making the code resistant to future changes and refactor when it comes to the legacy code. These are the real purpose behind the magical power of unit testing, which leads to creating maintainable, adaptive, and fast-growing projects.

So, nowadays, I try to cover every piece of code I write with unit tests and try to get the coverage as close to 100% as I can, hoping that while it makes my life easier, it will also help future team members to avoid such painful experiences as described above.

Mariam Babutsidze

During WWDC 2021, we discovered many interesting opportunities to make our applications greater. One of them is new tools in the Xcode Organizer.

Using TestFlight to test beta versions is really handy. In Xcode 13, now it’s available to see crashes from TestFlight builds along with the App Store in the Organizer. What is really cool is that it becomes straightforward to see the tester’s feedback on every crash, and from the Organizer, we can easily navigate to code where this crash has occurred.

We can now filter crashes by time period within a year’s worth of crashes. Also, filter by extensions, like Widget, App Clip, or others.
Being in touch with our teammates is the key to the working process.
So now we can easily share crash reports directly from the
Organizer.

It is easier and faster to analyze and fix crashes when we have every
data we need in one place.

Nikoloz Tatunashvili

My career started as an Android developer, and then I began iOS. After that, I couldn’t stop myself from noticing the similarities between the two platforms.

I believe both have the same logic, capabilities, and UI similarities.

AppDelegate and MainActivity are very similar. They both are apps “entry point”, and the place you should normally allocate your first app instances, or in case you are using dependency injection (And you should), this is the place you would usually start it.

UIViewController and Fragment both act as screen UI representatives to receive app lifecycle events and responses to user interaction.

iOS has been using UITableView since its first launch. UITableView re-uses its cells (Platform-specific name for row items) because it’s considered a time-consuming task to create new ones while scrolling. On cellForRawAtIndexPath you will get a new or recycled instance of the current cell per index and customize its presentation. Android, on the other hand, is using RecycleView. RecycleView uses an Adapter, which decides on how many items will be displayed and what type of items. RecycleView uses a “ViewHolder” to keep a reference to items created. Instead of creating new instances (inflating them), it re-uses ones that already exist.

Salome Antidze

When I decided to be a developer, I didn’t have a specific direction chosen. At first, I started to work on the backend side, on a database, and I liked it, but I was always motivated to learn new languages and technologies. I’ve worked mostly as a .net developer and an Angular developer, and even as an Android developer for a short time.

When I was first introduced to the iOS device, I immediately wanted to learn how to write apps for it; everything was so organized, user-friendly, and consistent. After writing some simple apps, I was motivated and decided to focus on being an iOS developer. Since then, I think I learned and grew a lot here, in TBC, and of course, I’m continuing to improve

--

--