How to Be Happy

Growing up, my mom used to tell my siblings and I that when we were upset and didn’t want to be, we could choose to be happy instead. The whole concept seemed ridiculous to me. “I can’t just flip my emotions on and off like a light switch,” I remember telling her.

But the problem was, she was right. It’s entirely possible to “flip your emotions on and off like a light switch”. There’s a lot of research backing up that statement—not surprising, my mom graduated with a Master’s in psychology, I should have known she didn’t pull this idea out of nowhere. Further, though it took me longer than I would care to admit, I did personally realize the wisdom in her two-word advice, “choose happy”.

Many experiments show that if you smile, you’ll feel happier. It’s not even entirely about the conscious decision to feel happy – merely moving your facial muscles or even forcing a smile using chopsticks can do the trick. Your brain just has an association between smiles and happiness and so smiling can make you happy.

So the research says. But I doubted it. For years, until I realized the truth of it independently. Today, I’m going to dissect the reasons I doubted it, because I feel many people probably have the same doubts when reading articles like this one.

I had two reasons to doubt “choose happy”. The first was that I was afraid people would look at me weird if I went from crying to laughing in the span of less than two minutes. The unaltered procession of human emotions is a slow ebb and flow, and a drastic change would make people ask uncomfortable questions.

They probably would have done that. But I wish someone had told me that there are things much more important in life than seeming strange. Spending a majority of my time feeling depressed and anxious for no reason was dramatically worse than it would have been to have some people think I was odd. I should have weighed the pros and cons of feeling the emotion versus letting it go.

The second reason I doubted the wisdom of “choose happy” was that I thought all emotions were important. I thought that they were always there for a reason, even if I couldn’t find what that reason was. It was a gradual realization that led me to the simple fact that some emotions don’t make sense – they’re the result of hormonal imbalances, meaningless stressors, mental overstimulation, and many other things which don’t need to be dwelled on.

Nowadays, I think about emotions in the context of net utility. Is feeling this emotion useful to me? If I’m feeling embarrassed about a stupid mistake, that feeling can be useful, to prompt me to fix the mistake immediately. But after I’ve done everything I can to fix the mistake, including making the appropriate social reparations, I can let the emotion go, because it’s served its purpose. Continuing to feel embarrassed even when I can no longer do anything about the mistake, including learn from it, is pointless.

And if the emotion didn’t have any purpose to begin with – say, if I’m feeling angry because I’ve had a long difficult day at work, which is not even slightly connected to any particular problem that can be solved – I can analyze the cause, decide it’s pointless, and let go of the emotion.

How do you let go of emotions? After your brain stops intuitively holding on because it thinks they’re important, or that it would be weird to let go, it’s typically as simple as focusing on something else. If just passively thinking about something else doesn’t completely fix it, try smiling, putting on a fun or silly song, deliberately focusing on happy thoughts, or even closing your eyes and imagining a pleasant location to hang out for a while. (I’m deliberately giving advice that doesn’t require getting up, because I personally don’t like advice that says “get up! stretch! jog! sweat!” – it does genuinely work, but it’s always delivered in a very pushy way. That being said, if you haven’t already heard this advice from a hundred thousand people, being outside and/or exercising does in fact make you healthier and happier, so try it if you feel inclined.)

So the list of question to ask when you feel any emotion is:

  1. What emotion is it? Is that really what I’m feeling? Emotions are frequently very transparent, but they can become tangled. Further, some emotions can mask others: a lot of men have a tendency to express anger when they’re truly sad, for example. If your emotions are unclear, sort them out.
  2. What probably caused this emotion? Go over salient events in your mind and find the proximate cause. It doesn’t have to be anything major and it frequently isn’t. You’re looking for a cause, not a good reason.
  3. Does this emotion have net positive utility? Feeling negative emotions has inherent negative utility, but that may be outweighed by the positive utility of the action it makes you take: learning from a mistake, apologizing for a misdeed, fixing an internal or external problem, etc. Figure out if the emotion is prompting you to do anything useful, and if it isn’t, if you really need to keep it. Compute the net utility.
  4. An important note about these utility evaluations: A common trap I’ve seen many people fall into is where they keep a negative emotion around because they believe it prompts them to do something good which, in fact, they would do anyway. In particular, a lot of high-achievers end up with the misconception that being miserable is what prompts them to achieve things, when in fact, they would achieve more if they were happier. Therefore, strongly doubt any utility evaluation that leads you to the belief that you need to be miserable all the time in order to get things done.
  5. If you determined that the emotion has net positive utility, keep it around, but only as long as it continues to be useful. As soon as you’ve done everything useful that the emotion was prompting you to do, throw it away. There is no reason to be miserable longer than necessary.
  6. If you determined that the emotion has net negative utility, toss it immediately, using any of the tricks described above.

