I am a full-stack developer with skills in front- and back-end development, DevOps, cloud computing, network administration, infrastructure monitoring and configuration. Owning and operating companies for 14 years, leading small teams on a variety of projects, I have been exposed to the entire stack in a variety of roles. I am motivated by autonomy and a clear sense of direction. I can always make the case for a monorepo.
While I can work in a few different frameworks, my core skillset is working with Angular. I have always loved the framework and I believe that for many large organizations the structure, the CLI and the plethora of tools make it a great choice for organizations looking to standardize and increase velocity.
Most of all, no matter what I'm working on, I'm tenacious and love solving problems.
I began working with Merrill because of my knowledge, experience and expertise with monorepos. I have taken an active role in their architecture, testing strategies, CI/CD, developer mentoring and quality assurance.
- Angular 7/8, NgRX, Angular Material, RxJS 6.
- Nx: Nrwl Extensions for Angular and associated toolsets.
- Node, Typescript, Express and NestJS.
- Helped improved the organization's use of Nx (Nrwl Extensions for Angular) to move from multiple (mono)repos to one, single monorepo.
- Helped set patterns for testing all parts of their Angular applications.
- Completed code reviews for all teams for Angular and Node applications to ensure consitent design patterns.
- Worked on making various features stand-alone so they could be reused whenever possible.
- Refactored very large chunks of the codebase for the primary application to make better use of our tooling and to clean up sibling dependencies.
- Led the initiative to convert all apps and libraries from Karma to Jest for better developer experience and much faster pipeline runs.
- Troubleshot CI/CD issues including Jenkins, Node and Github integrations.
- Addressed production issues involving frontend apps, internal networking, BGP and failures by the network backbone and cloud providers.
- Mentored other developers, guiding them through various initiatives and supporting them to produce clean code.
- Built consensus and got buy-in from stakeholders, engineering team leads, product, UX and upper management to carry out much-needed improvements to infrastructure, core design principles and process.
- Led an initiative for comprehensive error reporting including more granular error reports. Built integrations for Instana for the systems engineers and Sentry for the frontend engineers to stay on top of any issues that arose.
- Developed a three month, six month and one year plan to foster cross-team collaboration, improve code quality and consistency within our applications.
- Deployed applications to Azure and Pivotal Cloud Foundry and worked with JFrog and Artifactory to manage build artifacts.
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.
- 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.
- 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.
- Flirted with NoSQL databases but never really found love. I haven't given up hope, however.
- 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 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.
I've mostly been self-employed, so these projects are also largely my work.