IMG_1228.JPG
Code.jpg
IMG_1228.JPG

All-stack


I have 14 years experience as a full-stack developer, coupled with an ability to build teams and take product ownership.

SCROLL DOWN

All-stack


I have 14 years experience as a full-stack developer, coupled with an ability to build teams and take product ownership.

UX & DESIGN

I combine awareness of technology’s capabilities with a keen sensitivity for a user’s end to end experience to craft frictionless systems. I use mainstream design languages like material, semantic or ant.design for prototyping. I work closely with visual and UX specialists to achieve precision & visual acuity for production software.

FRONT-END

I work with typescript and its strong type system as a foundation. I’ve created commercial applications with both react and angular. More recently, I’ve explored dart and flutter for cross-platform prototypes. I’ve built development environments with both webpack and fusebox. I’ve used both nextjs and gatsby to develop static and server-side rendered sites.

BACK-END

I’ve used the .Net stack since v1.0 in C# and more recently with ServiceStack. I’ve developed many more applications in node with nestjs and in php. I can mix and match whatever tech is necessary in back-end. Stacks like serverless are especially good for this. Interested in gaining more exposure to python, rust or go (of course).

DATABASES

Coming from a lifelong relationship with mssql and postgres, I’ve more recently branched into nosql databases like redis, firestore and postgres’ jsonb column store. I’ve also played with graph databases like dgraph. I’m interested in working with cassandra and realtime distributed databases like realm.

DEV OPS

I’ve built continuous testing and deployment pipelines in circleci, codefresh, gitlab, cloud build and appveyor. I use docker-compose, kubernetes and helm to roll out development and production environments. I deploy to GCP and Amazon with terraform and have also used CloudFormation. I’ve used heroku, convox, now and netlify for PAAS. I’ve perfected one touch deployments and rollbacks using monorepos for these pipelines using lerna, semantic-version and semantic-release. I’d like to work on a commercial serverless project.

PATTERNS

I actively promote reactive programming and message-driven, stateless system architecture. This provides great scalability and rx is a broadly accepted pattern that can be used in almost any stack. I adopt functional programming and separate state from processing wherever possible. In front-end, I use framework agnostic state and routing tools to decouple application logic from the view layer. For back-end, I take cues from Robert C. Martin’s clean architecture and adopt infrastructure-as-code practices for devops.

TESTING

I prefer black-box integration testing over intricate unit testing - it offers less friction, covers more for less effort and ties tests directly to user experiences and project goals. I use behavior driven development practices for deeper testing in critical components. I’ve developed automated testing solutions using browserstack, selenium, phantomjs, nightmarejs and puppeteer. I’m careful to ensure testing doesn’t erode productivity.

Code.jpg

I code in .*


I code in .*


My working style?

I advocate that any viable design process must be deeply intertwined with sales activities in order to expose ‘commercial truths’. These truths are the insights that contribute directly to the market success of a product or service and so I employ a combination of minimal-cost prototyping and direct sales activities to assess the viability of a design before investing in development.

Development starts with interpreting any user stories or service workflows to extract entities and form a fundamental data structure. Based on this data structure and the goals of the application, I’ll then choose database technology and corresponding back-end and front-end stacks.

Depending on the level of ambiguity and scope of the design, I may develop mock APIs to power Craft, Sketch and Invision for confirmatory mock-ups before undertaking development. At this stage I may involve a visual designer or UX specialist if high fidelity mock-ups are required. Otherwise, typically barebones wireframes are fast and sufficient.

In my own development and the teams I lead, I emphasise the need to obtain consumer and peer-reviewed feedback as often and as directly as possible. Consequently, I promote developing in work units of absolute minimum functionality required in order to gain meaningful feedback. This ensures that a steady stream of context is available and individual efforts can remain focused on commercial goals.

I’m keenly aware of the dopamine cycle associated with iterative development and helps teams to adopt practices that minimise distractions, build mindfulness for focus, keep lab notes and track their productive time. The goal is holistic wellbeing, which is the single greatest productivity boost and so I set individual goals to 6 productive hours per day. This ensures a balance of meaningful progress and healthy work/life freedom.