A final note about the utility of positive emotions: feeling good is a good thing. I’ve seen people be happy but wonder whether they really should be feeling happy. You can dissect the emotion and what actions it makes you take to figure this out, but don’t decide you need to be unhappy because it’s uncommon to see sane adults who visibly care about anything. Emotions are good to keep if they’re useful, and being happy uniformly makes your life better, so ceteris paribus, happiness is useful, and therefore, happiness is almost always good to keep.

In conclusion:
Choose Happy.

Algorithm Design for Minimization of Time Complexity

This project requires a bit of background, for those who aren’t familiar with Google Ads. (For those who are, please skip down to the horizontal bar.)

When you search for something, some ads may show up at the top of the results page. Those ads were paid for by companies who had decided those ads were bringing in enough profit to be worth it.

Think about it in terms of four steps. 1, the company decides which keywords they want to bid on, and how much to bid on them. 2, the ads show up to users, and some percentage click through. 3, of those who click, some percentage actually convert (conversion defined however you decide – they may download a white paper, buy a product, or sign up for your email newsletter). 4, the company measures all aspects of this funnel and adjusts their keyword bids and/or ads accordingly.

This particular project involves automation of a specific portion of step 2. To try to maximize their ads’ conversion rates, marketers only want to serve their ads to people who have the highest chance of clicking, and ultimately, converting. A very important tool in the marketer’s arsenal for this goal is the negative.

Negatives, short for negative keywords, are keywords that tell the search engine that they should not display your ad if that keyword is part of the search query. For a quick example of why you might want to do this, consider that you’re running a bakery and you have two ads, one for cake recipes and one for carrot cake recipes. Now, obviously, you want only the cake recipe to show up when someone searches “cake recipe” or something similar, not when they search “carrot cake recipe” – you have a separate ad for that for a reason! So what you can do is make the word “carrot” a negative for your cake recipe ad.

This concept of negatives is useful for any circumstance where you don’t want your ad to show up – including because the keyword has a low conversion rate. And this is what this project is about.


This project involves taking a list of search terms and finding individual words which are always associated with a lack of conversions over an extended period of time and bringing them to the attention of the marketers running the ad campaigns so they can negative them. Therefore, it involves taking a table with a column of strings and a column of ints and isolating individual words (separated by spaces) which are associated with, and only with, int values of 0.

I considered a wide variety of possible algorithms in the course of working on this problem but ultimately wanted to find something which had a minimal time complexity and could run moderately quickly over tens of thousands of data points (six months or more worth of keywords and conversions).

I wanted to make sure I was looping through the dataset as few times as possible, so I would make sure to fetch the data, only store what I would absolutely need, and store it in a separate array so I didn’t have to deal with the hassle of deleting elements and having the machine shift everything else back, since I was liable to do a lot of deletions.

I will admit that this problem took me a long while to crack. I had too hard a time visualizing a massive dataset with so many different terms to think about doing any logically complicated data manipulations to it. So my first step was to simplify it to a little table, like this:

Strings | Ints
"a x" | 0
"a y" | 1
"b x" | 0
"b y" | 1

