Focused on building tools and products that developers love while balancing the need for teams to move quickly and fail fast. Below is a summary of my work so far.
Senior Software Engineer
I joined DTN within the early stages of their Research & Development expansion. DTN has grown through acquisitions so many of their applications and services range from older technologies such as BASIC to .NET 4.2 to modern technologies such as React and Next.js.
My primary objective is to help develop and scale a variety of NPM packages that help support DTN developers. These NPM packages range from a component library (built in React), handling Authentication (through OAuth), to a CLI tool (built in yeoman) that assists in bootstrapping an application for DTN developers within seconds.
- In 2022, my focus was on growing our Component Library. This involved us working with UX/UI and working with DTN developers, trying to create a standard and trying to find a one-size-fits-all solution.
At the end of 2022 and start of 2023, my responsibilities grew and I began to wear multiple hats. π΅πΌββοΈ π§πΌββοΈ π¨πΌβπ π¨πΌβπΎ π¨πΌβπ³ ππΌββοΈ
I was responsible for scaling our infrastructure to allow us to βmove fast, fail fastβ and simultaneously minimize defects. In 2022,
we moved fast but we found that defects increased by 10%. We want to provide DTN developers with new features, resolved bugs/defects as quickly as possible while maintaining their trust and confidence.
Within our monorepo, we use lerna to promote and publish all of our NPM packages. In 2022, promotion and publishing was a manual step. It was costly, it could take up to a morning for us to release and deploy to our Dev, Staging, and Production environments. The solution was to make this process part of our CI/CD pipeline in Gitlab. We utilized lerna's conventional prerelease command so when our team merged Pull Requests, our CI/CD would kick off and publish a release candidate. This gave our QA and the DTN Developers a way to test new features, bug fixes without any major impacts. If the issue persists, developers can revert back to production. At the end of a Sprint, we would publish our production versions of our packages.
End of 2023, my focus shifted on a new initiative, Widgets. We wanted to replicate the success of our monorepo and NPM packages but there were caveats. Widgets needed to be both an NPM package but, also have have the capability to import the Widget through an Javascript file.
The NPM package aspect and CI/CD process were simple and straight forward since we had solved it with our monorepo. Webpack provided us with the ability to create these Javascript files per widget. We then extended the CI/CD pipeline to incorporate both aspects so the necessary commands would call our defaulttsconfig.json
for NPM packages and the necessary command would call our tsconfig.esm.json
for creating our Javascript files.
Senior Software Engineer III, 2019 - 2022
I joined Anaconda as an Application Engineer focusing on developing features for their existing Anaconda Enterprise 5 Solution using Angular and Python (Flask). While working on Anaconda Enterprise 5, I increased our testing coverage from 2% to 60%, moving us from Karma to Jest.
Within the coming years, I worked on multiple initiatives to help reshape how Anaconda was viewed, moving beyond just a package management service -anaconda.org.
I led the initial development for Nucleus, which would be Anaconda's new front facing website . Nucleus was initially built in React, which we later moved to Angular. Anaconda was primarily an Angular shop, hence the move from React to Anaconda.
After Nucleuswas defined, I became a Full Stack Developer for Anaconda. I was responsible for developing features across multiple products, which involved architecture discussions with Backend Engineers and DevOps using Angular, React, and Python/FastAPI
Within that lifespan, we lost our Product Manager. With no Product Manager, I created a Hypothesis Initiative, which was essentially an Excel Document with ideas, features, offerings that could help grow Nucleus. The engineering team could pull from this document, develop a Story in JIRA, the required tasks and develop the feature. The catch was for the engineer to come back to that feature and measure it's effectiveness using
- I lead a few MVP products built in React that assisted with Anaconda gaining partnerships with HP, Snowflake, and Microsoft. Out of those variety of MVP products, 40% of them would ultimately become products, offerings, and/or features that would live in Nucleus such as Anaconda Notebooks.
# Python# FastAPI# React# Angular
Senior UI Developer, 2018 - 2019
My second go around with IBM was an interesting venture. During that time, they were incubating a start-up inside IBM. Initially, I was the sole developer responsible for the development of the UI using Angular. I worked closely with the sole Architect (who was in India) developing the APIs and working with UX designers who were developing the interfaces.
After a few months, I became Technical Lead for the project. I continued to work closely with the Architect in India but managed an Austin based team of Backend (4) and Frontend (4) developers. My objective switched from developing features to discussing with stakeholders what was feasible in the roadmap. I also was mentoring the Frontend developers, half had limited experience with Angular.
# Angular# Python
Software Engineer, 2017 - 2018
Before Bitfusion's acquisition by VMWare, there was a software team I was apart of. As one one of the three Software Engineers, our objective was to develop a CLI tool, called Flex Pro, that would create and manage clusters in Amazon Web Services. Those clusters could be used by Data Scientists to create Jobs for creating, training and/or the exploration of their ML Models.
Flex Pro (the CLI tool) was built in Golang using Cobra, Viper, and KOPS. I also managed the client tools, which were built using React and NodeJS. The users essentially could use the CLI tool to view their workloads or go to browser to view their workloads.
# Golang# NodeJS# React