Thoughts on Improving Online Communities

Many months ago I picked up a fantastic book at a neighborhood flea market: “Community Building on the Web : Secret Strategies for Successful Online Communities” by Amy Jo Kim.

Flipping through, the screenshots of a very early and iVillage signalled that this title was dated, but the topic was right in my wheelhouse, so I picked it up.

Published in 2000, this book is 20 years old, but having spent some time with it, I can say that an astonishing amount of its advice and recommendations on community building are still applicable today. What struck me moreso was how many of it’s suggestions are not reflected in the current market. Let me share an example:

Think of all of the online communities you are a part of. When you joined, did you have to go through any welcoming/inroductory process, or were you just dropped right into the thick of it?

It’s an important point. In any real life community situation, you’re going to feel most comfortable joining and participating when you’ve been welcomed in and ‘shown the ropes’. Alternatively, if you were to be dropped into an environment that you had no context for and in which you did not know any other people, you’d probably feel a bit awkward or out of place. In a real life scenario, you’d probably be likely to leave and at worst, not become a contributor to that community.

Most online community platforms don’t allow/encourage an onboarding procedure, even though the stakes are much higher. When an online user is not able to sync their expectations with those of the community, their anonymity affords them the option to participate in ways that are inappropriate. I know there are online community managers that are aware of this, and I have seen processes along these lines take shape, but on a large scale, there is no standard of welcoming.

This made me think- if I were to create a community building platform in the present day, what features should it have?

  • Community builders should be able to create an onboarding flow that sets expectations for what is acceptable behavior. Onboarding for most companies is about getting someone to buy into a product/vision/service with their money or eyeballs. For communities, I think a good onboarding is not about extracting more from the user, but providing them with something of value that sets the stage for what is expected of community members. That could be a warm welcome or initiation of some kind, but I think it should be an experience, not a product or something of monetary value.
  • Community members that see innappropriate behavior from another user should be shown that reporting has positive impact. Sometimes a lack of action from the community management devalues the act of reporting and discourages its future use.
  • Keep the moderation process transparent with tools like: (1) a moderation blotter that documents moderations similar to how a police blotter documents crime (2) a warning at the time of content creation that lets the user know if the content is seen as inappropriate by any of the moderation algorithms being employed. This provides an opportunity to correct their mistakes, point out algorithmic mistakes, or (in the worst case) provide insight to how the algorithms are being fooled (3) Display a moderator precense through their positive contributions and moderation actions. Moderators should not exist solely to remove bad content, but to encourage positive content.
  • Highlight the best contributions and conversations to encourage more of their kind.
  • A high performing search engine that keeps content+conversations alive as long as it they are relevant, to discourage duplicate conversations.

I’ll add to the list as I think on this further…

Make Slack Smaller

Slack is awesome. It’s visually pleasing & my not-technically-savvy friends have no trouble using it. It’s nice (or not nice?) to have one app that would handle personal messages and work conversations.

But I’ve been working strictly on my 15” Macbook Pro, without additional screen real estate, and it’s clear that Slack takes up much more screen area than it needs to do it’s job.

I’ve blurred out the messages/channels for privacy, but I don’t see any reason why the sidebar should be non-collapsible. Certainly, a lot of enterprise clients have enough screen space (2+ monitors) to not have a worry about thus, but at this point, with so many users and success, Slack should have the bandwidth to make their applications responsive.

If I want my Slack window to be non-intrusive, I should be able to shrink it and see something like this:

With the introduction of iOS apps running on Apple Silicon, at the least we’ll be able to run the Slack iOS app, which is very close to what I’ve sketched out.

Constantly dismissing Reminders.

Last week I read a tweet that really hit me:

I am a heavy user of Apple Reminders. For a time I relied on the reminders in Clear , which I still use occasionally, but either way, everything I need be reminded of finds its way into my Reminders App.

It’s got a very low barrier to entry – I can quickly launch it on my Mac or my iPhone, and it’s the #1 thing I use Siri for (I don’t trust her for much else).

But I absolutely swipe away reminder notifications every single day, to the point that it’s natural. Reading this tweet made me realize it shouldn’t be that way. The way the app currently works, it doesn’t seem to care how you use it.

