Bruce and Pu
Bruce Blacklaws
Founder, App Evolved | Full stack web application developer | Platform engineer
I create apps in PHP and JavaScript. I have a big interest in startups and building scalable web applications
Books I've read
Why Buddhism Is True Buddhism for Beginners Letter to a Christian Nation How to Win Friends and Influence People Siddhartha
I'm always open to new opportunities
Preferably Remote |
Cape Town |
Bangkok, Chiang Mai
In industry since August 2008
Founder
App Evolved, November 2017 - Present (4 years, 1 month)

I'm building every aspect of the business and technical product myself. App Evolved is something I'll always be working on. Selling my apartment provided the initial capital I used to get the company off the ground and I am running the company on a very tight budget

Incorporated App Evolved as a limited liability company in two countries:

  • South Africa
  • United Kingdom

Ensured accounting was configured and that the company is tax compliant with the annual returns filed and I opened a business bank account. I work with accountants in both South Africa and the UK

The SaaS application includes its own support tracking system, billing and invoicing, referral ecosystem, central monitoring with incident reports, task scheduler and customer instant messaging

A big part of what the application does is extends the functionality of CloudWatch. I've built an automation layer that attempts to rectify CloudWatch alarms/issues automatically and this automation layer can be extended easily

I work well over 16 hours everyday
GitHub contributions
Founder
App Evolved

I've reinvented the company. We build awesome apps and manage clouds

tech stack
Founder
Find Freelance Work

SaaS application that helps freelance software developers find work and it makes it easy for companies to hire great freelance talent

The app is also supported in Thai, Filipino and Vietnamese. The frontend web server renders the initial SPA in the localised language and backend API responses are returned in the localised language as well

The name used to be Freelance Factory but I had some issues with the Madrid Protocol/trademark so I had to change the name. I launched the app on Product Hunt, Indie Hackers and Hacker News and the app attracted 85 freelancers

tech stack
this is the part of my career where I worked for other people
Senior DevOps Engineer
PayFast, September 2020 - Present (1 year, 3 months)

tech stack
Software Developer
Updraft Software, June 2019 - July 2020 (1 year, 2 months)

tech stack
DevOps Engineer
Ringier One Africa Media, August 2018 - March 2019 (8 months)

tech stack
Linux Systems Engineer
Aware Corporation, April 2015 - October 2017 (2 years, 7 months)

tech stack
Remote Linux Systems Administrator
35 East, April 2016 - June 2016 (3 months)

tech stack
Systems Engineer
Indaba Mobile, June 2013 - February 2015 (1 year, 9 months)

tech stack
Junior Operations Engineer
Thought Express, May 2011 - June 2012 (1 year, 1 month)

tech stack
Junior Engineer
Liberty Health Holdings, August 2008 - April 2011 (2 years, 8 months)

tech stack
Summary

You can hire me for Full Stack Web Application Development or Platform/DevOps Engineering. I have a passion for both. I’m very interested in practical computer science and building applications that are useful and I enjoy solving real world problems

Please visit https://git.bruceblacklaws.com/ if you would like to get an idea on how I work. These are only commits in personal repositories. My professional repositories are hosted elsewhere

The work descriptions and my skills listed here are only brief summaries. I can elaborate on the details and provide comprehensive information during an interview

