I am a self-taught Generalised Specialist versed in various languages but currently focussing on Go, C and Rust on the backend and TypesScript and JavaScript on the frontend. I value simplicity, quality and correctness and strive to build robust and stable solutions through collaborative, well-thought-out architecture and thorough testing. I love the art of programming and understanding and manipulating the minutiae of computer systems, and so enjoy low-level programming. I enjoy contemplating problems and deeply analysing the way things work. I love to learn, so acquiring new skills and knowledge is deeply embedded within me.
Work History
Senior Software Engineer
Tele2 - Kista, Sweden
I work in network data collection where we are responsible for optimising the collection of massive amounts of data from customer modems, cellular base stations, edge routers, HFC transponders, to name but a few. We then validate the data from these various sources and in various formats and convert it into our standardised format before making it available to the rest of the company.
- to easily scale, we make use of a modular, decoupled architecture. We use Kafka heavily to decouple the data from the collection infrastructure and the consumption points - these being the many departments that use our data to monitor the network, provide customer support, do network planning, feasibility projects etc;
- balancing and scheduling the polling of devices as most of the collection is done over Simple Network Management Protocol (SNMP) which isn’t the most optimal technology;
- using k8s in an on-premise cloud to simplify the orchestration of our infrastructure, maintain secure operations, increase reliability with redundancy and fast recovery and failover;
- ensuring that we have accurate metrics and logging in place as our software runs in our cloud, out on the net, on bare metal and in Docker swarms (which are being migrated to k8s). This is essential for the Network Operations Centre who rely on our data;
- having coding standards, code reviews, testing and security practices in developing because we have many different services and codebases written by different engineers over the years. We have modernised a few of them, decommissioned another and are reviewing the architecture of the services themselves as well as how they collect and deliver data.
- is much less complex, in operation as well as in the cognitive load it imposes on developers;
- is modular in order to make it easier to maintain and add to;
- improves testability;
- increases its flexibility with regard to data sources;
- is more easily scalable;
- is more performant;
- is cheaper to run (we were able to run at a higher throughput rate with 30% less resources than the legacy system).
The architecture consists of three modules that have the ability to send and receive data to and from various data sources by simply “plugging” in one or multiple source(s) or sink(s). The interface between the connectors and the modules are generic, allowing for the business logic to remain within the modules and the data source specific logic to be isolated to the connectors. This allows us to build data pipelines that, for example, consume from Kafka, transform the raw data received, keep a state of transformed data in Redis, compile the resulting data into Protobufs and publish the result to Kafka and some metadata to PostgreSQL.
I am responsible for starting guilds in Go, JavaScript/TypeScript and Software Engineering as well as building out Tele2's open source contributions.
Senior Engineer
Klarna - Stockholm, Sweden
- Worked in user account management as a full-stack software engineer streamlining the management of user data.
- Wrote scalable, speciliased and isolated micro-services to support the web front-end and mobile apps.
- Managed and deployed cloud infrastructure to support our suite of services.
- Built and improved features for the web front-end and mobile apps.
In the user account team, we had a few services, most of which acted as Backend for Frontend (BFF) services. They would bring together functionality from the vast number of microservices in the company and serve our user functionality to the React Native mobile app and webapp that we were responsible for.
One of the non-BFF services handled everything to do with the user's profile picture. The images were stored in AWS S3 with a Lamdba function resizing new images, a caching layer in-between the apps and S3 for fast image retrieval. The different parts of this workflow were decoupled from one another to improve scalability.
Here we made use of k8s to make scaling and maintaining our ecosystem easier with CloudFormation to keep deployments repeatable and consistent.
Senior Full-Stack Engineer
Paystack - Lagos, Nigeria (Remote)
- As a senior on Refunds and Reversals, designed and built the refunds and reversals micro-service.
- Increased the efficiency and reliability of refunds and reversals through the use of technologies like Kafka.
- Was part of the Stability and Reliability team in charge of tackling the hard problems facing the rapid growth of Paystack.
My biggest focus during my tenure was rearchitecting and rewriting the refunds and reversals engine into a simpler and more reliable service. I had to maintain a high level of data integrity while interfacing with payment processors such as Visa, Mastercard and banks.
We had to make sure that:- there was an audit trail and excellent observability for all transactions and processes. If money went astray or a system was failing, we needed to know and have actionable intel before the customer knew that something was amiss;
- security was baked into all processes from the start. While reputational damage was a big factor, the goal of the company was to bring payment solutions that the developed world enjoyed to everyone in Africa, making quality service a more fundamental part of the development process; and
- the codebases were reliable, modern and of the utmost quality. We were in the process of updating our architecture to that of microservices in order to decouple business units from each other for improved scalability and parallel development.
I designed the refunds and reversals engine to be a microservice with MongoDB in order to improve its ability to scale. I wrote the service in TypeScript as opposed to JavaScript to add the extra layer of predictability during development that a type safe language adds.
Internally, the logic for reversals had a lot of generic parts but also rather specific elements for some payment processors under certain circumstances. For this reason, I decided to use:- the Strategy pattern to keep the refund-processing logic modular and make it easy to add more processors; and
- a fast rules engine utilising the Reet algorithm that accepted reversal tasks and derived the correct reversal method.
Senior Software Engineer
SPAN Digital Innovation - San Francisco, USA & Cape Town, SA (Remote)
- Create solutions as a polyglot full stack software engineer, covering projects in Go, Scala, Java, JavaScript and Python.
- Using technologies such as Caddy, Akka, Apache Spark, Apache Kafka and Hadoop.
I worked as the lead developer on a project to extend the Caddy webserver with custom Go plugins and an authentication service to allow for LinkedIn login and user permission management.
I was part of a team that built a data pipeline system to move large amounts of data between data centres. The bulk of the service was written in Scala with Akka and utilised Apache Spark. In order to achieve the maximum speed while moving data, the system had to be scalable and fault-tolerant. We built support for S3, Hadoop, CSV files and Kafka sources and sinks. In order to establish reliability in the wild, we relied heavily on end-to-end tests to ensure that the pipeline worked as it should.
Freelance Full Stack Software Developer
dxt.rs (Remote)
- Develop websites, APIs and systems using: HTML; CSS; PHP (Laravel, PyroCMS, CakePHP, CodeIgniter, WordPress, vanilla); JavaScript & TypeScript (Angular, AngularJS, jQuery, Meteor); Node.js; Ionic & PhoneGap;
- Linux server administration (Ubuntu, CentOS, Debian).
- MySQL, SQLite, MongoDB databases.
dxt.rs is my own brand for my freelancing and game development adventures. I have worked with several companies remotely providing a wide range of services with the varied skills that I've picked up over the years while also endeavouring to create lean video games from scratch.
I worked with a company that had created a wireless (with RFID) payment solution for events. The tech included a receiver at pay-points that is connected to a back-end online system that matches up transactions with registered users via the scanning of their tags. I worked on extending their Meteor back- end app as well as built some functions for their React-Native app.
I freelanced for an agency by fixing defects for a hybrid mobile game built in Ionic for Allan Gray, one of the major banks in South Africa. The game had been distributed to many schools to teach students the value of healthy financial practises.
I made additions to the Orlando Pirates' (a national soccer team) Shopify webshop through a digital agency. One such challenging addition was a feature that allowed the user to customise a soccer jersey with their own number and name before ordering. As soccer is very popular in South Africa, this website saw a lot of traffic.
I was contracted to do bug fixing on an Ionic app and build a prototype in Angular for a large Crossfit CRM system that sees many users a day from Crossfit gyms all over South Africa and has started to get international attention.
In my spare time I build video games and to date have built a Galaga-like top-down shooter in Java with no external dependencies, a few small prototypes in C and JavaScript and am currently writing a game engine in C++ and SDL that integrates Lua as its scripting language.
Full Stack Developer Consultant
Team Extension - Bucharest, Romania (Remote)
- Wrote server-side and client-side code for Laravel and PyroCMS projects using PHP (Laravel), HTML, CSS and JavaScript.
- Part of team that built Laravel-based CRM system as well as custom PyroCMS website a company in energy management.
- Used Git, Jira, CircleCI.
I joined a Swiss company stationed in Bucharest on a one and a half year contract as a full stack developer. Team Extension hires and contracts developers, designers, strategists, project managers etc. to assist clients in building any web or mobile system they need.
I built the front-end half of a referral campaign management system in WordPress for a popular pay-as-you-go power company in Ireland. This website interfaced with a C# API written by a colleague. The system was expected to see large traffic during their campaign.
The biggest and longest project/s that I was a part of was for an energy efficient IoT supplier and installer based in USA. The first project I was the sole developer for the most part and we built a customised website in PyroCMS. The main project however was for a CRM type system that we built in Laravel and jQuery. We made many custom lean components and services to accomplish the tasks we required without burdening the system with too heavy dependencies.
We used GitHub for source control and integrated with CircleCI for merges and automatic deployment to Ubuntu servers.
We worked in an Agile environment utilising Kanban with Jira and a handful of smaller webapps for tracking and billing.
I learned a lot about personal responsibility and working remotely as well as learning about and adapting to different cultures as I worked with North American, Indian, Romanian, Turkish, Irish, Italian, German and Swiss folks.
PHP and JavaScript Developer
Crayon - Johannesburg, Gauteng, SA (Remote)
- Rewrote recruitment webapp into full Laravel and JavaScript-based solution that caters to 37000+ users.
- Extended MVP to include various features including: integration with payment partner; webcam integration; custom filtering.
- Linux (CentOS) VPS administration.
- Used Git, Asana.
Initially I rebuilt Crayon's MVP recruitment platform which was a WordPress back-end and Laravel front-end into a Laravel only solution. The original developers used WordPress as a management back-end and Laravel to access the WordPress tables with a package.
I wrote migration scripts to convert the old WordPress MySQL data to a less complicated version accessed directly by Laravel. I built an admin portal for the management of profiles, leads, communications and prospect/employer matches by way of an relatively complex algorithm.
I extended the system to include:- webcam integration for video clips from prospects to employers;
- extensive logging and notifications by way of event listeners;
- integration with a payment gateway;
- a system to capture and process CVs and profiles for prospects as well as admins;
- a rewards and credit/coin system for use by employers;
- integration with Facebook, Twitter and LinkedIn;
I moved the whole system over to a CentOS VPS eventually which I managed myself and wrote management scripts in Bash.
Source control was carried out with Git initially on BitBucket and later moved to GitHub and project management was done in Asana utilising Kanban with a relaxed Agile approach.
JavaScript Developer
Derivco - La Lucia, KwaZulu-Natal, SA
- Maintained and extended global online Bingo app servicing millions of players.
- Wrote custom TypeScript and JavaScript Angular modules.
- Integrated with .NET back-end via protocol buffers.
- Extended custom integration with PixiJS WebGL/Canvas renderer.
- Wrote integration and unit tests with Jasmine.
- Used SVN, Git, TFS.
In 2016 I was presented with the opportunity to move to the coast and work for Derivco - the development house for the biggest online games company in the world - Microgaming. Well they and Playtech swap spots for first and second every few years.
I joined the bingo team of nine talented front-end developers as a JavaScript/TypeScript developer. The online bingo game we worked on was first created for Flash, then ported to AngularJS with the death of Flash and I joined shortly after the port from AngularJS to Angular.
Here I learned in-depth about design patterns and correct software architecture design. I discovered that I had been solving many problems with design patterns all along but never had a label for them. We were expected to write documentation for all the features we developed. We rigorously unit and integration tested our software with Jasmine and had a highly modified version of webpack that we used to build and transpile the game code bundle.
Source control was done with Git and SVN (for deployments packages) and deployment was handed off to TFS and Octopus Deploy.
Some of the more interesting tech that we used included:- communicating with the C# back-end using Google Protocol Buffers;
- a custom "shadow-DOM" we built from Angular components that rendered to an adapter (so that we could swap our the renderer if the need arose) to PixiJS in order to render the game in WebGL or Canvas depending on the user's hardware;
- the integration of the XMPP JavaScript library Candy Chat;
We spent many hours hunting for orphaned nodes and observables and various other gotchas and improvements in order to keep memory and CPU usage as low as possible. In the end it wasn't possible to match performance in the version of Edge at the time as we discovered that it had a very low memory limit in place for intensive websites.
I spent time in support where I picked up enough C# and used my SQL knowledge to adapt to MS SQL in order to debug and fix defects across the back as well as front-end that were brought up by clients and suppliers. I also fixed defects in the still-in-use AngularJS platform.
We worked in an Agile environment and utilised Kanban for our team which was managed by TFS. In the support team we utilised SCRUM.
Some of the most intelligent and highly gifted programmers I've ever come across work at Derivco with the general rule seemed to be the more gifted you are the more unkempt your appearance and the more eccentric you are - there were many long-haired bare-footed hacker-hippies roaming the halls.
CTO and Chief Software Developer
Media Rocket Studio - Rivonia, Gauteng, SA
- Architected customer front-end and back-end solutions;
- Wrote APIs and web systems with front-end in PHP (WordPress, Laravel) and JavaScript (AngularJS, jQuery) and back-end in PHP & JavaScript (Laravel, Node.js);
- Mobile apps with Ionic and PhoneGap;
- MySQL and MongoDB databases;
- Linux administration (Ubuntu);
- Used Git
Having met creative and forward thinking individuals at Flint, a digital strategist and UI/UX designer and I created our own digital agency-cum-tech incubation company.
As the CTO and indeed only developer I was in charge of designing and developing all software systems for clients as well as the ideas we thought could grow into massive projects.
Unfortunately we weren't able to complete and release any of our own tech as running a business with large immediate expenses overwhelmed us and we ended up focussing on client work.
I developed a front-end for a debt-collecting/lending company in AngularJS which would have seen large amounts of clients but due to some internal politics the client failed to complete the back-end.
A university student had come up with an idea for a mobile app that allowed one to rapidly capture an acquaintance's information and be provided with analytics about how and when they met as well as how they fit into their current network. I built the back-end in Node.js with a MongoDB database as well as a hybrid app in PhoneGap which we eventually published to Android and iOS.
I built a notification/announcement system for the new library built in the South African Department of Industry and Trade's Johannesburg offices. I built a desktop server with Black Magic capture cards running on Ubuntu Linux with a custom application written in PHP that delivered media to the 10 odd televisions in the library.
For some additional business, my colleague designed and I developed custom WordPress themes for ThemeForest.
We were selected by Microsoft to join their BizSpark tech incubation programme and were mentored by leaders in their respective fields while also receiving startup resources from Microsoft. We also took on a home schooled intern who I mentored while he skilled up to become a software developer.
My biggest idea and the one I wanted very badly to build was an augmented workspace. The idea was that you would sit at your desk with your computer in front of you, but by way a pair of glasses or headgear of some sort have virtual storage spaces and pin/white boards "physically" around you effectively doubling your workspace. At the time there was nothing like this and because of the need to research and develop the complex hardware, it seemed out of reach for a small startup. Now obviously this is a reality.
Full Stack Web Developer
Flint Studio - Morningside, Gauteng, SA
- Develop systems and integrations using PHP (Laravel, CakePHP and vanilla).
- Develop custom themes and websites using PHP and WordPress.
- Work closely with designers to implement custom designs as per client spec.
Wanting experience at a company that worked on many varied projects often, I joined a digital agency called Flint Studio.
Here I learned a lot about custom WordPress theme and plugin development and worked with designers to bring clients' requirements to fruition. Some of these included custom written:- calendar plugins;
- lead management plugins;
- business branch info plugin that integrated with Google Maps;
We worked with big names such as BullenLowe SA, Tiger Brands, Iliadin and Nandos. We assisted on and led their own as well as their clients' digital projects.
I also learned CakePHP - the framework Flint relied on to build "heavy-lifting" webapps. One such app that I worked on was a financial and investment information portal for companies based in Africa.
I mentored two junior developers and to this day am still in contact with both - one still seeking mentoring from time to time and the other has surpassed me in specialising in PHP.
My most enjoyable project was building a Space Invaders clone for Iliadin. I chose Cocos2D and JavaScript to create the pixel art themed mini-game.
Full Stack PHP and JavaScript Developer
Satinsky - Faerie Glen, Gauteng, SA
- Rewrote internal and client-facing web systems from Perl into PHP (CodeIgniter) and JavaScript.
- Built mobile app for Android (native), iOS (native) and BlackBerry (PhoneGap).
- Built email campaign management utilities in Python.
- Linux administration (CentOS).
When I joined Satinsky I was tasked with the mammoth task of choosing a PHP framework with which to rewrite their Perl client-facing and internal call centre systems and explaining to the CTO why I thought it would be the best for the job. I chose CodeIgniter and explained that even though I liked the look of Laravel, it was very new and may not be mature enough; further, from my research CodeIgniter was the fastest at the time and would suit them the best as their business processes, which worked with millions of Rands and tens of thousands of clients, could not be bogged down by slow systems and tools.
I learned CodeIgniter in a week and using it, Bootstrap, jQuery and MySQL rewrote their systems. This client-facing system allowed clients to log in, view their profiles, payments status', upload the required photos of their cars monthly, download documents from and communicate with admins.
I built onto the systems by adding:- smaller promotional campaign "once-off" applications which saw tens of thousands of leads;
- a responsive portal for assessment agents to go out into the field and capture vehicles' info and photos;
- I started developing a bidding platform for buyers and sellers to come together and buy and sell used vehicles but the project was put on hold;
- I built a custom WordPress site for one of their brands;
- I built Python tools for managing email campaigns which sent and managed hundreds of thousands of emails by distributing their load to multiple clients running on Linux servers;
Later I was tasked with creating a mobile app that would communicate location specific advertisements and offers from local businesses to the user from a central server. I solved this by implementing an algorithm that calculated the user's location within a ring-fenced area and notified them of relevant ads and offers. In order to use the GPS effectively on the two most important platforms, I created and Android app in Java and an iOS app in Objective-C. In order to reach as many users as possible we decided to also include BlackBerry, for which I ported the app over to Cordova.
I mentored a junior developer who was taking the leap from a designer and front-end developer to a full stack developer.
Owner/Web Designer/Web Developer
dragonFli designs - Benoni, Gauteng, SA
- Built websites and systems for various clients in PHP, JavaScript, HTML and CSS from scratch.
- Maintained and installed networks, workstations, servers and backup solutions.
In January 2010 I decided to follow my passion for computers and programming and started my own web development/design business. My motto was "Fast, simple, custom code from scratch".
I built websites in PHP and JavaScript from scratch with an emphasis on accomplishing as much as technologically possible with CSS before delegating the task to JavaScript.
Among the many sites were:- a custom designed pet kennels site;
- a media-rich site for a freshwater aquatic service company along with a Magento store with the same theme/design;
- a debt collector's client-facing system;
- a telecoms and networking company's website;
Most of these sites had a range of custom PHP scripts such as guest books, emailing capabilities and captcha protection custom written.
Education
Tertiary
CTU Training Solutions
Certificates
Try Hack Me
DevTernity
Ardan Labs
Pikuma.com
Ardan Labs
Udacity
Coursera
Coursera
Secondary
Willowmoore High School
- English (HG)
- Afrikaans (HG w/ Distinction)
- Mathematics (HG)
- Science (HG)
- Technical Drawing (HG)
- Technika Electrical (HG)
- Computer Studies (HG w/ Distinction)
Interests
Computers, electronics, digital privacy, computer and network security and administration, HAM radio, programming, creating video games, playing video games, learning new natural and formal languages.