Blog

All I wanted was a table

Someone wants a filterable table in 2016 and gets handed a reading list. A few thoughts on who ends up paying for our tooling.

Imagine someone who stepped away from web work for a few years, came back, and wants to show some data from an endpoint in a table. It should filter. It should update when the server changes. That’s the whole wish.

Ask around and they’ll get a reading list instead of an answer. React, then JSX, which means Babel, which means npm, which means a bundler, and maybe a task runner, and have you thought about types, and you’ll want a state library eventually so you might as well start with one. Every answer opens two more tabs. By lunch they have nineteen tabs and no table.

                    +--------------+
                    |  your table  |
                    +------+-------+
                           |
     +---------+---------+-+-------+---------+---------+
     |         |         |         |         |         |
    npm      babel    webpack    react     redux    eslint
     |         |         |         |         |         |
  left-pad  .babelrc  loaders     jsx     thunks  .eslintrc
     |      presets      |                   |
  (oh no)              webpack.config.js    sagas?
                       (do not touch)
A small front-end project in 2016, sketched. Every arrow is something the next new hire has to learn before they can change a button.

The funny part (it’s funny if you squint) is that every one of those tools is good. Somebody built each of them to fix a real pain. Our returning friend just doesn’t have most of those pains yet. They have a table. Handing them the full kit is a bit like answering “how do I boil an egg” with a guided tour of a restaurant kitchen.

I keep wondering who actually pays. The person who set up the project already knows all of it, and to them the tools feel like furniture. The bill goes to whoever arrives next. The new hire. The engineer from another corner of the codebase who needs to fix a typo in a button. The future version of you, opening the repo after a year away and watching the build fail because some plugin went out of fashion in the meantime. Fashion is the right word, too. Last year’s default is this year’s thing everyone is migrating off, and the remains of it linger in the config like a coat left behind after a party.

The closest I’ve come to a rule is asking, before anything gets added, what hurts right now without it. I mean today, on an ordinary Tuesday, rather than in some imagined future with ten times the code. If I can’t point at the hurt, the tool waits in the hallway. Usually it waits there forever and nobody misses it.

Maybe the honest measure of a front end is how long it takes a stranger to change one word on one page. I suspect most of us would rather not know our number.

Reply by emailEngineering

Start typing to search the blog.