My resolution for 2016 – ship more independent projects. Even (or perhaps especially) as a product manager, I realized that I need to ship more and often in order to force my next stage of growth. Here are my lessons from Ship 1.
I needed to learn something you can’t get in school – how to ship. Practical, real, empirical knowledge about making things, polishing them to the level of public consumption, and then actually shipping and marketing them.
I decided to get an early start during the Christmas break in 2015, and shipped my first project: @realHellToupee, on 12/26/2015 (code here – you can make your own twitterbot with it ). Here’s what I learned. (See here for the technical lessons learned).
1) Development is deep
The project seemed pretty straightforward. Connect to the Twitter API, search for a tweet mentioning Donald Trump, do some regex replacements (e.g., “Trump” => “WhISIS”), and post the tweet back to Twitter. Sure, I might have to worry about catching “Trump” and “trump,” but overall not too much work, right?
Wrong. Two weeks of development later I had confronted a host of technical problems.
How to inject secrets like API keys into an app without exposing them, the difference between REST and streaming API’s and why one wouldn’t give me the results I needed, problems in an underlying library that refused to work over
tmux, necessitating a different method of ensuring a command continues to execute after I log out of
ssh, and of course the mysteries of actually obtaining continuous code execution on the “always-available” cloud.
Development is filled with little wrinkles, and the path between functional spec and technical execution is long and winding. I’m convinced that becoming a great programmer means making lots of things, each time picking up a trick or an obscure piece of knowledge. The theoretical knowledge from a CS curriculum is great and can help immensely (particularly at the architecting step), but the execution remains to be earned in practice.
2) Context-switching is hard
After ten days or so of development I was ready to ship the bot. It worked (more or less, heroku kept going to sleep), the tweets got posted correctly, and I had solved most of my bugs.
The next step was to evaluate the user experience, but as I looked at the bot working I realized something crucial. I was tired.
Did it really make sense that I replaced “Make America Great Again” with “Notice me, Senpai!”? Would anyone else get the reference? Did it make sense to just drop
@‘s in front of usernames and not drop the whole username instead? Should I be caching recent tweets to avoid tweeting ones too similar in an effort to increase diversity so the reader has something new to look at?
These questions are all worth digging into, and with my PM hat on they made perfect sense. They were exciting, exhilarating even! Let’s make this the best damn Donald Trump joke bot ever! For my Developer self, though, I was weary after a protracted battle.
Being able to execute in multiple disciplines is good, but learning how and when to effectively context-switch between them will make you great, both as an individual hacking something together and as a leader shepherding a team to victory.
3) Marketing matters – from the beginning
So now with the project built and the second raft of major bugfixes shipped, the time had come to promote. Let’s get everyone to see my wonderful creation!
First stop, Hackathon Hackers on Facebook. Aaand there’s two other Trump projects posted within the last 12 hours. Second stop, a Facebook post tagging 50 of my closest friends. Mildly effective. Third stop, make a Buzzfeed listicle!
Oh boy. This was a trainwreck. First I had to collect the good tweets, which were interspersed with mountains of uninspiring bot-style tweets. No problem…make a tumblr and put ’em there! Oh, but I can’t get the videos and linked multimedia to embed properly. Okay, let’s try embedding directly from Twitter into Buzzfeed. Nope, still no multimedia. At this point I’ve spent hours putting together a “15 Funniest Tweets” trainwreck that involves complicated, multi-step wordplay and punnery for each joke. Not good for Buzzfeed.
A successful Buzzfeed listicle will be image-heavy, with simple jokes that require zero effort to grasp. Bonus points for making the user feel like they learned something, or reaffirming a pre-existing bias.
These problems could all have been alleviated had I put on my Marketing hat from the beginning, and asked “what would a marketable Trump joke bot look like?” Lesson learned for the future.
In the end I also learned some topic-specific things about Buzzfeed/viral marketing. Having previously launched two nonprofit / activist campaigns and seen both receive national media coverage within a year, I was confident in my marketing prowess. I was also misguided – marketing is complex and multi-faceted.
In the end I learned three important marketing-related lessons:
- Involve marketing at the beginning – scope the product vision in tandem with the question “what is a marketable version of x?”
- Choose the right kind of marketing – different products require different kinds of marketing. Viral (buzzfeed, upworthy, etc.), Social (e.g. “share and get x reward,” or having a well-known niche celeb share for you: twitter, pinterest, instagram, facebook), Social-Geek (reddit, hacker news, hackathon hackers, slashdot, etc.), Journalist-based (techcrunch, huffington post, etc.)
- Learn to let go – independent projects are usually mini-projects, and that’s totally okay. Create a product vision, produce a marketing plan, build it to spec, ship it and bugfix it, and execute on the marketing plan, and then let go.
The last lesson was probably the most important for me. Learning to not get bogged down if the world doesn’t jump up and take notice is key when aiming to ship a series of independent projects. There’s more to be learned by just moving on to the next project!
My first ship was a huge success in terms of lessons learned across the stack, from technical, to product, to marketing. I would say I learned most granularly in the technical camp, improved my leadership experience most in product by learning when and how to emphasize different disciplines, and made my biggest “baby steps” in marketing by learning to see the nuance that helps break up a discipline.
None of these lessons were earth-shattering intellectually, but learning them through practice feels a whole lot different from learning by reading. What are you working on and how has it helped you learn? Drop a comment and let me know (but please – I’m all set on Nike shoes, so spam somewhere else ;))