Year in Review

A review of the wanderings in 2021, and a focus for 2022.

Year in Review

The New Year is as good of a time to reboot something as any. To encourage more writing, I'll change this around. I'll talk more about the incomplete thoughts I have and what I'm up to. Those are easier to write.

Seeing that it's the New Year, I was reflecting on the things I worked on this year.

Things I built this past year:

At the beginning of 2021, I didn't know what I was going to do next. I spent this past year trying different things. Looking back, I seemed to have tried a bunch of things, more than I'd remembered.

Payment workflow builder

The first few weeks of 2021 was spent building a payment workflow builder. At Pulley, implementing employee option purchasing with ACH payments without holding the funds was a pain. Inspired by page builders, I tried a payment flow builder to direct the flow of money. While it did seem promising, when asking devs on reddit, most of them seem to have relatively simple flows for money. I never launched it.

You'd build a flow on the left and see it on the right.
Automation Cookbook

A longstanding problem I want solved are chainable background jobs–really an ETL pipeline for web apps, rather than for data science. I seem to keep running into this problem at most every job over the years. Workflow automation tools have an issue where people don't exactly know what to do with it. Hence, I wanted to collect user stories and use cases, so I started a newsletter called automationcookbook.io. I even interviewed someone on their process, but I ended boring myself to tears doing this. None of the use cases seemed particularly compelling. It felt like swimming in the long tail.

Gather Town Clone

I didn't really have a name for this project, but it's like Gather Town–like a Zoom meets Pokemon.

I was envisioning it'd be kinda like Zapier, where you can fetch alerts from twitter and post them into a chat room on Slack.