Web Application Development
1-2 years
Platform and DevOps Engineering
7-8 years
Building Businesses
1-2 years
Skills
  • Web Application Development
    • Frontend
      • JavaScript
        • Versions
          • ES5
          • ES6
      • CSS
        • Box model
        • Responsive design
        • Utility-first
      • HTML
    • Backend
      • PHP
        • Versions
          • 5.6
          • 7.1, 7.3, 7.4
        • Design Patterns
          • Front controller
          • MVC
        • Paradigms
          • Procedural
          • Object-oriented
            • Inheritence
            • Composition
        • Databases
          • Relational
            • MySQL
            • Oracle Express Edition
          • Document based
            • MongoDB
        • Caching
          • In-memory
            • memcached
      • Node.js
        • Versions
          • 6.10
          • 8.10
    • Architectures
      • Monolithic
      • Microservices
      • RESTful
    • Testing
      • Frontend
        • Percy
        • PHP-WebDriver
    • Stacks
      • LAMP-memcached (Linux, Apache, MySQL, PHP, memcached)
      • OPAL (Oracle, PHP, Apache, Linux)
  • Platform and DevOps Engineering
    • Linux Systems Administration
      • Ubuntu 14.04/16.04/18.04/20.04 LTS
      • CentOS 5/6
      • SELinux enabled and configured
    • Systems Automation
      • BASH
    • Configuration Management
      • Puppet
      • SaltStack
    • Infrastructure as Code (IaC)
      • CloudFormation
      • Terraform
    • Continuous Integration/Continuous Delivery (CI/CD)
      • Jenkins
      • Semaphore
      • GitLab Runners
    • Public Cloud Architecture
      • Amazon Web Services (AWS)
        • EC2 Auto Scaling
      • Google Cloud Platform (GCP)
      • Linode
      • Digital Ocean
    • Physical Hardware
      • HP ProLiant DL Servers
      • IBM System X Servers
    • Platform as a Service (Serverless)
      • AWS Lambda
      • GCP App Engine
      • Heroku
      • Knative (on managed and self-managed Kubernetes)
    • Scaling
      • Application (layer 7) load balancing
        • HAProxy
        • Nginx
        • Project Contour
      • Auto scaling stateless app backends horizontally
        • on CPU and memory usage
        • on concurrent connection count
    • Web Application Firewalls
      • Google Cloud Armor
  • LAN/WAN design, implementation and management
    • IPv4
    • Branch networks
    • Cisco (800 and 1600 series)

    I'm not interested in networking anymore

  • Building Businesses
    • Instantiating
      • South Africa: Companies and Intellectual Property Commission
      • United Kingdom: Companies House
    • General operations
    • Trying to raise capital
      • Bootstrapping
      • Lending money from my mom
Web Application Development Experience: Intermediate

My predominantly used and favourite stack is LAMP-memcached (Linux, Apache, MySQL, PHP and memcached) and I've built most of my app backends using this technology stack

Some of my apps use a Node.js backend in AWS Lambda behind API Gateway

When I build a relational database schema, I ensure it's well designed and that the referential integrity is always maintained

I've built single page applications (SPAs) with RESTful backend APIs and I've built applications using server-side rendering (SSR)

I definitely prefer working on the app backend although, you can hire me for a full stack position. I don't like being abstracted by frameworks, both on the frontend and the backend. I write vanilla JavaScript and I enjoy learning about it's core concepts

I have a very good understanding of how the Document Object Model (DOM) API and how the XMLHttpRequest (XHR) API work. Visual Studio Code is my IDE of choice and I'm familiar with Git. All of my projects source code is hosted in GitHub

useful side-projects I put a lot of effort into building
Get Country Data (GCD)

A microservice that returns a country's geographical location information

I developed Get Country Data because I wanted to reduce the amount of costly calls my apps were making to the Google Geocoding/Places API and I wanted to know additional information like currency names, currency acronyms, currency symbols (HTML entities) and international telephone calling codes

The data came out of multiple other projects I was working on and is not read from any external source or a local database but rather it's kept in-memory

tech stack
Relational Database API and Relational Database API Client

The Relational Database API allows access to MySQL over HTTP and ensures the price is low and predictable

This enables me to prevent direct access to the MySQL server and the query result table is returned in an associative array and is optionally serialized and stored in memcached

The API connects to the MySQL server using a user account that is granted all privileges on all databases and tables. It determines what user account to use by parsing the connection string read from the virtual host environment variables

The Relational Database Client is shipped with my PHP projects via Composer and JSON is the data interchange format

tech stack
Frontend

My build process works by concatenating all JS and pushing it through Babel and then through UglifyJS

Percy is invoked by the CI/CD pipeline and performs a pixel-diff

The JS and external stylesheets are cached by the browser and will be re-cached after a production deployment (the frontend web server sets the Cache-Control header)

tech stack
Google Cloud Storage API and Google Cloud Storage API Client

The Google Cloud Storage API and client allows my stateless containerised apps to have persistent storage

It makes sense to ship this functionality as a microservice API because that way I can manage this logic in a central place for all my apps

tech stack
Platform and DevOps Engineering Experience: Senior

I have experience with Puppet and managing large scale server deployments globally (servers > 150) and I have experience with monitoring using New Relic (APM, Infrastructure), Zabbix and Nagios

I've built highly available GNU/Linux server infrastructure capable of scaling the hosted application to thousands of concurrent connections using horizontal scaling and application load balancing techniques

