#1-2019-May-“My developer story”-version3-2020-Jun

Past

Seeing my cousin playing StarCraft was the initial factor that drew my interest towards computers around the year 2000.

Then, after many years of gaming, I got introduced to programming by taking a college course (IT-2) in 2010. Immediately I was fascinated and excelled quickly; therefore, I applied for a five years’ computer science degree at NTNU.

University

After serving a year in the military, I was ready and started my university studies in the fall of 2012. The first year was challenging and I got my lowest grades in the programming courses despite having those as my favourites (maybe due to exams being on paper?). Therefore, I made a deal with myself that if my grades didn’t improve during my second year, I would quit.

During the second year the master program turned away from the “heavier” math courses and more into programming courses. By following a strict routine of only studying 6 hours a day Mon-Fri my grades improved and I felt like I was on the right track.
However, by the end of the second year, I didn’t feel like a programmer at all. I programmed entirely in python and java and possessed only beginner skills with object-oriented design, algorithms, and data structures. Despite my incompetence, I was lucky to get a part-time job at Unit4 Current Software.
Although translating test cases and testing didn’t involve much programming, this job was critical for my development as a software engineer. Firstly, it introduced me to the workflow of a mature software company. Secondly, it made every course at university more practical since I could see the abstract concepts in practice, e.g., agile development process.
Thirdly, I got mentors for programming which gave a significant boost by introducing programming principles like SRP and KISS.

The third year of the university gave me more freedom to select courses. My strategy always involved picking the “programy” courses with coursework instead of the theory-based courses and stay at a high abstraction level (avoid assembly programming).
Therefore, I chose AI as the main direction of my studies. This year I finally felt like I was learning to become a better programmer full time. Both the courses at school and my part-time job, which now included automatizing testing cases with selenium required many hours of programming.
Software architecture during the 2nd term became my favourite course throughout my entire studies. It had a big project creating a multiplayer game and introduced many design principles.

Singapore was my place of origin during my fourth year. It was two intense semesters: 11 courses instead of 8 courses in 2x12 weeks of lectures. And although I didn’t like the testing system (short time and many algorithmic calculations instead of understanding and explaining), I performed well. This proved that my focused work hours and study techniques worked across universities. However, despite achieving good grades, a fellow local student made it clear that I lacked skills for sharing my programs with the world.
He impressed me by creating and publishing a website for annotating comments during a sentiment analysis project. This convinced me that I needed to start thinking of how to use the web, and I picked enterprise application development as a course for my 2nd term. Although I never use JavaEE 6 and JSF anymore, this course proved valuable to learn about building and publishing websites.

Finally, reaching my fifth year and final year of my studies, I decided to pick a project assignment which focused on linked data. I wanted something new to learn and to be part of a bigger project which focused on providing technology for helping newspapers, e.g. by recommending news articles.
Looking back now, I regret taking this project assignment. Learning wise it was probably one of the best terms, but instead of further developing my skills in AI, I ended up with less relevant skills (how to use linked data). So if I had the chance to go back, I would choose an assignment focused around a Kaggle competition (like one of my courses in Singapore). This would have given me more time to use machine learning in practice, and more familiarity with deep learning, a great but time-constrained course during my 1st term.

Final year university and transitioning to working life

Starting my final year, I thought about the transition into working life. Podcasts, books, and courses on entrepreneurship made me want to start a company.
During the 1st semester I talked to some classmates about starting a company focused on the hype words: big data, AI, machine learning, etc.
In the 2nd term me and three classmates started this process. However, time constraints and a knowledge gap made the process slow, and we never managed to get any paid projects. The knowledge gap was what I had seen from my Singaporean friend the year before: I didn’t have the necessary skills to use the web. So starting in the Christmas break between the two semesters in late 2016 I began my journey into web development.

Except for the final weeks of my master thesis, I spent 50% of my time learning web development. In addition to using youtube, I went through a whole series of online courses from Udacity, Coursera, Pluralsight, and Udemy. Although this hurt my master thesis, I don’t regret the decision. The newly acquired skills in web development helped me get a job in Rocketfarm at the end of my studies.
I chose Rocketfarm because of its small size and developer freedom. They have practically no standards on selecting software, and the small size makes it vital to learn new skills.

Starting in Rocketfarm proved to be almost precisely as I wished: I got a new project (wheel.me) with much responsibility. I was the leading player in deciding the software architecture and implementation. Furthermore, I got guidance and help from experienced colleagues. The project had some iterations of a simulator, user interfaces (voice, web, mobile), and backend. And ended up with the following stack: React with Redux + dialog flow and Alexa, microservices with flask-socketio powered with celery communicating with rabbitmq and hosted on Heroku.

Through the project, I got familiar with everything from designing the build process to designing the user interface, all while keeping weekly meetings with the customer. After five months of working on this project, I felt that I have the necessary skills to create a product for the web, which is secure, scalable, maintainable, and usable.

The next project was a smart-house project with an angular frontend, .net backend, and the TICK stack backed by python and running on Azure. My focus was on using time series from the sensors to visualize, control, and predict the behavior of the smart-house. After becoming more experienced with influxdb, I realized that my experiences could help quickstart other developers who wanted to use influxdb. Therefore, I created a quick introduction to influxdb and published it on Udemy.