I originally came at this from a remote work meets visual programming perspective. You and your coworkers would walk around an environment (doesn't have to be an office) to talk to each other over video chat when close in proximity. But also you'd collaboratively build business workflow processes (that can actually get executed) together by connecting buildings (that fetch or transform data) with packages (containing data) that travel to and from the buildings.

I deployed this at a domain I already had handy: tetracasa.com. You can walk around, and if someone else is also there, you can video chat with them. However, there's no visual programming implemented, because I ran into conceptual issues. I recognized I had no strong opinion on who the user was, what they'd use it for, and the issue at hand. I just had an intution that there was something useful and intereseting here, but I couldn't articulate it.

The more I looked into other attempts at visual programming, the more I wasn't convinced connecting buildings together with traveling data packages would be manageable. In the game Factorio, it also has a similar model–factories connected by conveyor belts. The near un-manageability in Factorio is half the fun, but it seems like a weakness in a collaborative programming environment.

The other problem I wrestled with was the issue of embodiment. In a game-like 2D environment for programming, how do you represent abstract data structures and functions? I had little mainstream prior art I could really build upon, so it felt more like a research problem. At the time, I wanted to avoid doing research if I didn't have to.

I got lost in the weeds. and didn't have an angle of attack for some of these problems, so I decided to take a break and swing back to this later. But I took a long detour.

React Hooks for Data Pipelines

I fell into a rabbit hole learning about React Hooks and was surprised to learn it was inspired by Algebraic Effects. This post on Headless React showed it was possible to use the React Hooks API for 3D scene rendering.

Going back to the chainable background jobs, I never thought the API for most workflow automation/ETL software like Airflow of connecting nodes with edges was that robust. But a React Hooks offered a way to declaratively state a pipeline.

Just a taste of it. The full file is here.

As a sample workflow, I used it to pull down the interest rates of all markets on Compound, and recording it over time. It is for the most part pretty easy to use, and I think promising. However, it's easy to let an uninitialized state variable slip by and having that cause an error.

The full project is called Refract, for the lack of a better name. Of everything I worked on, this was the most satisfying because it came the closest to scratching my own long-standing itch. But more importantly, I started to see React in a different way–it's dragging mainstream developers halfway towards accepting effect managers as a norm. I'm starting to be able to articulate an opinion.

I have other features I'd want to add to this, one of which was data provenance. You should be able to rewind and look at any piece of data that you processed. I was stuck thinking about it and stepped away for a bit, and got sucked into the next three things.

NFT with crafting mechanics

Inspired by Loot Project, This was a side project meant to be 2 weeks, but it took the better part of a quarter. I had meant to jump back into crypto somehow, so this seemed like a good small project. Turns out it was lots of deadends and redesign to fit around the limits of Solidity and the Ethereum VM.

It's basically Cards Against Humanities mechanics, of combining blank cards with answer cards, but with shit that cryptonerds say.

Here's what it looks like to mint a pack of cards

And then crafting the black and white cards together will get you a rainbow card with the blank filled in. People can heart it with eth.

Was it worth it? I'd almost say no. The interesting parts of what might make this a compelling project to buyers had been stripped away to keep scope. Text manipulation is Solidity is a pain, and the limitations of a Solidity contract is annoying to work around. Given the amount of time this took, I should have ejected quickly like I did with the Payment Flow and the Automation Cookbook. I think I just wanted to finish something.

If I were to retro-justify it with anything, is that I learned how painful it was (again) to write smart contracts. Maybe this is something I should pay attention to, and do something about.

I haven't deployed this yet, but will in the coming weeks. It's hard to justify, because it'll cost me about $2500 to deploy this thing onto mainnet.

The Technium Podcast

I started a podcast with Sri in the last couple of months. As a result of some of the things I've talked about in the newsletter and our pandemic conversations, he suggested we just record our conversations.

It's a podcast about the (usually software) technologies Sri and I see on the horizon. It usually follows the arc of:

  • What is it?
  • What are people using it for today?
  • What would the world look like if it was pervasive?

We covered topics from The Metaverse and Datalog to CLIP/DALL-E and Zero Knowledge Proofs. We've already finished the first season, and we're starting up our second season with better production values–new mics!

Season 2 Eps 1 on End-User Programming

Overall, this has been good. First, it's been reflective. We don't often see ourselves on screen or hear our selves talk. But being forced to do it while editing in post, it's like looking in the mirror. I noticed my verbal ticks are putting "right?" at the end of sentences, with the occasional "like" thrown in. And sometimes, I start a sentence in the middle, only to abort to restart somewhere else. I can see it's because I had never had to articulate that particular thought before, and I'm putting together the sentence as I'm going.

Second, it's been an outlet. I've been excited about this kind of stuff for a long time and didn't really find someone to nerd out with out it until now. Even in Silicon Valley, people find it easy to be cynics or skeptics, so it's hard to see a potential future.

We'll continue to keep recording episodes as long as we amuse each other. Not sure where this will lead, but so far so good.

Impromptu Spices

Over the summer, I started selling a Beef Noodle Soup spice blend. I thought it was a dumb idea. But early ambition and ideas are fragile, and I've talked myself out of too many things. This time I figured I'd just do it and see what happens. A couple of you bought a bottle when it was announced on this newsletter (thanks!), but I needed validation from strangers if y'all were just being nice. Jess suggested I tell a Taiwanese Cooking facebook group about it.

"Professional" iPhone photo shoot.

The demand surprised me, and I ended up selling out twice, and scrambled to make more. I was featured on TaiwaneseAmerican.org in an interview about it in December. Last quarter, I sold over 300 bottles as well as a couple refill bags of the stuff.

This is the first time that I made something people want, however small. It definitely felt different, like people were pulling it out of me. I had just tripped over a latent demand. That said, I'm waiting to see how many return customers there are to see if this really is a thing.

I think there's a couple reasons for the latent demand. One, the product is pretty tasty. So that's a base line. But two, it has a compelling narrative for a specific group of people. I think Taiwanese Americans are so hungry for representative products that they're willing to pay shipping for it.

To me, this is new, since I've always got a sense for what can be possible, but I've always found it hard to craft a compelling narrative for others before I'm able to show them. It'll be something that I'll focus on more for other things I work on going forward.

In Review

At the beginning of 2021, I didn't know what I should be doing, but I did let go of the idea that I should be doing this or that. This past year was just exploring and trying things without talking myself out of it. That's lead to, of all things, a spice blend.

I had gotten better at ejecting out of unpromising projects or dead-ends, but it's still a skill that can be honed better. That has to be balanced with just doing things to see what happens, because there are always surprises when you do something.

While this year's exploration was helpful in getting unstuck, I feel like I haven't really accrued deep expertise in any one particular vertical. For 2022, I'm going to be more focused on something. Looking back, for the past couple of years, I find myself reading and learning about programming languages, Tools for Thinking previously hard-to-think-about thoughts, and human-computer augmentation with any chance I get–regardless of what I'm actually working on. And in my work, I've always thought a lot about the affordance of my code for other developers, to the point of being derided as too clean.

And yet, I've been denying myself from going deep into this topic because it didn't fit the narrative I wanted for myself. It wasn't something my peers seemed to value. I've killed projects working on these things because, I didn't think it'd have a market. I've not joined things because I was so focused on something else. I really just didn't know how to make this something sustainable. So this year, I'm also letting that go, but this means it points me in a direction that I don't really have a name for.

Will I be any good at this? Do I actually have an original line of thought, an angle of attack, to contribute to the state of programming and thinking tools? I can see that behind the Gather Town clone and Refract is a viewpoint on programming, but it was vague and not well articulated. In retrospect, that has to come from writing to clarify my thoughts to more clearly communicate the currently scattered and faceted intuition I have on the topic.

So the near-term plan is to do two things. One, write to articulate the problems in the space. Two, learn how to write interpreters.

Hope you have a plan for your 2022, and that you have lots to look forward to!


Photo by Max Vakhtbovych from Pexels