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
- Customer Relationship Management (CRM) solutions
- Push Notifications
- Customer Support & Ticketing
- Event Streams
- VoIP & PBX
- Single Sign-On (SSO) Authentication
- Web Services (RESTful, SOAP, XML-RPC)
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 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’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.
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.
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.
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.