During my first year as a developer, I experienced much frustration with non-code errors and set up time. By having multiple environments (development, staging, production, etc.) and different hosting platforms (Heroku, Azure, AWS), there was a lot of work to set up build systems, set environment variables, packaging the application, and sharing credentials.

This directed me towards learning about Docker and Kubernetes. Docker-compose made it easy for me to deploy infrastructure and application code in multiple environments. However, I knew it wouldn’t scale for production. However, environment vars now had four different environments: unit test locally, inside docker locally, staging and production containers. I started to work on a local application powered by Toga (python GUI) with a simple table storage backend. The application got me introduced to async programming in python, but the interface was ugly as hell.

2nd year of working, high hopes for the future

After a year of working, my mindset changed in two ways.

First, I went from programming to make a living to programming to change the world.

Programming is not only something I do for work. I love programming, and I think it is my best chance of making the most significant impact in the world. This changes how many hours I am willing to put in, and my mindset for becoming better. I try to think like an athlete who is training to go to the Olympics. Instead of only looking at what skills I need immediately for solving my job, I focus my attention on a specific domain. Moreover, I cannot be great at many disciplines at the same time.

Secondly, a new desire to work remotely.

As a young person without obligations, this was my chance of exploring the world. My employer was cooperative, and I went to Asia. I loved the combined productivity and experience-rich lifestyle, and I decided to attempt to make the transition to a full-time traveler.

To be working-remotely challenged my communication skills and tracking abilities. I had a couple of failed meetings due to connectivity issues, and my working times was hard to keep up with for my employer. Moreover, I was going out of scope on some of the consultant tasks I had.

Luckily, I got a new chance, and the second stay led me to switch jobs. I applied for a role as a web developer in wheel.me, the startup I was consulting for, and they bought me out of my old contract. I went from being

An hourly paid consultant to become a part of a startup, with a contract without office location or office hours and with an improved Norwegian salary

I was working for the right client at the right time with the right employer. Super lucky.

Working for a startup radically changed how I could continue my journey to become a better developer.

Python + DevOps = True

Python + DevOps was my area of focus for the 2nd year. I tried my best to keep my focus away from frontend and hardware. Luckily, the new job gave me total freedom, and I spent many hours on python and Kubernetes.

I have created a system for how we structure our code, set up infrastructure, deploy applications, document code, and deploy applications. The system consists of Kops, Helm, Docker, Sphinx, SOPS, and Gitlab. The purpose is to take away as much of the operational concerns as possible while keeping everything in python. Moreover, I can sync non-sensitive work code with private code, which benefits both work and my private projects. Working from a single IDE-workspace makes it possible to stay within the same context and avoid copy-pasting code.

3rd year of working, and ambition for becoming a zen-developer

As one of the first developers in a startup, I was challenged by increased responsibility and employee turnover. As an attempt to deal with the challenges the best way possible, I came up with the zen-developer role model:

A zen-developer is a calm, productive, and happy developer who is a joy to communicate and work with

The increased responsibility came in the form of a promotion from a developer -> tech-lead. However, after a failed attempt to recruit friends and shape the company values, I ended up rejecting the promotion. I realized the new role would lead me away from developer tasks (which I love) to more management and reporting. Already, I take my job a bit too seriously, and sometimes I end up working 60-80 hours a week. I could see this promotion leading down a path of increased stress and burnout.

I always found employee turnover to be painful. This year I saw some great colleagues leaving. I had to realize that this is normal and make an extra effort to be a better communicator. I am trying to write and read messages in a positive, clear, and smiley way to make each colleague relationship as friendly as possible. Furthermore, I do my best to help the company build a supportive culture and hire the most fitted people.

Open-source and work-life balance

I have grown into appreciating open-source. I love learning by reading others’ code, and I often spin up the environment to dig into the code. I also had my first pull request approved, and I hope to do many more.

The zen-developer spends some time delivering private projects and has a sustainable work-life balance

I struggle to deliver private projects. The shiny-new-object-syndrome and a high-throughput-idea-stream make it hard for me to stay focused long enough to “deliver” a project. However, I am improving, and this year I: created a personal finance application, worked on Spanish-flashcards, wrote blog posts, and created my own python framework for using event streams.

Finally, this year I realized how important it is to have a sustainable work-life balance. I experienced the pressure from tight deadlines and an overwhelming workload. It helped me to read through Quora’s developer questions and have it as a priority to get-away/detox from time to time. I feel blessed to do what I love, and I hope to continue the journey while still having fun and avoiding burnout.

Now

From day to day, I work on designing and implementing a distributed IoT application (indoor mobility as a service for wheel.me) that runs in Kubernetes clusters with configurable authentication, authorization, HW, user interfaces, and data analytics. Also, I automate everything around the build, deploy, and maintenance of the application.

I learn every day. I try to maximize the number of hours I have for becoming a better developer by spending time writing code, writing documentation, reading open-source, reading documentation, reading books, listening to podcasts, and reviewing code. Moreover, I focus on becoming a better communicator and having a work-life balance

I 100% love being a developer, either as a software architect, dev-ops developer, or backend developer.

Future

  • I hope to continue my office-free developer journey and contribute to open-source.

  • I want to create more courses to help people learn the joy of programming and share my private projects.