Micro Matt

Micro thoughts and mini posts.

Nothing exists in a vacuum, and specialization is a great way to stay ignorant to the way everything interconnects.

Relatedly, I discovered a funny counterintuitive thing in college, going for my degree in Computer Science.

I was very uninterested for the first year or two of school. I'd already been programming for years by then. I'd been paid as a developer. I spent more time with friends. My grades quickly slipped. I failed a class or two. I wasn't learning anything new or putting in the work.

Many things contributed, but I started truly turning things around after taking an American Literature class and, for the first time ever, doing the assigned reading.

I fell in love with reading.

I started going to the library, walking through random aisles picking interesting-looking books off the shelf as a pastime.

I started and never finished 100 books. I'd start reading in the middle of a book, or on a page that simply caught my eye.

Somehow I always found insight from small, random passages in those pages — whether it was a book on mythology, or filmmaking, or some composer, or “weblogging,” or outer space.

It wasn't really insight into my field; just a better “sense” of things.

Soon, that actually bled into the work I was supposed to be doing.

Without trying or even realizing, I started hearing what I was supposed to in my classes. Everything was suddenly relevant — or at least, info was easier to sift through to find what mattered most.

I started getting interested. I started getting better grades. I started practices I still carry today, like taking notes to reinforce what I'm hearing in the moment (even if I never look at them again).

I got comfortable with having “unproductive” interests, and “wasting time” when there's allegedly something more important to do. It's counterintuitive, but I know now that these always feed back into the whole.

Of course, I've suffered similar periods of disinterest in the professional world. I wither slowly when I'm forced into a specialized role.

In many aspects, me starting a business has been for no other reason than to allow myself to be a generalist.

(Originally from my Twitter thread.)

I think my problem with most #marketing is that it’s very top-down, robotic and premeditated, detached and contrived. Thinking about growing my business again, I’m realizing how much I absolutely need any kind of “strategy” we use to be organic for me to feel good about it — scattering seeds instead of manufacturing a forest; forming mutually beneficial connections instead of forcing a product into people’s lives; letting things grow when people take to it, and die when they don’t.

Working on something else today; but some quick thoughts on Remark.as this morning:

Some validation: Earlier this week, heard from yet another person that they’d like to use this, if possible. We’re a good way’s off from integrating with other sites, but it’s good to know this will be so useful.

UI ideas: In some sketches over the weekend, I came up with essentially a chat interface. Blogs you follow show up in your “buddy list,” and their posts in particular are the “chat rooms.” Each post is the topic of conversation; you can reply with a short message or a blog post — the latter would then take you to another discussion room. Replies via ActivityPub would show up in-line. It’s interesting, but I’m not sure how technically feasible yet. There’s a lot to still think about.

Social club: This will basically be the “social network” of the suite (if we have to call it that). Thinking about reducing spam and abuse in the early days, I’m imagining we leverage our paywall, since that’s worked well for reducing junk on Read Write.as. But I’m imagining an additional twist: if you’ve ever paid for Write.as Pro, or our old Casual plan, or bought an add-on, you’ll be able to socialize on Remark.as. And if you haven’t bought anything but you want to join, maybe you’d pay a cheap one-time “membership” fee. The goal would be to stay widely accessible — I’m not trying to make this an exclusive club — but filter out drive-by trolls and spammers.

The business: I’m trying to distill down the “point” of our business at this point, from the user’s perspective. I’m thinking less in terms of “creative tools” now and more “starting a discussion.” Because even when we write something without the chance for someone to comment, are we not starting a conversation? Even if it’s just in the reader’s mind. It seems that if we’re publishing on the internet, it’s to reach someone else — no matter who that is, or if we even get a response. The change in framing is interesting and eye-opening.

Support for #categories is deployed. This should give us a chance to make sure it works in the wild — but everything seems to be running smoothly so far.

One tricky thing: do we track which #categories are included in the post itself vs. in pure metadata?

Assuming all are inline, things are simple: on publish or update, we always parse hashtags in the body. If a tag isn’t there, we delete its association with the post. If it is there, we associate it with the post.

If we also want to have pure-metadata categories, so we don’t have to clutter up a post with visible hashtags, then we need to track which categories are inline vs. metadata-only, so we know which ones to remove on update and which ones to keep. (And now this is getting complicated.)

