Hello from TC

Genuinely glad you've ended up here.

Take a look below for a sampling of my adventures in software development over the years.

Or, if you're just here to chat, see the bottom of this page for details.

It All Starts with Authentication

Hard to have SaaS without it. In my role at Under Armour I served on the team that maintained and improved a Java-based Identity service hosting over 100 million accounts. I also acted as a consultant for the design of an OAuth flow for UA's e-commerce site built on the Salesforce Commerce Cloud platform.

For one of my favorite internal projects at UA, I leveraged Auth0 to facilitate both authentication and authorization for an admin site, unlocking the possibility to guard certain functionality behind roles and permissions - both server-side and client-side.

Payment Systems

My career has given me several opportunities to build out payment solutions. Most notably, I've leveraged Stripe to accept credit card payments on the web for premium app subscriptions - both with their original Checkout library from ages ago, and with their modern React component library. And I've integrated with their API to manage those subscriptions programatically, building cronjobs to process subscription renewals and webhooks to keep users' data up-to-date.

My team's responsibilities at Under Amour included maintaining the Scala-based Premium system that managed app subscriptions. Scala! I know, I can't believe it either.

OK, I'll talk about React

I suppose it's no secret. The React library is a massive cornerstone of my career, as I've spent the last seven years building applications with it. I don't see that changing, either. It's a great library - and a fun one.

What have I built with React?

  • Employers' Job Posting Flow for Indeed
  • Credit card checkout for web-based purchases of MyFitnessPal Premium and MapMyFitness MVP
  • Under Armour Digital's internal admin site
  • The CLT Shipper Flow for uShip
  • UI component libraries
  • This site
  • And countless half-baked side projects, of course

I've seen the rise and fall of class components, the reign of render props, and now the era of hooks. And I've tuned and debugged them all.

Guilds

I've noticed in my career that front-end minded engineers like me can be few are far between, spread out among the teams and embedded among several server-side folks.

That's why at uShip I participated in and at Under Armour founded a Front End Engineering Guild - to connect JavaScript developers from across departments and time zones in order to maintain a collaborative learning environment. We discussed community news, discovered what each other were working on, and established standards within the organization.

I couldn't be happier with the guilds and what we achieved through them. They were my favorite meetings each month, easily.

Static Analysis Testing

I simply adore this discipline and have steadily increased my leveraging of it over the years. Whether it's using Prettier to auto-format code to an opinionated standard, ESLint to nudge (potentially bug-introducing) stylistic deviations, or Husky to enforce these upon commit - I love working in codebases that have that fresh-out-of-the-laundry smell.

Much of my growth here has been fostered by the courses written by Kent C. Dodds, a talented and prolific coach, conference presenter, and co-founder of Remix.

Infrastructure

Where would we be without the infrastructure teams that make hosting our sites and keeping them running possible?

I've been very lucky to have worked with talented infrastructure teams that help make cutting edge technology available to us. So that means I have an extensive list now of software in my toolbelt that I use on a daily basis to ship code. This includes:

As a JavaScript engineer, I must say I'm quite happy with the breadth of infrastructure technologies I've been lucky enough to try and become proficient in.

My Favorite Library

Hard to pick one, sure. But if I had to choose, I can say with some certainty it would be React Query by Tanney Linsley. It aims to solve the problem of syncing server state with client state in a manner that's friendly both to the user and the engineer. And it's incredibly performant, too. Awesome work.

Chat With TC

Chat is unavailable at this time.