I remember that phone call very well. In fact, it might be one of the most memorable phone calls I have ever picked up or even one of the most important calls in my life. You know, one of those phone calls that give you a mini heart attack when you look at the screen and see a familiar phone number.
Good news - you’ve just got a job at AppUnite. When can you start?
It was a warm, yet cloudy October day. I picked up the call while having a break between some Math classes at my university campus, holding a cup of overpriced, bad coffee from a machine downstairs. I just left some company after 3-months of being a junior developer, which, in fact, felt more like an internship - not at my will, but because the company was going bankrupt. A charm of small startups, I guess. I was not that concerned about it, I thought that it might be a good start, a three months adventure that would eventually lead me to become a real developer, solving real-life problems. Problems that I solved in that company were not so challenging - we worked on an internal application, whose purpose was to be a showcase app to potential customers. My plan was to focus on my education and get back to the industry with some proven experience in the following year.
I felt joy, thrill, confusion and dread at the same time. Wow, they want me! I’m gonna be a real developer! What if I’m not good enough? What if I am not able to solve trivial problems that I will encounter and I will be considered a failed investment? Maybe I’m not ready yet?
All those thoughts clouded my mind as I started my first day at work, the beginning of an unforgettable journey. The first project I was assigned to was a logistic project, whose goal was to solve the problem of finding contractors to transport goods from point A to B. At first, it was quite hard for me to handle the complexity of the project. Doubts kicked in again. What if I was not good enough?
I received huge support from my teammates - especially from my mentor, MK. (who I had kind of admired even before I started to work in AppUnite, as he was a pretty known persona in Elixir community and gave many interesting talks in tech conferences before) and my buddy, P. - and they guided me through the basics of development, showed me how the process looked and what to do to be able to solve complex problems in an efficient way. We spent many hours drawing diagrams on whiteboards, trying to illustrate our thoughts and ideas. My role in the project was not that vital, however, I felt I was helping the team and bringing value to the table from the beginning. It is a great merit of my colleagues, who made sure that I felt comfortable and knew what I was supposed to do and also gave me great feedback regarding my work. They always treated me equally despite my young age and lack of experience. Anxiety slowly creeped out of my mind as I was slowly making meaningful progress and being praised by my teammates. I enthusiastically observed how quickly the number of comments to my pull requests was reduced, indicating the growing trust of the people that I worked with. Truly unforgettable feeling, when you feel this ‘click’ in your head and you become a useful team member, delivering quality production code in a reasonable time.
However, it was just the first episode of the story. I was assigned to this project to learn the basics, but the long-term plan was to engage me in the development of some other product. After three months, it was time to leave. I felt sad, as I worked with truly amazing people and it was a shame to leave them, but also excited about the new opportunity - I felt as if that was where the true challenge would begin. I was surprised by how warm my team members were to me, saying goodbye and wishing me the best of luck. It was a cold Friday at the beginning of January. At the end of my workday, I gave my last high-fives to my now-ex-teammates and went home to unwind through the weekend and prepare for a new project.
It was a pleasure to work with you, guys. Thanks for your knowledge and everything.
It was indeed, Szymon. You're gonna learn a lot about the new product.
I was moved to one of the biggest teams in the company, working on one of the first products that AppUnite had ever launched - a social media app, dedicated to the Christian community in Africa. Sounds quite unusual? Yes, that is what I felt, but in the end, it was a really interesting experience. The user base was quite big, as there were approximately 160k active users. In AppUnite, we aim to have a huge impact not only on the technical stuff, but also on product development and business, and this project was one of the finest examples as our client often was not only focused on their ideas but gave us a freedom to propose our own features and ideas to improve the product and user experience. To do so, you need to know your user base - it was really interesting to observe content posted by users from completely different cultures than I was raised.
Are you Szymon? - asked K., my new buddy.
The whole team was working on a completely different floor, so the environment was quite new for me. I didn’t know anyone, which made me feel uncomfortable in some way, however, K’s friendly, a little bit goofy approach, quickly loosened me up as he introduced me to other team members and helped me to set up the project, showed me where to look for documentation and gave other useful advice. Everything was going well during the initialization, however, I was terrified again soon, when I started to explore a brand new codebase. It was far, far more complicated than the previous one. The lines of code seemed to be infinite, conventions were completely new and unfamiliar to me. I felt completely the same as in the beginning - a little bit lost and doubtful. I was just scrolling through the countless modules brainlessly, thinking that there was no way I could handle that.
Things started to get worse when I got my first task. I had to refactor the old, legacy code, which was using the database that our backend team wanted to get rid of. The problem seemed quite simple in the beginning, but later, partly because of my lack of skills, knowledge and experience, which would help me to organise work in a way that would be much easier for me, it occurred to me that the task was much harder than I had thought. I spent days and days of this cold January in the office, getting warmed by a hot coffee and working on the first tough maintenance problem. However, I never felt alone. Whenever I had an issue with some particular step, K. was always there for me and advised me without any sort of judgment.
Look, try to draw what happens and when. It will help you, trust me - K. encouraged me, reminding me of what we had done in the previous project.
And it worked. Things were much clearer when I simply sat and breathed for a second, trying to think of the solution and existing circumstances instead of starting coding immediately. The funny thing is that I received this lesson not only before, but also many times after this situation before I ultimately realized how I should approach problems. A trait of junior developers, or my trait, I guess. After a couple of weeks, I finally got my first task done. Great! I was going to deploy my code to production in the new project for the first time! As usually in this job, I was both excited and nervous. I didn’t really know if things would go south or not. Fortunately, I had the support of my colleagues, which ensured that they would help me in case something bad happened.
You ready, Szymon? Yeah, kind of. Don’t worry, it’s gonna be fine! You are not gonna break the production, for sure - K. chuckled.
So I made the deployment. Waited… Nice, everything seems to be fine! The deployment was finished, and all servers were up and running. We were home! I went to the kitchen to make some coffee with a smile on my face. I did a really hard job, I deserved a break. After about half an hour after deployment, the client texted us in our shared Slack channel. Something was wrong, reaction counters in the posts showed 0 for everything!... My face turned white and my stomach felt weird. Is that possible that I did something pretty much irreversible? No, it is impossible that I broke it up so hard! How is it even possible it doesn’t work after all the tests that I had written were successful?! I sat in front of the computer and immediately started to look for reasons. Why did it happen? It’s impossible! Why, why, why? Wait, I think I got it! It turned out to be a really specific case, which I am not going to explain in detail. However, I managed to perform a live migration in the production and restore all counters. Phew, I will not lose my job today! That was my next lesson, and from the time perspective, one of the most valuable ones. Always remember that tests are based on your assumptions and the fact that they turned out to be successful is only a hint, you should not take for granted that the system will behave correctly. But what was probably more important, I realized that it makes no sense to deploy a lot of changes in the code at once. K. explained that to me, but either I didn’t listen, or I was not skilled enough to be able to properly divide my work. Anyway, this situation, the stress that I felt and the satisfaction of solving the issue were the emotions that I don’t think I will ever forget, nor the conclusions that I drew from this situation.
Great work, bro, it’s really nice that you managed to fix your mistake. We are not gonna fire you today - K. chuckled and patted me on the back in a gesture of encouragement.
That is one of the things that I liked the most about my then-current team, the previous team, and, as I quickly realized, the whole company. Everyone was so professional, yet so chilled at the same time. I messed up, but I quickly came up with a solution. All of my colleagues were super helpful and understanding. They did not underestimate the fact that I broke functionality in the prod, however, they were able to joke about it (even a long time after it happened…) and they were not bringing me down or yelling at me. Atmosphere, atmosphere, atmosphere - one of the key things that I love at AppUnite.