It’s mostly getting complicated in the UI. Assuming the editor now has a “categories” field, we’ll need to keep it in sync between inline / editor hashtags and metadata-only tags. I mean, it’s unlikely someone would use both; I don’t want to cater to that edge case, but I also don’t want to exclude it if we don’t have to.

We might also follow the pattern we’ve laid out with other add-on post metadata, like #authors. Right now, you can add an author in the Rich Text (RT) editor, but not the Plain Text (PT) editor. In this way, we keep our underlying flexibility, but the client / editing UI guides users toward the correct input method. I think we can assume that the PT editor is for focused writing and inline metadata; the RT editor is for exact control over presentation and metadata. I’m not sure if that’s entirely correct, but I think I have to start there.


Continuing yesterday’s work, internal support for #categories is finished. The result is basically a lightweight layer on top of the existing hashtag-based system.

Now whenever you create or modify a post, or move it to a blog, we’ll parse out the hashtags and automatically create categories from them, as necessary. Categories store original information about hashtags, plus a user-friendly title (which can include spaces, punctuation, capitalization you want, etc.) and a URL-friendly slug. (You can see some of the underlying code here.)

In this way, they’re completely optional and unobtrusive by default. If you care to carefully manage your categories, with this new system, you’ll be able to do it. If you just want to tag a post occasionally, this won’t slow you down. And if your needs change as you write more posts, this will be there when you decide to organize things.

I still have more testing to do before deploying this change, and even then, users won’t notice anything new yet. But the groundwork will be there for us to tackle the management side next.


Working on support for categories today. There are a few functional goals we’re trying to solve with this:

  • We can list all categories used on a blog
  • We can quickly filter all posts under a certain category
  • We can create tags with specific capitalization, Unicode characters, and spaces in the name
  • We can associate posts with certain categories via existing plain text tagging system

The last point in particular is pretty tricky to solve; all other points are solved easily by adding some new data structures. I’m thinking we’ll just store three pieces of data for each category: a slug (e.g. united-states), a title (e.g. United States), and a normalized “lookup slug” that can be represented by a hashtag (e.g. unitedstates).

Then we’ll do some magic on the backend when creating or updating a post that parses the post and creates a new category automatically and / or associates the post with an existing category. That will allow existing posts to use this new categorization system. Then we might also support a new “silent” way of adding categories via a new API field, so you can associate a post with a category without inserting it into the body of the post.

Just some implementation ideas so far; we’ll see if this works in practice.

#dev #categories

Woke up to sub-70° air outside and I instantly feel better, like I can relax and finally breathe again. Endless summers have done nothing good for my mind. For some reason I crave a long winter, gray skies and cold.

After a chat this morning with the writer behind Minimalist EdTech, and now reading Jake LaCaze’s most recent post — hearing Chuck Palahnuik’s “writing vs. typing” distinction he to linked from that post — I’m struck by a clear new principle for the software I build:

The tool is subservient to the voice it carries.

I think it’s easy for tech folks to get carried away building and adding and expanding their digital creations until it’s everything to everyone. We get fascinated more by the workings of the machine than the people working it. We force our specific way of working on the people that use our tools. We focus on how our little widget will revolutionize whatever it’s revolutionizing, and along the way lose the point of why we even need it to begin with.

This new principle is suddenly so clear to me now. The tech is so trivial and insignificant compared to whatever human thing it enables. We spend so much time thinking about the technical side while neglecting what our tool actually does for people. The product only needs to do what it set out to do. The code only needs to be elegant enough to be maintained — anything beyond that is pure onanism.

People will always find a way to write, learn, and socialize, with or without the latest technology. As builders of this digital world, we need to wave away any grander illusions than that. If we want to build things that actually improve the world instead of creating more pointless problems, we need to remember that it isn’t about the tool, but the people that use it.

#tools #humanity #tech

One cool thing about our platform today is that I’m finally getting to benefit from code and component reuse. In just a couple hours, I can create an entirely new service backed by Write.as, with user authentication, billing, data sharing, and a standard API design.

As I add Remark.as, Draft.as, and today’s new (yet to be announced) service, I only have to follow a set of patterns and interfaces I’ve already built to hook into user authentication and create the web UI — altogether it only takes about 15 minutes to do. Then I’m on to building the actual functionality of the new service.

There’s something about the strange loop of “building tools that help you build tools” that is very, very satisfying.

Enter your email to subscribe to updates.