|Location:||Midrand, South Africa|
Collaboration using Version Control and Continuous Integration
Any project that takes more than one person, or more than a day to throw together, needs systems to keep it organized. 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 TeamCity, Jenkins, and GoCD.
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 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.
2017 to present - Jemstep by Invesco - Senior Software Engineer
I joined Jemstep in 2017 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.
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 use 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. I was promoted to the position of senior software engineer in 2014.
Getting up to speed with new business domains quickly
While working in the Projects division 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
- Microsoft Azure
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 to see how they work. 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.