Career Profile
I am a full-stack developer with skills in front- and backend development, DevOps, cloud computing, network administration, infrastructure monitoring and configuration. I am motivated by autonomy and a clear sense of direction: I love to own projects and stand behind my work.
While I can work in different frameworks, my core skillset is full-stack Typescript with Angular + NestJS. Most of all, no matter what I’m working on, I’m driven, tenacious and resourceful and I love solving problems. Want to talk? Send me a message!
Specialties:
- Fullstack Typescript Development
- Nrwl Extensions (Nx)
- Enterprise Architecture in the Cloud
- Monorepos!
- Moving from big picture into action
Experiences
I started working at Cisco as a contractor, converting to FTE after finding that it was a really great fit. I've worked the full stack at Cisco collaborating with many teams and different business units to enhance their suite of security offerings.
- Angular 9+, NgRX, Typescript, Bootstrap, RXJS.
- Nx: Powerful, Extensible Dev Tools.
- Architected and constructed NestJS microservices to guide new development away from the existing monolith.
- Took advantage of fully-managed AWS products including DynamoDB, RDS, S3, ECS (Fargate) and Lambda functions.
- Architected and implemented a Nx monorepo for backend microservices hosted as Lambda functions.
- Developed fully-functional CI/CD process for deploying, testing and promoting microservices.
- Helped set patterns for NestJS / Lambda / Angular 9+ development, testing and maintenance.
- Completed code reviews for multiple teams for Angular and Node applications to ensure consistent design patterns.
- Acted as code owner for the monorepo containing all of the Typescript microservices / Lambda functions.
- Converted various features to microservices / microfrontends so they could be reused whenever possible.
- Mentored other developers, guiding them through initiatives and supporting them to produce clean, maintainable code.
- Led the integration effort for SecureX into Cisco Defense Orchestrator, including all development efforts both front- and backend, cross-team collaboration and QA.
- Jointly led the design effort for SNS/SQS communication strategies among microservices, Lambda functions and the existing monolith.
- Dockerized services not appropriate for Lambda and moved to Fargate to reduce server maintenance and overhead.
At National Machine, I worked with clients to build a variety of single-page applications. I utilized javascript front-end frameworks to create high-quality user experiences. I built REST APIs and microservices for a variety of purposes from on-boarding new hires to content management and email marketing.
- Angular 5 + NGRX with hot module replacement and ahead-of-time compilation.
- Worked with observables and RxJS to solve state management issues.
- Used, and loved, the Redux pattern using NGRX entities to reduce boilerplate.
- Incorporated many UI/CSS frameworks such as Kendo, Bulma and Bootstrap into our projects.
- Converted applications from Angular 1 to Angular 5 and from Javascript to Typescript.
- Built APIs with complex domain models in Laravel + MySQL. Implemented multiple third-party services such as Stripe, Mailchimp and custom OAuth servers.
- Built performant and light-weight APIs with Node + Express + PostgresSQL.
- Maintained API uptime using Zabbix Web Scenarios, Runscope and other monitoring technologies.
- Designed relational databases for scalability, data consistency and long-term stability.
- Implemented NoSQL databases when appropriate and not just because they're Web Scale.
- Configured multi-tiered API tests and error reporting to ensure that clients got the responses they expected and, if they didn't, that we reported the error immediately and provided proactive support.
At National Machine, I helped small and mid-sized businesses provision servers, keep their data secure and build out their physical networks. I configured monitoring and fault-tolerance for our entire server fleet across three locations, eight hosts, 50 virtual machines and a slew of containers. I built and configured our entire private network inside the datacenter including the edge router, redundant switches, routing, NAT and firewalls.
- Worked with VMWare ESXi to provision virtual machines.
- Built a Proxmox cluster on top of Ceph distributed block-level storage.
- Implemented VRRP to ensure graceful failover in the event of a router failure.
- Configured the entire server fleet using Puppet and the best-practice roles and profiles method.
- Ran services in Docker when that was more appropriate than an entire VM.
- Monitored each server at three levels: guest OS, hypervisor and iDRAC / IPMI using Zabbix, the Zabbix agent and SNMP.
- Deployed multiple applications using Jenkins Pipelines, CircleCI and Gitlab.
- Deployed and monitored NodeJS applications using Jenkins and pm2.
- Implemented Pagerduty with various escalation schedules to notify on-call staff of any issues with our fleet or client applications.
- Integrated all of our platforms into Slack for a unified reporting feed.
- Maintained a Graylog server to which all syslogs, Nginx and application logs were exported. Used streams and its advanced search functionality to debug systems and software.
- Set up Grafana dashboards to provide engineers with an at-a-glance overview of how our systems were running.
- Utilized BIND to provide split-horizon DNS for our three linked physical locations, enabling access to private services where some parts of the zone still needed to resolve externally.
- Maintained a suite of Veeam backup, replication and backup copy jobs to make sure we had two on-site and one off-site copy of everything.
At Revel, I worked on everything from Java services to DevOps and server infrastructure, while focusing on frontend development. I led small teams developing Angular and Node applications and facilitated company-wide workflow changes for increased velocity.
- Angular 6 + Redux.
- Used Nx (Nrwl Extensions for Angular) to consolidate related UIs into a single project to maximize code reuse, testing and efficiency.
- Coordinated with Revel's overseas frontend developers to make sure everyone was productive and happy within the new structure.
- Spearheaded the change from manual deployments to continuous delivery and wrote the scripts to handle all UI deployments.
- Built a real-time service with Node + Express, Pusher and RabbitMQ, to allow any microservice to dispatch a real-time message to any UI.
- Carried out a code audit within a HIPPA / HITRUST environment and suggested changes to assure compliance.
- Harnessed enterprise integration patterns such as handling inter-domain communication with RabbitMQ and SQS.
- Worked with Auth0 to provide hosted login, MFA and user management.
- Composed custom Auth0 rules for IP whitelisting, MFA and branding for clients across four different tenants.
- Enhanced various existing services written in Kotlin (Spring).
- Dockerized microservices and constructed pipelines for deploying to AWS (Docker Swarm, S3, Cloudfront).
- Built a reporting and error tracking pipeline with Sentry + Slack + PagerDuty.
- Led an initiative to improve flow between development and QA by bringing integration + e2e tests into the monorepo.
- Consolidated all email development into a monorepo and provided a framework for maximum reuse of existing markup and styles.
At Livefront, I built a frontend application for the startup side of a giant in the education industry. As the sole frontend developer, part of my responsibilities included writing comprehensive tests and documentation for every part of the application. Good architecture, a complete set of test suites and thorough documentation assures the application works as intended and is maintainable by anyone.
- Angular 6, RxJS6 + Redux.
- Used Nx (Nrwl Extensions for Angular) to insure code reusable, testable and maintainable across multiple applications.
- Integrated with a Rails backend service and MySql databases.
- Led weekly demos of the progress on the UI.
- Coordinated with the client's designers and developers to implement their UI/UX standards.
- Worked with various third-party libraries for streaming video, cue points and timeline events.
- Developed strategies to manage local state within an iframe running in a separate application.
At Plotly, I was responsible for building a few different front- and back-end auxiliary applications to help support their main SaaS product. I worked on an event management platform (which eventually became Symposia), a support platform and its associated website, as well as their event series, PLOTCON.
- Partnered with Plotly sales, marketing and engineering to gather requirements for their Support and Event Management platforms.
- Built three single page applications in Angular utilizing component-based front-end design and services for managing state.
- Built a support payment gateway using Laravel and integrated Plotly's existing user database.
- Implemented custom OAuth with Plotly core to make sure there was always only one source of truth.
- Provided pro-active support.
Projects
My personal projects have been as much a source of learning as my professional experience. Without the following efforts, I would not be the engineer I am.
A full-featured event and content management system. I built a majority of Symposia over 18 months. Symposia is made up of three javascript applications and one API that powers them all. The API is built on top of Laravel 5.5, the control panel was built using Angular 5 + Redux and the auxiliary applications are Angular 1.6. In addition to development, I was also responsible for networking administration, server provisioning and management, our CI/CD pipeline, Git and monitoring and security systems. It is my largest project to date and involved every piece of the development-to-delivery pipeline.
This project was one of the most important things I ever did because it failed: I learned a lot about what not to do, how not to run a software company, and how to bounce back from the embarrassment of failure. I was exposed to the business side of software which most software engineers do not ever get to see.
I began building a homelab in January 2016 in order to learn networking, virtual computing, containerization, configuration management, DNS and more. What started as a single server grew into a fleet of hosts and 100+ virtual machines spread across four physical locations, managed by Puppet. One of my favorite things is simulating a business use-case at home to learn campus networking, advanced DNS configurations and how to keep things online.
After the initial setup, I began migrating services to Docker Swarm and, eventually, Kubernetes so I could learn how those technologies work. While it is just a hobby, running a homelab has been one of my favorite non-work ways to expand my understanding of engineering as a whole.
My wife, Katy, and I started a podcast which we live-streamed over the internet. Each episode featured an in-studio guest musician and a selection of their favorite tracks, played on vinyl. I was lead engineer and host, managing eight simultaneous inputs, mic placement, compression and EQ. We ran the show for almost 8 months until National Machine and Symposia required more energy and time. Working with talented musicians in an intimate, tiny-desk environment was an incredible experience and we can’t wait to get back to it someday.