I'm happy architecting and building backend infrastructure both in the public cloud and on physical hardware on-premises

I've created CI/CD pipelines that are invoked by Jenkins and deploy into autoscaling EC2 fleets using the blue-green and rolling deployment strategies

All my Platform and DevOps engineering work is in code

personal platform engineering work
App Server Infrastructure

I run all my app server infrastructure on cost effective Linode virtual machines and I do all the systems administration myself

The frontend and backend web servers run Apache HTTPd with mod_php and each run a local instance of memcached

All of my app backends are integrated into Papertrail, that I used for exception and general logging, and Papertrail invokes a Slack webhook and these exceptions are readable on my mobile phone

I host and maintain all my DNS zones myself using the BIND9 name server. Shell access is protected by private key and 2-factor authentication

tech stack
Continuous Integration/Continuous Delivery (CI/CD)

I use Semaphore CI with all my apps and the pipeline is described in YAML and travels with the git repository and deploys into my static App Server Infrastructure

The deployment strategy is rolling and the webroot directory is a symlink which is updated after the source code is tarball'ed and transferred via SCP

I'm able to do plenty production deployments in a day without negatively effecting the users

For my frontend projects, Semaphore CI invokes Percy and all notifications are pushed into Slack

tech stack
Puppet Masterless

Puppet manages my app servers configuration and is directly applied on each server manually

There is no master and all the Puppet modules and manifests are in Git

Puppet manages everything from the user accounts and SSH server configuration to the Apache virtual hosts and PHP configuration

tech stack
Infrastructure as Code (IaC)

My App Server Infrastructure is in code and can be provisioned and managed with Terraform

If the infrastructure is newly created, Terraform will copy up and execute a shell script that installs Puppet and clones the Puppet Masterless Git repository and applies the configuration

This keeps my server infrastructure, configuration consistent and managed in code

tech stack
Knative

I built a comprehensive Knative installation shell script that deploys Knative into managed Kubernetes from DigitalOcean

I can go from source code/container to a fully functional URL, with legitimate TLS, in seconds

tech stack
Building Businesses Experience: Junior

Solve problems. Build products. Perform work on the ground. Get customers. Launch startups. Fail. Try again

Recommendations
"Bruce was the new guy in our team, but he quickly got down to business and within a few days he was pushing out complex Puppet code driven out of Hiera. Bruce also sunk his teeth into our Infrastructure AWS stacks driven out of Cloudformation code, and quickly managed to get familiar with it..."
Riaan Nolan, Head of DevOps Engineering - Ringier One Africa Media
"...And Bruce did very, often working under very severe pressure but still delivering the required assistance. I have complete confidence in Bruce and his abilities."
Ray Musvibe, Technical Lead - Indaba Mobile
"Bruce's technical skills are very good and he has received compliments on his support from users... He will also help out other engineers at night/on weekends..."
Shelley van Niekerk, Service Desk Manager - Liberty Health Holdings
Education
Fish Hoek High School (2006)

My favourite subjects were history and computer science. I partook in extracurricular computer science classes that taught programming in Java

EC-Council (2007)

Certified Ethical Hacker (C|EH)

CompTIA (2007)

Linux+ Certified Professional

Cisco (2011)

Cisco Certified Entry Networking Technician

Dale Carnegie (2012)

Effective Communication and Human Relations (self-paid for seminar, 7 weeks)

Personal

I used to run Gentoo 2006.1 (vanilla 2.6 kernel) with Xorg and Xfce and now I use OS X on a 13" Macbook Pro Mid-2010 Mid-2014 Mid-2017

I learn by doing, by building, by experimenting and by taking risks. If I don't understand something, I take the time to figure it out and I never give up. Ever

I've failed many technical interviews and I really don't care about your opinion on what you think I should know or how you think I should come to know it. I learn about various design paterns, specific algorithms and esoteric data structures when it becomes apparent that I need to know what they are and how they work. Some of these concepts I commit to memory and you can test me on them, others I don't and what are you expecting?

I'm probably not smart enough to solve the halting problem and I don't enjoy hardcore math concepts but I have a passion for how the web works and I have a lifetime of learning to do

IDE with PHP code
OS X Dock with apps
Natural Languages
English

Native or bilingual proficiency

Thai

Elementary proficiency