My Journey As a Software Engineer

This is my story so far. I hope it is just the beginning

My Journey As a Software Engineer

As promised, In this post I will be talking about my journey as a software engineer.

When starting this post I was tempted to go back to when I first used a computer. That was so long ago I don't even remember in detail. Instead I will start this post when I started to program said computer.

I started programming in 2003 when I taught myself how to build static HTML and CSS websites. I had so much fun building one page websites that I wished I had started much earlier. I then quickly followed up with JavaScript to add some life to these pages. I was going through introductory books on these tools so quick. I then started to wonder about how actual websites are delivered to people's computers.

I started to learn about networks and how the internet worked. I got sucked in from that moment and my career was decided. I learned about servers and clients. The internet suggested PHP as a good starting language for programming website servers and I wasted no time jumping in. While learning PHP I learned about databases and their role in websites. Looking back, I now realise how basic the books I used were. None of them mentioned any frameworks. I was proudly writing database access code inline into my PHP.

After a few years of doing this and not publishing a single website it got boring. All of my websites lived on my computer. It's not that I didn't know how to publish them. I just didn't have the resources to do so. I then started to wonder about non-web programs. The year was 2006 and I met Java. Having written JavaScript for a while, it was a relatively easy transition, with the obvious pitfalls of "ahh but this works in JavaScript!". I learned about object oriented programming. I built text based games and ascii art programs. Even the books I used were less basic than before. The word on the internet was that Java is slow and so I looked around for what was considered fast and I encountered C/C++. This was a noticeably different world. I stuck with it. I got familiar with it. In 2009, I left high school for university.

In my first 2 years of university I was studying Chemistry. In the first year, I did little to no programming. During the second year, however, I started the transition to Electrical & Computer Engineering. This required doing the introductory Computer Science courses. I reunited with Java through these classes. As I progressed with my studies, I reunited with C/C++ and also learned Assembly. I also formally met Python during this time, having met it briefly before. I was going to be a tutor for first year students and the course was going to be offered in Python for the first time. The course lecturer gave us a 30 minute crash course of Python and I was hooked. From that day, I have never abandoned the language.

During my time at university, a friend of mine who was more creative than me suggested we build a website together. This would be the first website I ever published. We argued for a few days but eventually agreed to build it in Ruby on Rails. Up until that point, I had not used Ruby. I learned the language and the framework in a week. The first version of the website was out in 4 weeks. That website was a torrent website and has since been shutdown. It was fun while it lasted. I went on to build and publish another website on RoR that has since shutdown. It was a website for music metadata; lyrics, personnel and other fun facts, etc. It did not gain traction and, unlike the torrent website, I was forced to shut it down on my own. We live and we learn.

After university I got my first job as a Java developer for ACI Worldwide. I had interned there a year before and liked it. I worked with money moving systems. I was introduced to systems security very early into my career. I learned how fast banking software is, it is only slowed down by all the auditing and security requirements it has to meet. I even participated in a PCI-DSS certification evaluation which did not go well the first time but worked out the second try. It turned out as an intern I was shielded from a lot of 'process' which I was now exposed to as a full-time developer. While I loved the work, I hated 'the process' and so I left the job after just a year.

For my second job, I wanted a job that felt like the projects I used to work on with my friend in university and so I looked to join a smaller company. Another friend of mine had went to Australia for his internship. The company he had worked for in Australia, GradConnection, was looking to expand to South Africa and were looking for Python developers. My friend had moved to Kenya. I interviewed and got the job as a full-stack Python developer. I was the first employee they had in South Africa.

I got to use Python professionally for the first time. I worked on a project that had both Python 2 and 3. I also formally encountered the Django framework after I had tried it out at university. I was introduced to startup culture and working with remote teams. GradConnection's main offering is a website dedicated to connecting graduates with internship and first job opportunities. Occasionally, I worked as a support engineer for this website. I mostly worked on what was a new project then. We were building a customisable platform for universities to host internships and jobs more suited to their students. This platform would interface with the main GradConnection website and pull suitable jobs from there to show them on the university's job board. Here is an example of a customised platform in the wild.

For the first time in a while I felt excited again. I was learning to build single page apps in ReactJS and Angular. We went through a few build pipelines before settling on a young v1 Webpack. Libraries were young too and involved a lot of debugging. I became comfortable with designing and building REST APIs and clients to consume those APIs. I built the rest hooks pipeline that passed data between the main GradConnection website and university platforms. I was also hands on with the deployment of these platforms. I learned and used Ansible and Docker. There was a lot going on and I was learning all of it, and quickly.

Running a remote office is very difficult. It is easy for the company culture to be lost over the distance. Hiring is a very important part of any business. It can make or break a company. It did not break the company in this case but it changed the culture. I was on to the next.

I joined SweepSouth, an innovative startup that is transforming the domestic job sector.

Early SweepSouth team. That's me with the white hoody seating on the floor


When I joined, the company was young. It had a website for booking home cleanings and had 2 people working on it, the Co-founder/CTO and a front-end developer. The rest of the staff was dedicated to operations, something else I knew nothing about and possibly underestimated. I continued my relationship with the Django framework. I dug deeper and understood the internals of Django and the Python language. I still did full-stack work so I worked with HTML and JQuery as well. Not the highlight of the job after I had worked with ReactJS and Angular before. I took on the task of upgrading our Django framework through a number of minor versions since it was getting outdated. That went smoothly. I then got bolder and took on the task to redesign our models to prepare for a mobile app. That did not go so smooth.

After fixing that mistake, we started to build our mobile app. We were one of the first companies in South Africa to adopt ReactNative for a production app. While developing the mobile app we were also transforming the website into a platform. I was writing HTML, CSS, JavaScript, Python, Java and Objective-C all at the same time. I was learning about functional programming and other things I cannot write about since ... well, they are the reason why SweepSouth is miles ahead of the competition. I was learning about operations and customer support. I attended my first PyConZA, it was a wonderful experience.

After 2 years with SweepSouth, I resigned for personal reasons. I visited the US for a month and on the way home made stops in the UK and in Qatar. It was the first time I left the country and it was amazing. I learned American kids are taught to build technical solutions to their everyday problems while we are taught to use technology for ours. Big difference.

Now I am working for Takealot.com. I am still using Python and loving it. I am learning about logistics and warehouse management. I am building distributed systems. Learning about SAGA patterns and using Kafka, deploying on Kubernetes. I am still getting my feet wet in all this and will post later about the progress. We are currently dealing with preparations for Black Friday, an event we are infamous for failing to handle gracefully.

In a later post I will write about all the personal projects I have done in detail. I specifically want to talk about how they have helped me become a better engineer for my jobs. I will talk about other projects that I want to take on. I will also discuss the actual motivation behind starting this blog and what I meant when I said I want to have a positive social impact.

Don't forget to subscribe so you'll get updates on my later posts and on progression of the platform. You can also follow me on Twitter for updates.

PS: you can reach out to me with any questions or comments or if you have interesting problems for me to solve.

Ciao for now!