I use Reminders in at least two different ways.

  1. Critical reminders / Important Deadlines. For example, I need to move my car before a certain time or else I get a huge ticket (or towed) and it’s very important I take action on this reminder.
  2. Passive reminders / Todos. For example, I set a reminder for this afternoon to look into something specific in the codebase I’m currently working in. If I get to it tomorrow or Friday, it’s not a big deal.

It’d be really useful if I could tell Apple Reminders to treat each of these types differently, with respect to how to handle notifications.

Critical/Deadline reminders would be handled exactly like all reminders are handled today. They require some response: either completing or snoozing.

Passive/Todo reminders would be handled with the understanding that I’m most likely to get to them when I am available. Rather than notifying me on an individual basis, what if the app bundled together the 4 Passive reminders and every 2-3 hours on that day, pinged me, asking if I was “available”. If I’m not, I can snooze on everything passive. If I am, it presents me with the individual items, and I can deal with as many as I’d like.

If anyone knows of a reminders app that works this way, please reach out!

Making more space in a studio apartment.

One of my favorite things to do is rearrange my living space. You know the phrase “If it ain’t broke, don’t fix it”? Well, my room is always broken in some way, and I am in a constant state of fixing. There’s some misplaced item of furniture, something unorganized, or maybe over-organized, that makes my day to day more work than it needs to be. It’s not immediately clear what’s out of place, which is why most people never re-arrange furniture after they first bring it into their home. For better and worse, I am constantly observing and moving things about. Usually it’s not much more than cleaning my desk or moving the books from this shelf to that shelf or to the closet.

Yesterday, my partner and I re-arranged our entire studio apartment. What started out as an endeavor that “shouldn’t take any more than 20-30 minutes” took at least 5 hours. But the space looks so amazing I had to write about it. I want to compile some of my takeaways from this experience. And maybe this will help someone else who lives in a 400-500 SF studio.


Here’s layout of the room, from yesterday morning.

Some of the problems with this layout:

  • The projector sits on an upturned wooden box right next to my half of the bed. When it’s on, it blows hot air right at me. There’s very little surface area left for me to use as a night stand, meaning I use the arm of the couch as well. It looks very crammed between the bed and the couch.
  • The two chairs opposite the couch take up a lot of space in the room, but they mostly function as storage. One is the “plant chair” and the other ends up carrying things that need to be moved off the table when we eat dinner.
  • We can watch movies in the projector from in bed or sitting on the couch, and we find that option means we usually prefer to lay in bed. This encouraged us to lay down more than we should.
  • The closet door could not be shut, because there was not enough room between the bed and the wall for it to swing out.


Here’s what the room looks like now.

What’s improved?

  • The door can swing shut, which hides the hanging clothes, and provides more wall space.
  • The projector is a little further away from us when watching, so no uncomfortable hot air.
  • The desk can function as my nighstand
  • Because the plants against the window are lower and the chairs in the middle of the room have been moved, the entire window is visible, making the view from the couch more enjoyable.
  • Sitting on the couch, we are no longer in line of sight of our neighbor’s kitchen window.
  • There’s enough room on the dresser for a large mirror that’s been hiding in the closet. It makes the room seem brighter. It’s so big, and you’d expect it in a larger space. I think that makes this space seem larger too.
  • The tree serves to cover up the projector a bit. The bright green also contrasts with the white projector nicely.
  • There’s a comfortable amount of space on either side of the bed.
  • The floor lamp can dual function as a reading lamp and a desk lamp.

What’s lost?

  • The couch received a lot of sunlight where it was, and the leg of the L was a perfect spot for photosynthesizing. Now that the couch has been moved, it does not receive direct sunlight.
  • An extra chair is now stuffed in the closet.


Wall Visibility

The more covered your walls are, the smaller the space feels. I have a hunch the bottom of the wall is most important- being able to see the molding and where it meets the floor. When furniture is crammed together, you end up with less wall visibility. Certain furniture that’s open underneath (desks, tables) should be distributed around the room so that wall wall-meets-floor space is visible everywhere you turn.

Window Visibility

Similarly, don’t block any window space! Things can look good in front of windows (ie plants), but there’s an effect gained from having an entire window frame clear and free, like a picture frame. Even if the window itself is unblocked, make sure the line of sight to the window from important parts of the room is also unblocked.

Plant Cover

