Breaking the loop
November 26, 2019 • 7 min read
Initially, this meant to be a simple technical post about my path from being just a native iOS developer to learning JS and React(Native). It actually still is. But it’s also about something else, so bear with me even if you have no clue what is iOS, JavaScript or software development in general.
How I ended up where I was
I’m working full time for almost 10 years now (wow, to be honest, this is the first time I gave it a proper thought. It’s a lot!).
My first project was C/C++ with Qt, then I switched to Android, then to iOS. As I worked in a large outsourcing company and was fresh and green, I had little choice and understanding in terms of what technologies to learn and work with. Everything was mobile-oriented anyways, everything was interesting, so I just followed the flow. During my 3rd career year, iOS happened in my life and I loved it so much that decided to stick with it for much longer.
When trying to remember what were my feelings about switching from Android (Honeycomb aka 3.x back then) to iOS, the first thing that comes to my mind is “experience”. And by this I mean not only user experience, but development experience. After Qt Editor and Eclipse, after half-working Honeycomb emulator, there was XCode. Fresh and shiny. Just working as expected. Feature-rich, slick. Let’s admit - it was just hot compared to alternatives back then. From writing code to editing custom UI - it felt just right and was a breath of fresh air to me. I got very motivated, because not only I was able to develop software for the best smartphones on the market, but also my everyday developer life changed - it just felt great (and “it just worked” in most cases).
Of course, there were bugs and issues. Any software has them. But opposed to my previous experience, it was nothing compared to the joy I got daily.
How the loop started
I worked like that for some long years. I survived iOS 7 launch - the one that had a complete redesign. It used to have a reputation for the most problematic release, both for end-users and developers. I survived Swift launch. Even though I love modern Swift, it was close to disaster for the first two years if you were brave enough to use it in production.
When you work with something or do something every day for a long time, you tend to become much more sensitive regarding that particular thing. With years, I started noticing more and more problems with Apple software and hardware. I kept expecting the same “it just works” magic, but magic diminished from year to year. Partially because my requirements grew, but partially - because of the quality of products, especially software, that Apple is shipping, decreased dramatically.
I still admit that MacBook is the best work machine for almost any modern software developer. I still love iPhone and I don’t really want to switch. But what Apple does lately started to frustrate me more and more.
What’s more, the overall quality of Apple software demolished magic feeling from my daily work. XCode nowadays lacks a lot of features compared to other modern IDEs. It’s pretty sad to work in the native code editor, that is tailored SPECIFICALLY to support only Objective C and Swift, and get code completion not working half of the time. Such basic feature as code refactoring is still unreliable. My daily work mostly consisted of fighting with iOS SDK and writing different workarounds for it over and over again. I don’t want to turn this into another Apple-hate post, but I ensure you that is list is long. For me, native iOS development turned from magical experience to a source of constant anxiety.
Another topic that started worrying me more and was my dependency on Apple. I’m in iOS native development for a long time, and even though I have more skills than just plain Objective C and Swift, it’s still was my main focus. Apple goes bankrupt (yeah right) next year, and I’m out of competition suddenly. Yeah, I know that any software developer can learn a new language easily, and this is true. I also know other languages that I used to enhance my daily iOS work. It’s also clear to me that mastering specific technology is only a small part of being a developer. But I have spent so much time in this ecosystem and missed a decent amount of changes that happened around me meanwhile (simply because it’s physically not possible to stay on track with everything due to the amount of information, and keep all the different skills at the level that could allow me to join the same level role as I already had being native iOS developer). I also started feeling tired of having my work being influenced by only one company.
I became a sad, depressed person. I didn’t want to wake up in the mornings. I didn’t want to face what the new day is going to challenge me with.
It became clear to me, that the loop has started.
How I escaped the loop
These feelings kept on growing. Frustration from one side, worries from another. I don’t like doing half-assed work, so I spent all my energy on keeping on doing what I did before and not go insane while doing so. It was pretty clear that this approach was not sustainable on the long term and I started wondering more and more what should I do about it.
One day, about a year ago, I found the cure in a place I couldn’t really expect. The complete story is a topic of another post and I will definitely write about it, but in short - I got challenged to learn JavaScript, React Native/React and deliver a brand new app together with a small team. At the same moment I got a proposal, I said yes because it clicked to me that this is my chance to change something and break this annoying loop that has been tearing me down. As soon as it started, I faced the incredible flow of new information. New IDE, new language, new people to follow, new approaches, new problems. I learned about VSCode and how extremely customizable and pleasant to work with it is. I learned about JavaScript. It’s easy to make fun of it, but it’s the most popular language in the world and even though it has some historical issues, it’s still beautiful. I learned about npm. I learned about the community and that behind almost any JS dependency there is a story of a software developer that decided to share his work. The whole ecosystem is built around sharing, constant improvement and neverending iteration (I love the home renting vs. home owning analogy by Ash Furrow).
It was eye-opening for me. After so many years, living under the shadow of basically one huge dictatorship, I opened a new, welcoming, enormously huge community, with so many options and so many new things to learn! For me, it was the same “experience” feeling again. I discovered that the current JS world is all about having great development experience.
As I still stayed in mobile development and due to having the previous native skillset, I was able to use the best from both worlds and navigate between them pretty well. Though I spend the majority of my work time playing with React Native and JS, I still do iOS and Android. But since I’m not stuck in a native-only world, I feel way better.
I was able to forget about my daily frustrations and start my new journey.
How it changed how I feel
The boost this particular change gave me was enormous. It motivated me a lot. I wanted to do things again. I felt tired not because I had to fight yet another buggy API, but because I have spent my day learning and doing something that made me feel satisfied with my work.
I became a much happier person and my motivation skyrocketed. It became easier for me to wake up. I was so tired at the end of the day due to constant learning and a huge challenge that I slept like a baby. I went to a totally different kind of conference this year and was able to create this blog because of my new skills. I was able to see another side of software development, and now it’s much easier for me to see the beauty in iOS again as well - now, when I have more diverse knowledge, it’s easier to see good things around me and understand why something isn’t working or is bad. In the end, I became a more positive person because of that.
Yes, it’s still painful for me to see how Apple is changing, and it still triggers me when some obvious solutions are broken from their side, but now I’m not afraid that this will affect me that much.
How you can do the same
This is not a post that compares native development with React Native. I believe that it’s not even something worth comparing that much - these are different worlds. I don’t want to say that native development is worse, or that JavaScript is superior compared to Swift or anything else. In the development world, there are always multiple ways to achieve goals, and each tool has something good and something bad about it.
This is a post about becoming aware of something that makes you feel bad in your life and trying out alternatives to fix it.
I’ve been thinking about how to name this text properly for a while. On a surface, it’s simply about changing technologies, learning new tech. skills and trying out something new. Nothing special. But if you dig a little deeper, then it’s actually not. It’s about being aware of your well-being and understanding when it’s time to change something. It’s about not putting any kind of constraints on yourself and not limiting the angle of your view “because I did it this way for years, why change?” - is it career-or life-wise. It’s about the pros of stepping out of your regular “bubble” and looking around. It’s about being keen to accept challenges and face something new and unknown. In the end, it will let you break your own loop as well.
As a takeaway, please do the following - take a few deep breaths after you finish reading this, get away from the computer or put your phone away. And just think for a moment. Are you happy with what you are doing daily? Do you feel confident about tomorrow? Is there something that makes you wake up every day easily? If no, then it’s time to start changes. And the easiest way is to learn something new. Now go and start right away, it will make you feel better, I guarantee.
Mental
Learning
Comfort zone
iOS
React Native
Programming