Ethan Glover

St. Louis, MO 63017 (Open to Relocation) | (816) 542-0568

hello@ethang.email | https://ethang.dev

Software engineer with experience across many different technologies. I have been writing code and working with the web for most of my life. I built my first website at around 9 years old, it was a green neon background with 10 pictures of monkeys written in HTML/CSS. I've continued to learn through my life by getting into the advantages/disadvantages of different perspectives like OOP, functional programming, hybrid paradigms, test-driven development and behavior-driven development. I am constantly working on side projects and love jumping in and learning new things.

Core Skills

JavaScript
4.83 yrs
HTML/CSS
4.83 yrs
React
3.74 yrs
NodeJS
3.17 yrs
TypeScript
2.83 yrs
GraphQL
2.74 yrs
Agile
1.99 yrs
C#/.NET
1.66 yrs
REST
1.5 yrs
SEO
1.5 yrs
On-Prem Hosting
1.24 yrs
Vue
1.08 yrs
Software Contractor/ConsultantNov 2018 - (Current)
  • Multiple contracts working with many different stacks. Primarily React as a frontend, and many backend technologies such as Node, .NET, Java and PHP.
  • At LegrandAV I led an upgrade from vanilla React and Sitecore to NextJS. The project had been at a standstill for 2 months due to hosting problems. We got it running within a few weeks and moved on to a redesign of the user dashboard. I encouraged the the team to move away from outsourcing to markup services for frontend work and make use of accessible libraries such as NextUI.
  • With St. Louis County, introduced automated testing to legacy codebases by setting up and writing unit tests for .NET backends as well as E2E and accessibility testing for React frontends. The major challenge with introducing tests to legacy codebases is that test runners sometimes expect the best practices that they enforce. For example, React state was not being handled immutably. While it seemed the applications were fine on manual review, tests revealed different states between renders. This was causing many very difficult to reproduce bugs. This means getting tests set up would require significant refactoring, even entire rewrites. This is why we pivoted to a focus on E2E as much as possible.
  • At Proagrica, I worked with a highly dynamic farming dashboard for an international audience. Made use of Redux to manage complex state interactions and used time travel debugging to discover existing state, debug, and build new features.
  • With the EPA, I helped rebuild Emissions Collection and Monitoring System (ECMPS) for reporting emission data with a new tech stack. I was one of three developers building the backend. We made an effort to always increase test coverage. The result was QA asking for us to slow down because our production was too fast and not revealing issues. This gave us time to produce more reproducible examples and help QA to ensure the highest quality possible.
  • At Avatara I built a team collaboration app from scratch which included features such as P2P video conferences, chat, phone calls, calendar, file sharing and more. All with realtime notifications between users and teams provided by websockets and styled with CSS modules. I was by myself on this project tasked with bringing a general idea to life.
Projects
  • eslint-config-ethang
  • Toolbelt
    • TypeScript utilities with a strict, consistent error handling inteface. Forces error checking, inspired by GoLang and Zod.
    • Includes tool for building a centralized API and fetch abstractions to use the standard Cache API.
    • github.com/eglove/toolbelt
  • React Hooks
    • NPM library and custom hooks for use with React.
    • useAnimationInterval is a setInterval alternative that takes into account lag in timers caused by browser framerate.
    • useEventListener makes use of AbortController to abstract out the need for writing useEffects for events in React.
    • useForm idiomatic patterns for React + AJAX form submissions. Includes ability to validate forms with Zod schemas.
    • Also includes: useCopyClipboard, useDimensions, useFullscreen, useIsOnscreen, useLocalStorage, useMousePosition, useSet, useToggle, useWindowSize
    • github.com/eglove/hooks
  • Project Builder
  • Sterrett Creek Village Trustee