See all release-notes.
Every year, quarter, and month, I sit down to reflect on what I set out to do and what I actually accomplished. I’ve found that this practice has helped me figure out where I want to go and what I’m doing that’s helping and hurting that progression. As an added bonus, this compilation of highlights (and lowlights) serves as an archive for the standout happenings in my life for my network and future self to engage with at will and async - independent of time and place. I hope you enjoy.
This year I left my job and joined Instagram where code I wrote gets hit 1 trillion times each day, shipped 7 new projects and 3 major upgrades to existing ones, started an online store, penned 102 posts with visits from 21,439 people, shared 457 things to do in nyc across 34 installments of hamventures, and meditated for 2,200 minutes.
My name is Hamilton and this is my 2019 in review.
When I tell people I work at Insta, the first thing they say (you know, after the “ZOMG, THAT’S SO COOOL. I LOVE INSTA. I HAVE 3” to which I respond “I have 9”) is what do you do there? So I thought I’d share.
The second is usually, “wait, why do you have 9 Instagrams?” to which I respond: https://blog.iamhamy.xyz/posts/why-i-have-multiple-instagrams/
I work on a team that builds and maintains the infrastructure that gets media (images, videos, audio) from our servers to you in an efficient manner.
Want to see the fruits of our labor?
That’s it, you just touched our code. Here’s a hamlicious (and simplified) graphic to help visualize:
Where my team fits in the IG stack
That’s all you really need to know.
I’ve already mentioned in previous posts (like my 2019 Q3 review) how much I like it here, but I’ll re-iterate the points cause it doesn’t get old.
But aside from those perks listed above, I think the things that really keep me excited day after day is the sheer scale at which we work and the amount of ownership each individual is given to do it. Now before I go further, I should mention that I’m just talking from the vantage of Ham and am not talking as a representative of Facebook or IG or any other affiliated entity so these are just my thoughts and not official thoughts from them, so don’t go spinning them like they are. breathe
In the ~6 months I’ve been at the company (~4 on my team, and ~3 actually working if you subtract holidays and my hamventurous PTO), I’ve committed around 80 things to the codebase. From my estimates, those codepaths I’ve touched get executed over 1,000,000,000,000 times each day.
THAT’S ONE TRILLION EACH DAY!!1 #trillions
To put this into perspective, I’d estimate that the codepaths from all of my side projects combined get hit no more than 150 times per day and that’s being very generous to my projects.
In my job search this year, I said I wanted “experience with large scale”. Well it’s hard to find scale like that anywhere. I feel privileged to be able to work on it.
This scale is several orders of magnitude larger than anything I’d ever worked on and has, naturally, brought with it new challenges that I’d never faced. Small errors can affect thousands, millions, and billions of people. Even changes that aren’t “wrong” can introduce p95/99 latencies that end up cascading down to affect just as many people. On top of this, there’s just so much code in the codebase and it changes so fast that it’s likely impossible to keep all of that information in one brain - instead you have to aggressively limit the scope of what you need to know, without limiting the effectiveness of the solutions you can provide, to solve a problem without running down endless rabbit holes of code.
These problems aren’t really new - they’re problems faced by most every engineer regardless of what they’re working on - but the scale really did change their flavor and potential approaches to solving them. I knew I wouldn’t be able to “solve” these problems with a silver bullet but also that there were steps I could take to limit their difficulty. So I took some steps.
When you come into a new codebase there’s a ton you don’t know. Typically you learn as you go and as your understanding of the domain increases, so too does your productivity. I wanted to speed this process along so I took several intentional steps to increase my exposure to this knowledge.
The scale part was interesting for me cause I’d never really been thrown in a situation where scalability was the constraint on my system. In school and the interview process you learn a lot about how to make things more scalable but I’ve found that real-world problems tend to have more dimensions so despite that background this was still a very new area for me. So I began analyzing the issues I was running into scale-wise and figuring out ways I could improve my processes to solve for them better and faster. Here’s what I’ve got so far:
I’ve still got a long way to go - the magnitude of scale still boggles my mind and I’m still not used to not knowing everything about the system I’m working on - but I’m working on it. For now, that’s enough.
Since I joined, I’ve been working on 5 different projects. Some were given to me fleshed out while others were given to me as more of a problem statement, leaving me to do much of the planning work. When you look at the big picture, this means that many of these projects are very independent from planning to execution to launch. I was surprised to find that I really, really like this paradigm.
I’d never explicitly identified high ownership / independence as something I valued. But when I talked with my Dad about these satisfactions, he said “wow, that’s great - it’s just like your side projects” and when I looked back on my goals for a role I set down during my job search this year, one was “lead bigger projects w more responsibilities” so maybe that was just an oversight on my part.
Indeed, when I took time to reflect on the similarities between my work processes and my #projects processes, they were very similar. I choose what I want / think is valuable to build, I create a plan to do so, and I make it happen. An ~ideal dev process.
So I got to start a lot of projects cause I had a lot of ownership which was great. But that also meant I was going to be point of contact for all of these projects which meant I needed to have them all organized with project specs and roadmaps and timelines and stakeholders and meeting notes etc. This extra scale utterly overwhelmed my personal organization methods which had previously just needed to support my personal tasks and a few side projects.
The workload of my 5 projects almost doubled the amount of work / tasks / things I was attempting to keep track of. This uncovered some weakpoints in my organization structures, namely that it implicitly relied on my ability to keep all workstreams and respective timelines in my head at one time in order to prioritize tasks / streams against each other.
With the added load, that just wasn’t possible without poring over each workstream each day which just didn’t seem efficient.
I don’t think I’ve ever done a full post on my organization structure and it’s now in flux so this won’t be it. But basically I overhauled my structure so that it now has the ability to keep track of projects with milestones, associated timelines, and the ability to visualize these timelines on a Gantt chart.
By making these modifications, I’ve been able to scale my concurrent active project peak load (an active project being something I’m currently focused and executing on) to (I think) ~10 by providing an easy-to-access, long-term store that’s not in my head and a method to visualize timelines against each other to plan for possible bottlenecks / disruptions. 10 obvs isn’t a hard, for sure limit but if it turns out to be true then I think it may be close to my theoretical max, guesstimated as around the number of workstreams I can divide my effort across while still making non-trivial progress in each.
This is all just an experiment so we’ll see if this actually works out for me. If you have / use an amazing method of keeping track of lots of things, please let me know! I’m in the market for some #organization.
This year I chose to focus my project efforts on building things with code. As a consequence, I made sooooo many things. I’ll do a quick recap of each here, but I’ve written about each in past release notes so if you want to know more, just follow the links.
In the first half of 2019 (really the 7th day), I started a project called Tikkun Olam Tuesdays. This was an experiment prompted by the disparity between my perceived privilege and the good I was doing in the world by leveraging it. The goal, then, was to do something good for the world through efforts that I was skilled at and enjoyed - a win, win. What this means in the context of my 2019 foci is that I wanted to do something good for the world with code.
Through this endeavor I created three different projects (one of which never launched) tackling current issues in some fashion.
Before I go into what these projects were, I’ll note that Tikkun Olam Tuesdays no longer exists and has instead been rolled into the more generic HamForGood. I did this for a few reasons:
So instead of a weekly time allotment, I’ve moved thinking about worldly problems into my standard brainstorming processes so that those projects have an opportunity to be the primary focus of my dev cycles. Hopefully this will reduce overhead, increasing project output / quality while maintaining a regular focus on projects for good.
Without further ado, the HamForGood projects:
From its project page: WIGC “is a portal for cancer data exploration as relevant to the individual. It leverages open data sets and wraps them in an intuitive interface.” I was inspired by sites like https://isitchristmas.com/ and https://www.isitdownrightnow.com/ which provide a quick, intuitive answer for a single use case and wondered if it could be repurposed for something good for the world.
The site is still live so you can check it out here: https://willigetcancer.xyz/
Ultimately WIGC worked better as an exploration of the underlying technologies (namely NextJS and Zeit now) than it did raising awareness for the average risk of cancer for an individual, getting just 222 visitors in its lifetime. I think part of this is lack of marketing on my part (both sharing within my network and poor SEO for organic traffic) and the amount of competition for tools in this area - there’s a ton of sites that do similar cancer data things, I just think mine’s better.
Mine for Good in action
The second project I created allows you to mine cryptocoins (in this case, it mines Monero) in your browser with the proceeds of that mining going towards select charities in the cause of your choice.
This project was cool because I’d always wanted to do something related to blockchains. My initial idea was actually to build the infrastructure that would allow browser-based mining (similar to the mining module I use on mineforgood), but I eventually decided that the project was too large, not super valuable money or interest wise, and would have too large an opportunity cost wrt other projects I wanted to take on to pursue.
I really like this project but, like willigetcancer, it’s not very useful. So far this project has made literally zero money and I don’t really expect it to. That’s not just because it got less visitors than willigetcancer (it had 108 visitors this year) though that certainly didn’t help but I crunched some numbers after building it and found that even if it had way more visitors, useful monetization was unlikely. I found that ads perform ~58x better than browser-based crypto mining for the same traffic and that even the most zealous of mine-for-good-ers would only produce ~$1 / year which is likely less than the cost of the electricity consumed during mining so people should just donate directly vs using my site =(.
I mentioned earlier that my focus this year in projects was to build more with code. For my art that meant less creation through “traditional” means and more through code and procedural generation. Here’s what I worked on:
A zima-blue output
My first forray into code-built art was inspired by the Love Death and Robots episode of the same name.
It’s a rather simple script written in Go, combining generative zima-blue rectangles with random photos pulled from Unsplash but it was an important first step in exploring what was possible and, as you’ll see, provided a foundation for many of my other artistic experiments.
You can see more zima-blue outputs on my art site: https://art.iamhamy.xyz/zima-blue/
A blinder output
When I found my new role at Instagram, I learned that I’d be spending a lot more time writing Python - a language I hadn’t written in awhile and hadn’t seriously coded in ever. To combat this lack of knowledge / experience (and as I mentioned in the scale section of working at IG), I decided I would focus on writing all my projects through the end of the year in Python. That motivation to build things in Python coupled with my newly-seeded momentum in generative art led to lots of generative art built in Python (surprise!). Each @hamy.art project listed here and below was thus written in Python, fyi.
Blinder uses machine learning to find eye features in Unsplash images and then generates overlays on them.
A Portal output
Portal is all about image collages and what happens when you mashup the world of an image with that of others. It was largely influenced by my urge to make a more generalized (and in Python) zima-blue engine.
You can read more about it on the portal project page.
An example webz output
webz was largely inspired by the work of Espen Kluge. Like many of my projects, it started by seeing his work and thinking “I could do that and better”. So I tried.
It combines the structure of source images with the randomness of procedural generation, relying on the brain’s natural want to find patterns to find balance and meaning in the resulting noise.
You can read more about the project on its project page
A marquee output
marquee is the only new art project I built in Q4, mostly because I was focused on improving current projects vs building new ones. I saw a need and opportunity in combining text with other generative elements (e.g. in the cover photos for hamventures) so I went ahead and built it despite my focus on the existing.
I don’t have much to share about this right now but may be releasing more stuff about it as I find it useful in more usecases.
I built all these things that were pumping out art so I rebooted @hamy.art after an ~8 month hiatus to share them with the world.
In 2019 my @hamy.art account grew from ~191 followers in October to ~700 in December (a 366% increase), I posted 130 times, and received 9,600 likes in return.
It’s been so successful that it’s hit a milestone not one of my 7 other (eligible) accounts have hit - it’s more popular than my personal account!
If you want to get updates when I release new art, follow me there.
So I had a bunch of art and a place to showcase them. Next step was to create a way to sell them to each and every person on Earth (and even those somewhere else - it’s 2020, worldism is a thing of the past). #profit #businessham
So far it hasn’t been a breakout hit - I’ve gotten just 2 orders this year and one was from my dad. But that’s okay, this project is pretty lean so that actually means I came out about neutral monetarily.
I’ve found it refreshing to try and optimize outside the #codesphere and think that productizing in some way (though maybe not this way) is a logical next step in the lifecycle of my art but I’ve also been wary of sinking too much time into the logistics of this step vs doing what I really enjoy doing - making the art. I’ve heard time and time again of people pursuing their passions only to end up spending a majority of their time supporting it rather than doing it and I want to try to keep that from happening to me as well.
Bottom line is that I started, it’s been entertaining, and it hasn’t blown up in my face - reason enough for me to continue.
I currently sell art prints and tshirts and ship almost anywhere in the world - if interested, check out my shop.
Old projects got love too.
Last year I did a big overhaul of my sites - changing their hosting platform, what they were built with, and how they were organized. This year, I worked to streamline my build processes to minimize maintenance and maximize velocity. #movefastanddontbreakthings
I also added a monthly habit to log my site stats each month so I could keep track of how they did over time cause I like things like that. #stats #data I’ve been thinking a lot about measurement and how not all measurements are good but without measurement its hard to make decisions, so this is a step in the direction of more measurement. So here are my stats.
In total, I had 21,439 visitors to my sites this year (excluding all the projects previously mentioned). This is a 2700% increase over the number of visitors from last year, even if we take into account that these sites were up for only 6 months in 2018.
My top 5 most popular posts in 2019 were:
Copy and paste post views in 2019
It’s wild to me that one of my top posts continues to be a post on how to copy and paste in a mobile app - something I’m not an expert in and not particularly interested in either (I originally wrote this post in 2016!). I first noticed this trend in October of this year (and wrote about it in my October release notes) when I analyzed my traffic and found it was the source of ~70% of my total site traffic (across all properties). But the internet has a mind of its own and if you’ve got the best info on something, its want to find you.
My 2019 H1 in review post views in 2019
I believe this is the first time (at least the first time I’ve noticed) that one of my reflections was not in the top 5 most viewed pieces of content in a year. My most viewed reflection this year was my 2019 H1 in review with 445 views (8.98% of blog views) followed by my 2019 Q3 review with 426 views (8.60% of blog views) and my 2018 in review with 228 views (4.60% of blog views).
I think this just goes to show the power of organic traffic. My reflections get a lot of readers from referral and direct mediums (i.e. people see the links and click on them) but that traffic comes and goes very fast. There’s not really anyone out there specifically searching for these reflections and thus once people stop clicking links, there are no more eyes to view them.
Before concluding this section, I should note that I had 2 outlier posts that made it to the front page of Hacker News (the reason for their outliership) that are the main contributors to the astronomical growth in readership in November and December of this year. I expect that after the latent buzz goes down, my sites will drop readership numbers back down to the conservative growth line from which they flew.
Post traffic on day it hit the Hacker News front page (for ~5 minutes)
I did an analysis on the first (and worst-performing) front page submission to better understand the impact it had on my readership and found that in one day I got as many visitors as I usually do in a month, visits to my site were inflated for a week after the submission was made, and visits to related content increased by 148% over the same period.
Both of these posts were listed above in my top 5 most popular posts in 2019, so I’ll link their HN submissions (in the order in which they were submitted) here instead. If you read the articles (or even if you didn’t) I found the HN comments to be both informative and amusing.
I revisited moon-eye, my browser-based audio visualizer, to make it more consistent across processors, animate smoother, and adapt in real-time to changing audio scapes. You can read more about these updates or just give it a whirl in its live demo.
Here’s an example:
This year, I started a post series called “hamventures”. In it, I attempt to round up my favorite things I find to do each week in the big apple.
I started it to 1) go on more adventures by making adventure-finding more habitual and consistent, 2) have more people adventure with me by providing a heads’ up and garnering interest, and 3) with the hopes that I’d be the next Bright Young Things. I think I’ve definitely accomplished 1, 2 is iffy but I think it has a slight lean to the positive and I think the lack of shine here is due to my laziness towards individually reaching out to people to join events vs mass inviting and awaiting responses, and 3 is a huge miss with my hamventures email list and Facebook page sitting at 5 subscribers and 10 likes respectively.
Each of these hamventures takes time and some are more fruitful than others but I still feel that, overall, they’re a net positive in my #adventure focus and that’s reason enough to keep on doing them.
This year, I sent out 34 hamventures (~65% of the weeks in a year) containing a total of 457 events. I went to 27 of these events (~6% of total events) from 21 hamventures (~62% of all hamventures).
Below I’ll list some events I went to that were included in said hamventures. Also an interesting look at how the format has changed over the course of the year.
If you’re in NY or just sometimes in NY and want to go to / know about tech / art / whatever else events in the city, consider subscribing to my hamventures email list and / or liking my hamventures FB page.
Now that my sales pitch is out of the way, I’m going to show you all the other adventures I went on that weren’t strictly hamventures! And there were a lot. So this might be a huge section.
I acquired toast!
I went to Tennessee!
I went to Asheville!
I went to Atlanta!
I went to SF!
I got a belly tattoo for my birthday!
I went to Chicago!
I went to Italy!
And stayed in Italy!
And stayed in Italy some more!
And Mexico City!
Then just a lame in NY for #holidaypartyszn!
If you want more hamventures that aren’t strictly hamventures #followme
So that was a lot of stuff about what I did externally but I think it’s also important to take a look at some of the things I’ve done behind the scenes that helped to support this output. This post has already grown into a behemoth so I’ll try to keep this section short but note that I think it’s probably the most important focus I work on as it’s core to each of the others.
One of the biggest things I’ve done this year is dedicate myself to meditation. I know that dedicate sounds like a strong word and that’s because it is. I didn’t just “start” meditation to see if it worked, I dedicated myself to it with the goal of meditating once every day in 2019.
I take this tangent here because I think that the difference between starting and dedicating to the practice was the difference between me feeling meh about it and quitting on day 5 and pushing through the meh, better understanding the process / paradigm, and seeing profound changes in my strut through life. I make this distinction to show that, in some cases, pig-headed diligence is a good strategy.
Before I go further, I’ll note that I did not meditate every day in 2019 nor am I a meditative zealot that wants to force you to commit to that yourself. Though maybe once a week.
But I really have seen positive changes in my life through habitual practice and I want to share a little bit about what those changes are and why I think they happen in order to allay the skepticism of 2018 Ham and record the journey for 2020 Ham.
For me, the biggest thing that meditation helps attain is calm. Calm being the state of non-frantic mental / emotional / physical being.
Of course there are a ton of positive things that come as a consequence of this calm - focus, productivity, decision-making, etc.
But in the end, it’s really just calm.
I still haven’t found a great way to describe this calm, partially because I’d never really experienced it before and thus didn’t have anything to compare it with, as I note in my post One month of daily meditation. Later in the year I tried a different approach to describing the phenomenon by comparing it to something I knew much more about - computers - in Headspace in computer terms.
I don’t think either post has aptly described the state or its effects but they hold certain grains of truth I find to be important which is why I’ve linked them here.
I think the best comparisons I can make today are to a runner’s high (the feeling you get after a long, hard run - for me it’s ~4+ miles at ~90+% but ymmv) or post shavasana (final resting pose) after a long and at least moderately difficult yoga session. My hypothesis for why these are similar is that you’ve accomplished something hard, that’s good for you (and your body knows it’s good for it), and that you likely value which naturally leaves you in a state of feeling that you’ve done “enough”.
But that’s all I’ve got. If you haven’t experienced those yourself, I think you should. I use Headspace for led meditation which is free (though I pay for extra stuff), almost every yoga studio has a free or severely discounted first class / week / month, and you can almost literally run anywhere.
If you can’t / won’t - I’ll report back when I have more descriptive words.
My 2019 Strava year in sport stats
Oh running. I love running. But I used to love it more.
My goal this year was to run 500 miles. A lot of people (mostly non-runners) are like “whoa that’s so much!” but when you do the math, that’s a little less than 10 miles each week. Totally doable.
Last year I ran 422.3 miles over 71 different runs.
This year, I hit just 203 miles over 51 runs.
It’s way off the mark. But that’s okay.
Running used to be one of my core satisfactions, but as I’ve found and understood more about meditation and its draw for me, I think a large part of that may have been the sense of calm it bestows after. So I think some of my potential calm-driven runs gave way to yoga and / or meditation.
I also twisted my ankle in early January which didn’t help but think that was only a minor part of this decline (I’m way more than 1/12th off target).
Going in to 2020 I am planning on running / doing cardio more. I’ve been doing them so long that I’d implicitly built many life structures with the extra fitness those habits provide taken for granted - a decline in those structures (and my new-found buffet access at fb and #oldage) has led to me puffing up a little more than I’d like =(. Time to #thrive in 2020 and reverse course.
In a similar train of thought to the one that caused me to start what became HamForGood, I’d been thinking about how I could leverage my position to make the world a better place outside of the #codesphere. In my 2019 Q3 review I wrote about voting with my time, effort, and money to make the world a better place.
My approach is still largely the same as I believe that in most cases the influences of these votes are a more efficient lever wrt their impact than me doing x directly. I’ve worked to further support this effort by allocating more budget for it each month and incorporating brainstorming for projects of this nature in my normal cycles.
I will note that this approach is also a much more comfortable and easy way of influencing x which may have its own problems, but I’ll leave that for another day.
Aside from the increase in budget and change in brainstorming practices, most everything else in this effort is the same as it was in Q3 so if you’re interested in learning more, read my original post in my 2019 Q3 review.
I know this was a long one so thanks for bearing with me this far. Before I let you go I’ve got a few more words to share.
It’s the end of another year and a logical end of a decade. While I don’t believe you should wait for a new year / decade / made up unit of time to change your life, I do think that these recurring units of time provide an excellent onus for doing so if you hadn’t already. At this turn of the decade (6 months from my 25th year reflection) I’ve been thinking a lot about a quote from Sam Altman’s post by the same name: The days are long but the decades short.
I recall sitting in high school classes, so bored that I would sleep through half of them just waiting to get to college and long nights at the Georgia Tech library dreaming of life after college when I would no longer be pulling all-nighters. I’ve now been out of highschool for 7.5 years and out of college for 3 - in another 1 / 1.5 years I’ll have been out of college for longer than I was in it.
In those 7.5 years since highschool (and decade since 2009) I’ve come a long way:
Me and highschool me
But I also think it’s important to stop for a second and recall all those things you hoped and dreamed you’d do but didn’t. Some of those may be for a good reason but others may have just slipped by in the monotonous passage of time.
At the turn of the decade, I think it’s a good time to take inventory of your dreams - those you held over the years, those you now hold close, and perhaps even those you didn’t know you dreamt - to evaluate which ones give you hope and happiness, and to re-dedicate yourself to their pursuit.
In H1 2020 my theme is
thrive which to me means making progress towards my dreams.
Thanks again for reading, let’s have a
Hi I'm Hamilton and I wrote / built this! I like doing lots of things, but mostly I like to build (and then share those buildings). Some things I'm currently building: art, software, and prose. To stay up-to-date with my latest buildings, subscribe to my email list or follow one of my many other accounts. #buildit #shipit #justhamit