Reducing my open-source-lifestyle’s API surface area!

Tanner Linsley
3 min readSep 6, 2018
Photo by Derzulya Zaza on Unsplash

You may know me as a React / Javascript developer and one that writes a lot of open source software! I love these things and am happy to be working in a career that lets me devote time and energy to them, but there are other things that can quickly become overshadowed by that passion:

  • Family
  • Work
  • Personal Time
  • Friendships
  • Spirituality / Religion / Charity

Lately the time it has been taking to maintain my open source lifestyle has become exhausting. It has been taking away from my ability to focus on and complete other important tasks in my life. I have determined that this is because my personal API surface area is massive!

An API surface area is typically defined as the part of a program that your users can openly interact with. It’s also sometimes called the “public API” of a piece of software. Currently I maintain (either fully or partially) the following open source obligations:

Between all of these project, my time is spread thin with constant requests for features, bug-fixes, pull-request approvals, npm releases etc.

Some of the things requiring my attention don’t necessarily require a lot of time, but take enough of it to require a mental context switch or simply put, enough to be distracting:

  • NPM releases —This one is probably the most annoying, but I know its automatable. I simply haven’t taken the time to set it up. Once I do, I won’t have to stop everything I’m doing every day to publish a new release on one of these libraries.
  • Support — Providing support for these libraries takes a lot of time and TBH, it slips through the cracks of my attention span a lot of the time, but I promise I do my best. Recently I switched all of the forums for each library over from slack to spectrum.chat. This has been fantastic, since all of the questions asked on each channel are kept forever and are also indexed for SEO and discoverability. This has reduced repeated questions a ton and I am so grateful to the spectrum team for it!
  • Pull Request reviews and approvals — Pull-Request reviews and approvals are time consuming. The most annoying kind are usually those that introduce a large departure from the code-base without prior discussion. This usually means that I will have to tell the committer to rethink, rearchitect, or simply reject the code they have submitted. This is painful and I wish there were better ways to mitigate this time loss.
  • New Features — For each library, there are users every day that are requesting new features, new functionality, or need help implementing a special use case for their circumstances. This is a HUGE time suck and honestly it’s my fault. It’s typical of API’s that are designed poorly to require a lot of tweaking, upgrading, and core-level code changes to appease these types of requests. This is why I am converting all of my components (that can be) to Headless Components. The first one you’ll see in progress is React-Table v7. This will quite literally reduce the API surface area for the component and allow the user more control (via inversion of control) to do whatever they want, instead of asking me to :).
  • Needed Deprecations — Sometimes you just have to cut loose. For me and many others, that means letting go of React Form. It has served so many in the past, but today it will be receiving a deprecation notice of unmaintained status. You can read more about the post-mortem here!

I believe that by doing these things, my personal API surface area for open source will be reduced, allowing me to move faster, ship more, and stay focused! It’s been great so far, and I encourage you to do your own evaluation of your personal API surface area. Do you have room to grow? Do you need to cut back? Automate, clean, chop, and mold your attention and distractions to be a more productive developer!

Thanks for reading my article! If you liked it, chat with me on Twitter, check out my awesome new SEO Analytics Software, use one of my open source libraries, or just be a good person and pay it forward!

--

--

Tanner Linsley

Working on building better #react-tools for everyone! · Front-End Dev & Co-Founder @nozzleio · #react-static #react-table #react-form #react-move⚛