Location: Midrand, South Africa
One of the areas that I have spent a lot of time in is creating web applications. These range in complexity from static websites all the way up to single page web applications that connect to a RESTful API. In these projects, I have been involved in the full stack, from the front end to the database, as well as the scripts and continuous delivery pipelines used to push it out into the world.
Collaboration using Version Control and Continuous Delivery
I am well versed in the Git version control system. I have also set up and worked with continuous integration builds and single click deployments using several CI platforms including GitLab CI, GoCD, and TeamCity.
I have experience in presenting my designs and ideas to groups. This includes informal settings like discussing ideas over coffee, more formal presentations like internal brown bag sessions, and public speaking at events like conferences and meetups.
Public speaking is good for spreading information, but I find it is useful in the long term to have a written reference for technical concepts as well. I am able to explain technical concepts in writing, and I maintain my own website where I write about programming.
Agile Project Management
I have found agile project and team management techniques to be effective. It is especially useful to work in such a way as to be continuously releasing small pieces of code, collaborating closely, and regularly discussing how to improve the process of developing software in the current context. I have experience in prioritizing what to work on next, incremental design, and running team retrospectives.
I have been working remotely full time from my home office since 2020. I am effective at managing my own time, and communicating both asynchronously in text and synchronously in video calls.
2021 to present - EyeO - Software Engineer
I joined EyeO in 2021 to work on their advert filtering web extension platform. The team that I am on is responsible for building and maintaining an SDK to give a consistent ad filtering experience between multiple ad filtering browser extensions, including AdBlock and Adblock Plus.
Working remotely in a larger organization
EyeO is a remote company. Unlike my previous remote role, EyeO is a large organization and so required coordinating with multiple teams, all remotely.
Maintaining stability in a product used by millions
Even though the projects that I work on are not directly user facing, they are used in products which have hundreds of millions of active installs. This makes stability and thorough testing before release essential.
The primary technologies that I use at EyeO are:
Web browser extensions
Firefox and Chrome developer tools
2020 to 2021 - Panoptix - Software Engineer
I joined Panoptix in 2020 to work on their Hotrod product. Hotrod is a system for managing remote data pipelines, including writing the pipelines in a domain specific language.
Juggling many roles on a small team
At Panoptix, the company was four people including myself. With a small team, everyone has to juggle many different responsibilities. Some of the areas where I had an impact were maintaining our CI pipelines, setting up an automated deployment process based on Git tags, and spearheading the creation of a web browser based administration GUI.
Panoptix is a remote first company. I helped to establish and maintain rituals for communication, including having daily catch up meetings, retrospectives, and occasional in person social gatherings.
The primary technologies that I used at Panoptix are:
Warp (Rust API library)
Seed (Rust WebAssembly frontend framework)
2017 to 2020 - Jemstep by Invesco - Software Engineering Squad Lead
I joined Jemstep in 2017 as a Senior Software Engineer to help build their web application for offering automated investment advice.
In 2018, I joined the Developer Productivity team. In this team, I was responsible for improving Jemstep's internal tooling and performing large scale refactorings of the code base. In late 2019, the team structure in the organization shifted and I took on the role of team lead for the Platform and Tools team.
I'd taken on leadership responsibilities in my previous roles, but Jemstep was my first official leadership position.
Technical leadership in a larger team and project
During my time at Jemstep, I've been involved in shaping the technical direction of the company and implementing some of the core parts of Jemstep's product.
With Jemstep being a large, and growing, company, this required me to take many other people into account. This includes a variety of personal preferences, experience levels, and backgrounds.
Self-directed exploration to find ways to improve tooling
In the Developer Productivity team, I was tasked with finding ways to improve the internal development tooling. Within the team, we had a large degree of autonomy in defining our own backlog. I was able to do large refactorings of the codebase to improve its compilation time, and rewrite some of our internal tooling to be more reliable and more efficient.
The primary technologies that I used while working at Jemstep are:
Play Web Framework
2012 to 2017 - Entelect Software - Senior Software Engineer
I joined Entelect as an intern software engineer while I was still studying. After I completed my degree at the end of 2012, they hired me as a software engineer.
Entelect is a software engineering consulting company, and while working for them I saw several projects through to completion in many different business domains and technology stacks. I was promoted to the position of senior software engineer in 2014.
Getting up to speed with new business domains quickly
While working at Entelect, I tackled several small projects that covered a variety of business domains, including finance, importing, and medicine. I had to be able to get up to speed with the business domain and its terminology quickly.
Running meetings with clients
A core part of running a successful project was keeping the client and end users involved. I ran regular meetings with clients where the current progress of the project was demonstrated and feedback was gathered to improve the project in the next sprint.
Mentorship and technical leadership in small teams
The teams I worked on at Entelect were typically small and focused on a single project. Especially towards the end of my time at Entelect, I would take on the role of technical leadership of the project. This included overseeing the technical decisions of the project, mentoring junior developers, and always being available to discuss the technical aspects of the project.
The primary technologies that I used while working at Entelect are:
.Net MVC and WebApi
MS SQL Server
2018 to 2021 - Johannesburg Rust Meetup - Organizer and Facilitator
The Johannesburg Rust Meetup was a monthly social gathering for South African Rust enthusiasts. I joined the meetup when it was just three people meeting in a coffee shop. I negotiated with my employer at the time to sponsor the meetup by providing a venue and refreshments. Later, when Covid lockdowns prevented meeting in person, I took the event online.
2012 - University of the Witwatersrand - Bachelor of Science in Engineering
I studied Electrical Engineering through the University of Witwatersrand. At Wits, this degree has a split in the third year between the heavy current option and the information systems option. I took the information engineering option, and so my degree covered more software engineering and communication systems.
I graduated with distinction at the end of 2012.
I believe in the value of free and open source technology, and try to use it wherever possible. I am much happier including libraries in my own projects if I'm able to inspect their code, see how it works, and fork the project if necessary. My personal preference for my development computer runs Linux.
Solving Challenging Problems
I have a special interest in solving computationally challenging problems. By this, I mean problems that have strict requirements in terms of performance and throughput, problems that need to manage large amounts of data, or problems where an optimal solution is not obvious or may not exist at all.
Responding to Real World Problems
When working on a software system, I believe that the value of the software is in what it allows people to achieve with it. Keeping the people that use the system in mind, and the actual task they are trying to perform, results in a much better end product.