Skills

I consider myself a full-stack engineer, working from frontend to backend, although my core strengths lie in backend application development, data modeling, and platform & infrastructure work.

I've built many software solutions over the years and have vast experience in the following areas:

  • High Availability (HA) Clusters
  • Service-Oriented Architecture (SOA)
  • Payment Gateways
  • Email Service Providers (ESPs) - transactional, trigger, and campaign
  • Shopping Carts
  • Logistics
  • Customer Relationship Management (CRM) solutions
  • SMS
  • Push Notifications
  • Customer Support & Ticketing
  • Accounting
  • Event Streams
  • Search
  • VoIP & PBX
  • Single Sign-On (SSO) Authentication
  • Web Services (RESTful, SOAP, XML-RPC)

Languages

I firmly believe in using the right tool for the job. When planning a project, I'll assess the strengths and weaknesses of a particular language against the requirements of the project. I'll also factor in my own experience with the language and the time I'm able to commit to the build.

I definitely have a natural bias towards PHP and the Laravel framework for my backend application builds given my 15 years of experience with the language. If I have the luxury of time, I'll build in Python's Django framework. If I need to worry about concurrency or real-time interactions, such as those facilitated over web-sockets, I'll choose Node.js. If the project requires a highly functional interactive user interface, I'll choose a frontend framework and write ES6 JavaScript.

php
python
nodejs
javascript
java
html5
css3

Frameworks

I used to be the type of developer who loved re-inventing the wheel. I'd disassemble an established project and re-rebuild it from scratch. I now have a coding mantra where I believe in writing as little code as possible necessary to achieve the desired output, which is why I almost always build with a framework.

I'm comfortable working with all the big PHP frameworks - Laravel,Symfony, Zend,CakePHP, and even CodeIgniter. If given the opportunity to build a greenfield project, I'll typically choose Laravel. I like the simplicity of the framework, the gentle learning curve for new developers, and I generally agree with most of the design decisions taken by its core team.

I'm by no means an expert with Python, but I hack around and further my skills whenever I have the chance. I'm a fan of the Django andFlask frameworks. I'll build on Flask if the project is more minimalistic and lightweight, and I'll pick Django if I need an ORM or all the bells and whistles of a fully-fledged framework.

I've never had the time to dive deep into native mobile development. I have, however, done a few contract jobs where I built hybrid apps using the Ionic/Cordovaand AngularJS frameworks.

laravel
symfony
cakephp
codeigniter
django
angular
cordova
ionic

Databases

I’m confident that data modeling and database administration are a core skill set of mine. I've worked with many MySQL configurations over the years: solo, active/passive master-master, and master with multiple read replicas. I'm most comfortable with MySQL, although I've dabbled with PostgreSQL and have no problem working with any other RDBMS. When it comes to storing non-relational data, I'll use a NoSQL store such asMongoDB. I've grouped Redis under databases, although I typically use it as a caching store or session store for high-availability apps.

mysql
redis
mongodb

Infrastructure

I'm a self-admitted Google Cloud Platform fanboy and will choose it over AWS if given the choice. When running services locally, I tend to go with docker-compose orminikube. For production services, I build with Jenkins and deploy to Google Cloud Platform usingKubernetes - a container-orchestration system open-sourced by Google. If I'm working on a personal passion project, I'll use a continuous integration and deployment service such as Cloud66 and deploy to aDigitalOcean VM.

google-cloud
aws
microsoft-azure
kubernetes
docker
jenkins
heroku
circleci
cloud66
chef
puppet

Services

These are just a few services that usually form part of my stack when I'm building scalable, high-availability applications. I'll stick Varnish at the front of a service behind a load balancer and reverse proxy through to NGINX -> PHP-FPM. I like to separate out session and cache stores and will therefore useRedis for sessions and Memcached for application-level caching. I use RabbitMQ for queueing, typically to process offline jobs via worker processes.

apache
varnish
elasticsearch
kafka
memcached
rabbitmq

Frontend

I'm not a huge fan of working with frontends but will muster up the courage when required. I'm competent with most frontend build tools, compilers, transpilers, and frameworks. If I'm hacking something small together, I'll use Bootstrap for wireframing and then good oldjQuery. If it's something more complex, I'll pick a frontend framework like AngularJS. The back-office systems I write are usually built on top of Material-UI orMaterial Design for Bootstrap 4.

webpack
jquery
sass
less
gulp
bootstrap
bower
grunt
handlebars