Abstracting away everything but the bare bones of the problem helped me finally realize what I succinctly described at the beginning of this essay, that I wanted to find all the elements with, and only with, an int (# of conversions) value of 0.

Once I removed that block, the ideas started pouring out. I went through about twenty different possibilities before settling on this basic concept:

  1. Fetch the data from an Excel spreadsheet to a Pandas DataFrame.
  2. Loop through the DataFrame, splicing each individual search term and splitting it into component words.
  3. Add each word associated with the number of conversions of the search term it’s a part of into another array, in alphabetical order.
  4. For each word in the resulting array, while the word is equal to the one in the next row after it, check if all conversion values are equivalent to each other and to 0.
  5. If they are, add the word to the final array; as soon as they’re not, skip to the next word and run that through step 4.

Now what’s left is to actually implement that. *exaggerated sigh*


What did you think of this post and this algorithm? Is it a good idea? Did I screw something up colossally? Please let me know in the comments below!

If You Want to Be a Digital Marketer, Learn Web Development

I ended up in marketing nearly by accident. My plan was always to be a developer—it still is—but I knew I eventually wanted to start a company, and I so I knew that I would at some point need to learn a bunch of other stuff in addition to pure programming: sales, marketing, economics, accounting, business law. So when I was offered a marketing job, despite a work history full of building websites by hand and utterly lacking in anything even containing the letters “SEO”, I took it.

This gave me an interesting background for a marketer, where though I was extremely junior, I understood all the technical jargon that made my coworkers flinch. And looking back, I think my technical background was a boon to me; so much so that I recommend taking at least one beginner web development class to anyone who wants to be a digital marketer.

Why Learn Web Dev?

Knowing web development is so useful for digital marketing because the two are hopelessly intertwined. For example, take the two most important pieces of metadata for SEOs: the meta title and description tags. Knowing where they are in the code, how they show up on the SERP, and how Google indexes them is extremely helpful to use them effectively for on-page SEO. Take another example: it’s all well and good to know by rote that appropriately sized images will make your page load faster, but if you understand the reason—that CSS takes a moment to resize the image, and if you give it an appropriately-sized image, it can prepare it faster—you’ll know exactly how to fix the problem. In general, being able to read the code when you “view source” on a webpage, along with knowing the general architecture of the internet, will help you immensely.

If you’re currently working in marketing or you’re planning to start soon, you may be thinking, “okay, in theory that sounds nice, but I’m already working so hard on marketing itself, and I don’t have time to learn to code – isn’t it super time-consuming and hard?” Fortunately for you, the answer is no, it’s not harder than any other marketing skill – if you have the right resource. And I have the right resource for you right here: HTML, CSS, and JavaScript Web Publishing by Colburn, Kyrnin, and Lemay. This book taught me a majority of what I know about HTML and CSS, which says at least something given my portfolio. It has one oddity: it doesn’t tell you how to actually host your site on the web until chapter 24. You’ll want to read that chapter very early on – probably either right before or right after chapter 1. Getting used to pushing your changes live with FTP is both easy (you can teach it to a 7-year-old) and important. Besides that little quirk, this is one of the best resources I have ever found for HTML/CSS/JS, and definitely the most useful for beginners. It even has a nice section on SEO at the end!

Learn to Use Chrome’s Developer Tools

Besides building your own websites, there is a techie tool that’s also helpful if you’re going into digital marketing: Google Chrome’s Developer Tools (or “DevTools”).

You can access the Developer Tools by clicking the three dots in the top right-hand corner of the Chrome browser, then selecting “More Tools” about 3/4 of the way down the menu, then selecting “Developer Tools” from the bottom of the next menu. The developer tools are a window that pops out from the right-hand side of the screen, and they’ll let you do all sorts of awesome stuff, including seeing in real time in a real browser what would happen if you made certain edits, without ever changing the real source code. You can do this with not only your own website, but with other peoples’ sites, even those which are way more complicated than yours. Here’s a nice tutorial to get you started with Google DevTools.

These tools are very useful for the beginner web developer or digital marketer because they’ll let you toy around with massive, complex sites without having to build those sites from the ground up yourself. I tend to just open the DevTools on random websites and play around with making changes to see what they do. It’s not a systematic process, but it’ll improve your web development skills, and it’ll also be fun. Who said work couldn’t also be play?


Do you agree that digital marketers should learn to code? Do you have more useful tools for beginner web devs (those who are or aren’t marketers by trade)? Let me know in the comments!

Thoughts from Planet Earth

Sometimes I look at the sky and I think, how high can I jump? Like, half a foot or so. And then I think, how high can I get in an airplane? That’s the kind of delta that human ingenuity gives us. And it’s not even the limit: how high can you get in a rocket ship?

But even so, the stars that I’m looking at are so much further away. If Earth was a word, the nearest star is ten times every word you’ll ever say in your life. And yet, we humans went from the half a foot we can jump to the upper stratosphere, where the tallest mountains are vague outlines of purple and white.

It took a lot of work. Not with our muscles, which can only get us about five feet up if we train relentlessly for years, but with our brains. Thousands of ordinary human brains, no smarter or greater than you or I, made the airplanes and the rocket ships. In fact, human brains did a whole lot more than that. They created the entire modern world.

I wake up in the morning to an alarm app that comes installed on my smartphone, which gets its data from a clock which runs on humanity’s collective knowledge of quantum physics and syncs with all the other phones via a network which runs on humanity’s collective knowledge of binary logic. I get dressed in clothes that came directly from somebody I’ve never met who donated them to a Goodwill on the opposite side of a continent from my current residence, and that person got them from a store which got them from a country I’ve never been to. I take a train to work which moves through a huge tunnel under the ocean at upwards of ten times the speed I can run. Humans made all of this! Some of it is pretty suboptimal—the fact that I have to get up at 6am certainly comes to mind—but you can’t deny that it’s incredibly cool.

If thousands of ordinary human minds were able to make all these things, I think that with a few thousand more, we’ll be able to make it all the way to those stars and to the planets that might orbit them.

What might we find there, on those distant worlds? Maybe nothing more than we minimally expect. Some interesting places, both habitable and hostile, to which we can add the beauty that comes with perception by intelligent life. And this isn’t a loss! Improving the diversity and span of human experience across the galaxy is one of the best futures I can imagine for us.

But maybe, just maybe, we might find someone else out there. Not humans in funny suits, like in sci-fi movies, but things which are more different from us than we are from petunias—because we and petunias both evolved on Earth, though our evolutionary branches separated aeons ago. Sentient things made of complex configurations of silicon, crystal, liquid, metal, or things even stranger. Sentient things which are further from humans than anything we know, but that we can still call people, because though they may not have human thoughts, emotions, or biases, they have goals and they don’t want to die and this is all we really need.

Think how similar we are to each other, compared to the others we might find out there. All humans look the same—bipedal ape-like things made of flesh and built from DNA. We think the same—simple animals which evolved higher thought, planning, and consciousness by a constant competition with one another which produced predictable patterns and errors in reasoning. We act the same—pack animals inclined to organize into social groups and gatherings who are practically mandated by our development process to use syntactic combinatorial language along with specific nonverbal gestures and facial expressions to communicate. We feel the same—emotional creatures motivated primarily by fear and secondarily by joy, sadness, anger, and love. We’re as alike as peas from the same pod.

And maybe this is the part of my mind that grew up on Star Trek talking, but it doesn’t make any sense, if we could find and cooperate with these others—and I think we would, judging from how badly we want to not be alone in the universe—that we would still have such silly things as the various -isms and -phobias which are manifestations of inter-human hate and insecurity. How could we hate a fellow language-using, emotion-feeling, hairless ape built by DNA, when we could get along with electrically-charged systems of fractal crystals and gaseous blobs of pulsating color?

If our distant ancestors could gradually build our modern world and our distant descendants could get along with these impossibly different aliens, how could it make sense for me—operating in a flawed modern world but made of the same stuff that made up the humans before me and will make up those after—to hate another human?

These are the things I think of, looking up into the sky at night.

Thoughts on the Basics of Go

Disclaimer: I’ve been studying Go for two days. There are some neat things I learned about it, so I decided to document them, but if anything in this post is factually inaccurate, please let me know so I can correct it. Thanks!


Go is an object-oriented, statically-typed programming language created by Google in 2007, which makes it the only language I know that’s younger than me. (Python and JavaScript aren’t as young as you think they are, they were both created in the mid-90s. Yeah, I was surprised too.) Go seems to me like a weird lovechild of Java and JavaScript, but then again, I have heard it’s more like C, I just didn’t make that connection because I don’t know C.

That being said, if you already know both Java (or some other statically-typed OO language like C) and JavaScript (or some other dynamically-typed language like Python) most of the basics of Go aren’t going to seem odd to you. Go is statically typed, but it’s much smarter than Java in terms of inferring variable types, so the actual top-level programming feels somewhat like JavaScript or Python.

For some examples: Go has a main method that works just like Java, and one variable initialization style, var x int = 10, looks Java-esque. However, the idiomatic style for initializing variables looks somewhat like JavaScript: x := 10, since there’s no explicit type declaration. Overall, in Go, you type way less characters than you do in any other language I’ve used before. Look at the idiomatic initialization above. Or look at how you get a character from an array: arr[2], unlike Java, arr.charAt(2). The + operator is also overloaded to both addition and concatenation, like JavaScript, unlike the Java string.concat() method.

Now for the weird stuff that’s not like any other language I know – though it might be like some other language.

Go only has one loop, which happens to use the for keyword. Using different syntax patterns, it can operate like a for loop, a for-each loop, and a while loop, just to name a few. There’s also a range loop for k := range arr, and if another language I know uses them it’s definitely esoteric.

Go also does a weird thing with arrays. There are three standard types of array-like things: arrays, slices, and maps. Arrays pretty much work like Java: they have a set type and size and can’t be expanded. To fix the “arrays can’t be expanded but I wannaaaaa” problem, instead of going the Java route and making an array-style expandable object type which everyone then uses instead of standard arrays (ArrayList), Go has “slices”. These are segments of arrays which can be expanded when new elements are appended, until the length of the slice exceeds the length of the array, at which point the contents of the array are copied to a new array which is big enough to hold the appended elements. …I think. Maps are, fortunately, simpler. They’re sets of key-value pairs, where the keys and values can be of any single type. So you can map strings to ints, ints to ints, strings to strings, etc.

There are two things about Go which I find neither good nor bad, just very interesting. The first thing is that, among the variously-sized numeric types, there exist numeric types for complex numbers. This sparked a sudden desire in my mind to do something involving quantum physics with Go, although I have absolutely no idea what about quantum physics I would want to write a computer program for. The second thing is that Go does a lot of stuff in the Terminal, which makes me wonder how one goes about writing desktop applications in the language. (According to this article, it’s difficult.) I’m not a huge fan of web development stuff in general, and it’d be kind of annoying to have to make all my advanced Go projects web-based.

Besides slices, nothing about Go seems too awful or counterintuitive, so I’m optimistic about my future studies. As soon as I’ve got something a bit more complicated than Hello World, I’ll post projects and write-ups here. Please look forward to it!

How to Write an Article for a Client’s Blog

One avenue of digital marketing that is simultaneously time-consuming and rewarding is writing optimized articles for your clients’ blogs. This is time-consuming not just because writing polished articles takes a while, but because doing it correctly requires significant background knowledge of your client’s industry. Still, there isn’t much that will benefit your clients’ organic search rankings more than well-optimized, relevant, regularly posted blog content.

Do Background Research

In order to get started with this process, you’ll need a significant background of knowledge. What does your client do? What is the problem they solve? How do they solve it differently than their competitors (both those they would name in response to the question “who are your main competitors” and also those who rank higher than they do for their core keywords; otherwise called “named” and “organic” competitors)? Who are their customers? How do those customers use their product or service? What is the jargon in their industry? You’re writing these posts on behalf of your client, so you had better be, if not an expert, at least very knowledgeable about their product, customers, and industry.

Once you have this information and have decided what keywords it would be best for them to rank for, you can do a content gap analysis to see what kinds of topics your client doesn’t have articles or blog posts on that their named and organic competitors do. There are a handful of tools which can do this; my favorite is Ahrefs.

If you work for a marketing agency, you probably already have both of the above pieces of information on file.

Pick a Title

Once you have all the background info, the first step in content writing is to pick a title, topic, and format. These can and should go together: if the title doesn’t clearly tell your readers what the topic and format are, then it’s not that good a title. Reading the title “Top 10 Tips for Painting with Oils”, I expect a bulleted list, possibly with pictures. Reading the title “How to Write an Article for a Client’s Blog”, I expect a medium- to long-form article, or possibly a video, telling me how to write articles for clients’ blogs. By contrast, “Introduction to Programming in Python” is a subpar title because I have absolutely no idea what kind of content I’m getting. That could just as easily be a podcast, an article, a video, or even a book.

Since you can convey all three important aspects of the content with a well-written title, this is what you should present to your client. Once they’ve approved it, you can move on to the next step: running a Clearscope report.

Run a Clearscope Report

Clearscope is perhaps the single most important tool for optimized content writing that there is out there. Given a keyword, it will search that and related terms and scan all the top results for those terms for the most commonly-used keywords and other phrases, then output these results into a report. In the Clearscope report, you’ll find specifics on what competitor articles they found, what rough level of complexity those results have (in terms of a elementary-college grading system), how long the results’ content is in terms of word count, and what keywords they found were most relevant to the one you started with.

But the most important thing that the Clearscope report will give you is a nifty editor, similar to that in a CMS like WordPress, with a list of keywords and phrases on the right-hand side.

You will be using this editor, along with your previous keyword research, to write your content. Clearscope, while useful, is not a substitute for thorough keyword research. Without keyword research, not only do you not know which report to run, you’ll likely miss out on all sorts of great keywords if you use it by itself. All Clearscope gives you is a list of phrases—not keywords, just phrases—that are common in organically competing content. That’s it. So, keep your keyword list on hand next to the Clearscope editor while you write.

Write Awesome Content

At this point, you’ve taken all the measures you need. You know what kind of content your audience probably expects given their query, you know what pages are already ranking for that keyword, and you know how to make up the difference. Now, it’s time to write what Moz calls 10x content: content that’s 10 times better than anything out there right now.

As you write, you’ll notice that Clearscope is politely highlighting relevant phrases you’re including from its list, as well as giving you an updating word count, readability level, and “content grade”. The content grade is based on how many of Clearscope’s relevant phrases you’re using. Its suggested minimum of B- is a bit low for my tastes—I tend to go for A- at a minimum, with most of my content at either A+ or A++— but you should never optimize your Clearscope content grade at the expense of your user experience. After all, your customers will never see the former, but most (if not all) of their knowledge of your company comes from the latter.

Publish It

Now that you have your 10x content with a nice high Clearscope content grade, you’re ready to publish! Before you do, though, make sure you’ve got three pieces of meta nicely optimized: title, description, and URL slug.

The meta title is shown in the browser tab and as the clickable link on the SERP (Search Engine Results Page, the “ten blue links”). Your CMS will probably auto-generate one for you (frequently in the form [h1 title][separator such as – or |][blog name], but that need not be the one you use. For an example, see Split’s homepage: the h1 tag contains the phrase “Split powers your product decisions with a unified solution for feature flagging and experimentation.” But the meta title tag is “Split: Continuous Delivery, Feature Flags & Experimentation”.

You only have about 50-65 characters to work with in your title tag before search engines will cut it off with an ellipsis, so you only have room for the page’s core keyword in your title, assuming you’re also including your brand name (which you should). Think of your title tag like a billboard, designed to attract your prospect’s attention in a concise, intriguing way.

The meta description is shown as the blurb of text below the link on the SERP. (At least, when search engines decide to put it there. Sometimes, in order to answer the user’s query better, they’ll take a section from the page’s body text and use that in place of the meta description.) This is useful as an additional, slightly longer pitch to your users. Some SEO tools will tell you to keep it under 160 characters, but a lot of the time search engines will index up to 320, and unlike the title tag, where an ellipsis can be annoying, an interesting meta description cut off with an ellipsis can increase suspense.

The URL slug is the part of the URL that signifies the specific page: https://www.example.com/articles/this-part-is-the-url-slug/. It should be descriptive: a good rule of thumb is that a human should be able to look at the URL and know what the page is about. Many CMSs will auto-generate a slug for you based on your h1, but like the meta title, you need not use this. For example, this incredibly interesting article has the h1 title “The Dark World of Affiliate Marketing, Black Hat SEO, and…Mattresses?” but the URL slug is /the-world-of-affiliate-marketing-black-hat-seo/.

You’ll want all three of these elements—title, meta description, and URL slug, in that order of importance—to contain keywords. But your primary goal with all three is still to provide the most relevant, interesting, and useful search experience to your prospects and customers. Your end goal is sales, not search engine rankings alone.

And Then You’re Done!

You’ve got excellent content containing keywords and phrases your organic competitors are ranking for, and all your meta info is optimized for both users and search engines. That’s it!

De Formae

Latin: With Regards to the Subject of Beauty

How many beautiful things just evaporate into the wind?

One day on my way home from work, I descended the elevator onto the train platform, listening to music. I forget which song I was listening to, but whatever it was, it definitively clashed with the noise of the station. It was not ordinary station noise—footsteps, chatter, rustling of paper maps and bags. As soon as I placed the sound, I quickly removed my headphones and stuffed them into my bag.

There was a man playing a beautiful, haunting, nostalgic melody on an electric keyboard. He had a sign up next to him, a whiteboard on a stand. “I hope everyone is having a wonderful day!” it said. “Just trying to get my music out. Hopefully my music will be heard. Feel free to let me know what you think!” This was followed by his Venmo information and, below the sign, a red cloth bag. Until my train came I stood and leaned against a pillar, listening to the music. It was the most amazing music I’ve ever heard, and I wanted to record it, but after I had the thought to do so, I hardly had two minutes before my train came and I had to leave for home. I never did let him know what I thought, but I did drop a twenty dollar bill into the cloth bag.

My fiancé is an artist, but not like me. He didn’t “draw”, he did literally everything else. Anything on the border of that word was fair game—typography, topology, graphic design, architectural sketches, blueprints, you name it—but never proper art. At least, not anymore.

For a long while I had the nicest handwriting of anyone I knew (don’t be envious, it’s a thoroughly useless skill to be good at, in fact it winds you up addressing a lot of envelopes), but then I met him and that changed. Whenever he would come to visit, and for a while even after he was living with me, he would leave me little notes. “Good morning, love. Have a nice day today.” “So you know, I’m headed out to buy some groceries, I’ll be back in an hour or so.” “Hey, darling, would you mind putting a can of soda in the freezer for me so it’s nice and cold when I get home?” I used to keep all his notes. Then there got to be too many and I stopped. When we moved, I left them at my parents’ place.

My youngest sister is a writer—among other things—and I used to have frequent conversations with her when I had yet to realize that amateur fiction is something I am neither good at nor particularly enjoy. She has a way of beautifully crafting circular metaphors, where a person does a thing and the thing is blue, and then through the course of the story it shifts colors to gold and then to red but then finally, and usually this comes after the character dies, it shifts back to blue, and it’s wonderful and reflective and sad and I am not doing it justice with this poor artist’s description.

I used to want to write down her eloquent phrasings and plots, but then at one point, I was driving her to an event of some description, and she said something particularly eloquent, something about golden braids. I wanted to write it down but I couldn’t pull over to do so as we were pressed for time, and I asked if she could write it down for me and she said, no. I asked why and she said, maybe it’s better to let some words just become air.

There is so much beauty in this world and much of it is unobserved, or, perhaps worse, unnoticed. I wonder who else who heard that man at the station is still haunted by his music. I wonder who else saw my fiancé’s doodlings and notes and the way he organized our bedroom and thought of Sen no Rikyū’s ideals of simplistic natural beauty. I wonder who else read my sister’s metaphors and plots and was moved by their eloquence. It’s entirely possible that I’ll never know.

But why is it even my first impulse, when I see something beautiful, to capture it? Why is it humanity’s first impulse—for this I presume is the reason people put pretty birds in cages? We desire to possess what is beautiful. My justification involves a desire to experience the beauty more than once and my memory’s inadequacy at satisfying this desire, but it’s just that, isn’t it? A justification. If you have a seemingly different thought process but it still winds you up with the same result, chances are you wrote the bottom line before the arguments above it.

I’ve tried to deliberately give up this impulse to capture beauty, because I’ve noticed the capturing detracts from the observation. If you’ve already seen something a million times but are trying to preserve the memory for a later date when you’re liable to have forgotten many of the details, this is a good time for capturing. But if this is perhaps your only chance to see the beauty, just see it. “I want to look at it” clashes violently with “I want a picture” and leads to a poorer overall experience of the beautiful thing, and it seems to me that a faulty memory fully utilized is still better than that same memory half-assed plus a blurry photograph. If you don’t see it again you have one good memory; if you do, you can take the photo next time.

I think the man at the station knew that. Besides the message, he only had his Venmo information on the sign: nowhere people could find his music to listen to more, no Soundcloud or Youtube username. Perhaps my fiancé knew it too, though it’s possible he’s just dismissive of his talents: in a society built on self-deprecation and humility, and among humans for whom words shape reality, it’s not surprising that many people are chronically undervalued. I know my sister knew it. Recently, I learned. And now, you know too. I hope it is of use to you.

Working Overtime and a Pesach Away from Home: Week 6 at Upgrow, Inc.

I think my perception of time may be getting out of whack. The weeks go by so quickly, I feel like I write one of these updates every day. I wonder what makes time seem like it goes by so quickly—if I had to venture a guess, it would involve the percentage of time that we spend fully conscious of our surroundings. Childhood is spent in this state in perpetuity, adolescence sees it notably less, and adulthood allows it rarely if at all. If that’s the case, is this a necessary evil that comes along with becoming an adult? Or—and I admit this search for an alternative is motivated by a desire to believe this is a possibility—is there a method to slow time back down again?

I’m not sure. If the root cause is indeed a lack of awareness of grounded reality (as opposed to the abstractions which so often fill modern adulthood), a possible solution would be to systematically cultivate this awareness. But while I’ve done this by accident while intoxicated, the idea of doing it deliberately while not under any external influence is heretofore untested by me. I’ll have to update you on that next week.

I bring this up because of what I mentioned previously – about overcoming akrasia. The issue is that when I was in school, I would sit about, actively procrastinating on an assignment and knowing I was doing so. This was the form of akrasia that I thought I might be dealing with again, perhaps unknowingly. But not so; this new akrasia comes as thinking “I’d like to do this thing tonight” while standing on the train home, then coming home and eating dinner and then suddenly four hours have passed and where on earth did that darkness outside the window come from, oh I guess it’s bedtime now well maybe I’ll get to do the thing tomorrow.

So the problem of overcoming akrasia as a college student was solved by getting so overwhelmingly angry with myself that I had to either get my work done or go crazy, but the problem of overcoming it as a working professional seems to necessitate slowing down the perceived passage of time, or if that’s impossible, learning to get more done faster. (Ideally, it would involve doing both.)

Besides my difficulties with getting extra work done in my downtime, I’m doing very well at my actual job. Last week I worked a few hours overtime getting important projects done on very short notice, and my bosses seem to be very happy with me. I’m assisting in the management transition and taking on as much work as I can, which extends beyond my job description into some agency marketing work, including proofreading blog posts for the company blog.

My old boss had a few odd aspects to his workflow: for example, he always had way more projects than he could feasibly finish, he never assigned due dates or deadlines to anything, he rarely specified goals or provided scope specifications, and he was basically never completely transparent with the rest of the company. My new boss is exactly the opposite of all these things, which seems to be working out a lot better. I hope that, whatever company my old boss decided to work for, that it’s a better culture fit for him. He did say it paid a lot better.

The biggest thing I think I need to do at work is not get complacent with my current success. Life has demonstrated numerous times that it can turn on a dime and I need to be prepared for that possibility; and also, mere adequacy has never really been my style anyway. I need to keep taking on more responsibilities and getting even better at the ones I already have.

We have a contract writer who works on the SEO team with me, and I think I just got about as good as he is at writing articles. Now I think it’s time for me to start blowing his stuff out of the water. There’s not much better you can get for SEO than an A++ grade on Clearscope, but there’s plenty of room to improve in terms of rhetorical quality and speed. In every area, I need to make these sorts of improvements.

Outside of everything work-related, Passover (Pesach) was this past weekend, and this was the first time I had one away from home. I had my birthday away from home as well, but I was in the middle of moving in then, and I’d had very little time for any kind of real ceremony. I ate some cupcakes with friends in the community center and my fiancé bought me a stuffed rabbit. But Pesach… that’s a pretty big deal, the kind of thing my parents typically make a big fancy dinner and bring the extended family over for.

Really, Pesach is more “Jewish Christmas” than Chanukah is, despite the fact that the latter happens around Christmastime. (Other cultures have no obligation to stick their major religious holidays around Christmas, y’know.) So if you’d like, you can say this was sorta like my first Christmas away from home.

I didn’t sit around and mope, don’t worry, I’m not that much of an introvert. In fact, I went to a ceremony that was in fact much larger than my family’s—and I have a big family. There were perhaps thirty people there, a good ten percent of which weren’t even Jewish; they just decided to “come in and make Passover”, as the Haggadah says. And speaking of that, we used a rewritten “rationalist’s Haggadah”, which was equal parts tear-jerking and hilarious. After we ate a nice meal, we told a bunch of stories, sung bad parodies of songs from Hamilton and Portal (which were in fact a part of the rewritten Haggadah), and then hung around in a cuddle pile on beanbags in the living room, telling stupid jokes well into the night. I have a few drawings of this night that I think I’ll post here whenever I get around to finishing them.

The next morning I opened some care packages my parents had sent my fiancé and I, which included a lot of candy and chocolate, pancake and hot cocoa mix. (Why hot cocoa in the late spring? Why not? It’s California, it never gets below 50ºF here. Now’s as good a time as ever.) And I hung around being mostly out of it for most of the day, for some combination of the alcohol, the weed, and the staying up five hours past my normal bedtime, eating chocolate in my PJs. The only problem was that I fell off a motor scooter later that day while running an errand. Still, all in all, a pretty good first-Pesach-as-a-grownup.

What is a Feature Flag?

As a digital marketer, I wind up writing a decent number of articles for clients’ blogs. And as always happens when writing about a topic, I’ve learned a decent amount about these clients’ products. Our current biggest writing-focused client is Split, which is a B2B SaaS company selling feature flags as a service. But hold up, what on earth are feature flags? Well, I’m about to tell you.

A feature flag is a piece of conditional code that you wrap around any new feature, which links that feature to a dashboard. From this dashboard you can turn off the feature, release it to only a subset of your userbase, and generally manage all your features so you can see which ones are in use.

Now, how exactly is this useful? To start with, imagine a pre-existing codebase for a currently-working app. You don’t always start with this—one of the ways to implement continuous deployment is to start with a blank canvas—but this is usually how it works and is one of the most common feature flag use cases. Now, imagine a dev team working on a new feature to add to that app.

Without feature flags, this looks like a number of things, all of which are sub-optimal. You end up releasing only a few times a year because you need to do endless testing to make sure things aren’t broken before you push to production. You get crazy long-lived feature branches that take forever to merge back to trunk (“master” in Github terminology) and make a huge mess when they finally do. Or, worst, you accidentally break something but don’t realize until after you’ve already pushed to production, and you have to do a painful rollback to the previous version to fix the bugs, then re-release afterwards, and deal with the fallout from

With feature flags, the scenario looks much better. Instead of testing with your staff before pushing to production, just test in production on your real users—starting with just a select few of them, who have perhaps opted in to be guinea pigs. Instead of making branches which may or may not outlive their welcome and/or create a merge hell when you try to get them back to trunk, you can do everything straight in trunk. And if you break something anywhere in this process, you can just turn the feature off, no rollback required.

Beyond simply making development less of a headache overall, there are some specific things you can do with feature flags that are much harder otherwise. Some notable examples include continuous integration/delivery/deployment, canary releases and phased rollouts, and dark launches.

Continuous integration is the process of constantly and deliberately merging every code change to trunk (/master). Continuous delivery is constantly pushing each change to a production-like environment where there’s only one step of manual testing before it goes to end users. Continuous deployment is similar to continuous delivery, but without the manual testing: automated testing is the only step between the code deployment and the end users.

Canary releases and phased rollouts are similar in that they both involve releasing new features to only a subset of the userbase at first. With a canary release, the userbase subset is chosen and targeted to be test subjects, and they act like a canary in a coal mine, letting developers know whether the feature is safe to release to the broader public. With a phased rollout, you begin with a subset, which you then slowly ramp up until you’ve released to your entire userbase.

Dark launching is, literally, the process of launching a feature while keeping your users in the dark. Specifically, you use all the portions of your real infrastructure that would ordinarily be used in serving the feature, but you don’t actually show it to users. Feature flags can make this happen by letting you restrict access to only internal users, which lets the developers activate the feature in absence of a real code deployment.

There are a bunch more uses for feature flags – some of which are detailed on Split’s or FeatureFlags’s use cases pages, others can be found on Martin Fowler’s blog.