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.