Somewhere in your room, especially if it’s a studio, there’s likely something that has to be there, even if it doesn’t look so great. A router, an extension cord, a projector, something like that. Use your plants to keep those items accessible but hidden from view! In our room, I’ve hidden most of the desk wires in the corner plant chair, and the projector is less of a focal point thanks to the tree beside it. In fact, the projector looks good now that it has a plant partner.

Oversized Piece

In a studio apartment, where space is limited, there’s not much space for anything big. That also, I think, makes anything big stand out. Use something big, like a picture, a painting, or in my case, a mirror, to draw your eyes and fool your eyes into thinking you’re in a much bigger room.

Comfortable Spacing

Leave some space between furniture! Anything pushed together will act like a single piece, so if it doesn’t match and serve or extend the same purpose, think again.

Balance of Use

We were spending nearly all of our time on one end of the room. The only exception was my desk, which wasn’t the only place I did my work. Moving the couch to the other side means we’ll be distributing our time in different areas, and it will probably feel bigger just because we’ll have different perspectives than we’re used to having.

This was a lot of fun and has truly made a huge difference in the enjoyment of our space. I encourage everyone to examine their interior layout more critically. There’s a lot you can accomplish with just some re-arranging!

Concept: Find trivia events in your area.

I enjoy playing trivia. It’s an opportunity to flex my competitive muscles, test my knowledge, and enjoy a night out. But finding out where you can play trivia is unnecessarily complicated. Bars and restaurants often do not list details about trivia nights on their website, nor on their social media profiles. They either rely on word of mouth, or they don’t care.

That trivia players, on a wild goose chase, exploring the deep caverns of bar websites left unchanged since 2006, searching through Yelp reviews, and reading out of date lists of trivia spots (only to find that most of the spots have shut down).

So here’s a concept for a website called Trivia Knight. I’m definitely most proud of the name and the color scheme! Here’s a few screenshots of a partially built frontend:

Likes and retweets of Donald Trump tweets.


  1. the number of retweets
  2. the number of replies
  3. and the number of favorites it has received.






#JointSession #MAGA🇺🇸\n
Big dinner with Governors tonight at White Hou...
Going to CPAC!

These are certainly not dividing or controversial statements.


I hereby demand a second investigation, after ...
We should start an immediate investigation int...
Venezuela should allow Leopoldo Lopez, a polit...
RT @Scavino45: LIVE Joint Statement by Preside...
Iran is playing with fire - they don't appreci...

These are clearly more aggressive messages.

A baseball hackathon In Chicago? Yes, please!






And then we forgot about it.

















Generating Drake Lyrics with a Markov Chain


import requests
import time
from bs4 import BeautifulSoup
import bs4
import time as t
import random

lyrics = []
links = []

songs = requests.get("")
parser = BeautifulSoup(songs.text, "html.parser")

    links.append("" + link)

for link in links:
    song = requests.get(link)
    parser = BeautifulSoup(song.text, "html.parser")
    if lines_dump is not None:
        lyrics.append( list(lines_dump.strings) )

def train_markov_chain(lyrics):
    transitions = {"<START>": [], 
                   "<END>": [],
                   "<N>": []}
    for lyric in lyrics:
        for lnum, line in enumerate(lyric):
            chopped = line.split()
            for wnum, word in enumerate(chopped):
                if word not in transitions:
                    transitions[word] = []
                if lnum == 0 and wnum == 0:
                elif wnum == 0:
                elif wnum == len(chopped) - 1:
    return transitions

chain = train_markov_chain(lyrics)

def generate_new_lyrics(chain):
    # a list for storing the generated words
    words = []
    # generate the first word

    done = False
    while done == False:
        if ondeck == "<END>":
            done = True
    # join the words together into a string with line breaks


Here’s one of the songs the script spit back out:

Drinking watch is this is in here 
... on camera 
I need more (More) 
Twenty five o four, need you 
Yeah, Tom Ford tuscan leather smelling like 
There ain't nothing 
I'mma do it... still fly though, 
I really have to the ceiling 
I give it start? The Tires Burnin 
I need it up in the morning 
Some Girls That I before I guess that's where you 
Somebody shoula told me. 
Tuck my whole city faded (the ride) 
My memories of baked ziti  
Let It Hurt Faces 
I see your friend 
No One Else 
Beat the past piss













  • your SSN
  • all of your money in the bank
  • every stock market in the world
  • top secret military documents
  • intellectual property from US businesses and individuals


My Twitter feed and me





