<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.3.4">Jekyll</generator><link href="https://marc.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://marc.io/" rel="alternate" type="text/html" /><updated>2026-06-18T10:30:31+00:00</updated><id>https://marc.io/feed.xml</id><title type="html">Marc Köhlbrugge</title><subtitle>Maker of BetaList, Startup Jobs, WIP, and other products.</subtitle><entry><title type="html">My experience switching BetaList from Heroku to Render</title><link href="https://marc.io/heroku-to-render" rel="alternate" type="text/html" title="My experience switching BetaList from Heroku to Render" /><published>2022-11-02T00:00:00+00:00</published><updated>2022-11-02T00:00:00+00:00</updated><id>https://marc.io/heroku-to-render</id><content type="html" xml:base="https://marc.io/heroku-to-render"><![CDATA[<p><a href="/betalist">I started BetaList as a Tumblr site</a> back in 2010 to give startup founders and early adopters a place to discover each other and share feedback. Since then it has evolved a lot. Both functionally and technically.</p>

<p>It was a <a href="https://sinatrarb.com/">Sinatra</a> app for a while, and later I switched to Ruby on Rails 3. As the years went on I kept the codebase up-to-date by upgrading anytime a major new Rails version came out. (Running on Ruby on Rails 7 now with the <a href="https://hotwired.dev/">Hotwire</a> goodness.)</p>

<p>I played with the idea of moving away from Heroku for a while. For a few reasons. The most concrete reason being costs, but I also felt like their product development stalled the last few years and although I’ve had some good experiences with their support team, overall the company seemed more interested in serving huge enterprise clients rather than a startup like my own.</p>

<p>At one point one of their sales reps called me (still not sure how they got my phone number) and repeatedly emailed me trying to upsell me on a $1,400/mo Enterprise plan with a 12-month commitment. I guess someone needed to hit their quota 😅</p>

<h3 id="render">Render</h3>

<p>Because of these reasons I’ve been exploring alternatives. I briefly tried self-hosting with one app, but when the server randomly went down one night because my logfiles filled up the disk (apparently they don’t automatically get deleted?), I realized I don’t want to play devops engineer.</p>

<p>I ultimately settled on <a href="https://render.com">Render</a>. They provide a similar “Devops done for you” product as Heroku at a more reasonable price point, the product is actively developed, and the team seems more in touch with their customers. Not just the enterprise ones.</p>

<p>Over the past year, I’ve been migrating all of my apps from Heroku to Render. First some smaller apps, and eventually some of my bigger sites like <a href="https://startup.jobs/">Startup Jobs</a>. Since many makers are curious about switching to Render, I figured it would be valuable to document one of those migrations for others to benefit from.</p>

<p>I recently switched BetaList to Render as well and documented my approach below. I’ll also share some of the unexpected issues I ran into, and explain how I solved them.</p>

<p><em><strong>Disclosure</strong> — Render was a BetaList sponsor at the time I wrote this post.</em></p>

<h3 id="previous-heroku-stack">Previous Heroku stack</h3>

<ul>
  <li>Rails 7.0.4 / Ruby 3.1.2</li>
  <li>Web dyno ($50/mo)</li>
  <li>Worker dyno for Sidekiq background jobs ($25/mo)</li>
  <li>Postgres ($50/mo)</li>
  <li>Redis (for caching and Sidekiq background jobs) ($25/mo)</li>
  <li>Scheduler ($5/mo)</li>
  <li>Adapt Scale for scaling up/down web workers ($18/mo)</li>
</ul>

<p><img src="/images/posts/heroku-to-render/heroku-metrics.png" alt="BetaList's Heroku dyno configuration, showing a 2X web dyno and a 1X worker dyno for Sidekiq" /></p>

<p><img src="/images/posts/heroku-to-render/heroku-addons.png" alt="BetaList's Heroku add-on list: Deploy Hooks, Heroku Postgres, Heroku Scheduler, etc." /></p>

<p>On average I was paying around $175/mo at Heroku for BetaList. Not horrible, but if you run multiple sites like I do this will start to add up.</p>

<h2 id="the-migration-process">The migration process</h2>

<p>Here’s roughly how I approached the switch:</p>

<ol>
  <li>
    <p>Deploy a few smaller apps on Render.</p>
  </li>
  <li>
    <p>Prepare the BetaList codebase.</p>
  </li>
  <li>
    <p>Deploy a test version to Render.</p>
  </li>
  <li>
    <p>Import (sanitized) production data.</p>
  </li>
  <li>
    <p>Migrate for real.</p>
  </li>
</ol>

<h4 id="1-migrate-a-few-smaller-apps">1. Migrate a few smaller apps</h4>

<p>Before migrating, I got familiar with Render and <a href="https://render.com/docs/blueprint-spec">render.yaml</a>. Rather than configuring everything through the dashboard (which is still possible as well), you can write a document as part of your codebase that defines which services to use, etc. It’s one of my favorite features.</p>

<p>You spend a lot of time configuring your servers, etc. so it’s nice to have a concrete copy of all that work. It makes it easier to experiment as well as you can always revert. Plus, you can easily copy your server setup between projects.</p>

<h4 id="2-preparing-the-codebase">2. Preparing the codebase</h4>

<p>Good preparation can save a bunch of work. I started by moving all of my API keys and other sensitive data from environment variables to the more portable <a href="https://guides.rubyonrails.org/security.html#custom-credentials">Rails Credentials</a>. I also backed up my config variables with this just to be safe. (Don’t commit this file to your git repository).</p>]]></content><author><name></name></author><summary type="html"><![CDATA[My experience and some practical advice.]]></summary></entry><entry><title type="html">Embrace the chaos</title><link href="https://marc.io/embrace-the-chaos" rel="alternate" type="text/html" title="Embrace the chaos" /><published>2022-10-01T00:00:00+00:00</published><updated>2022-10-01T00:00:00+00:00</updated><id>https://marc.io/embrace-the-chaos</id><content type="html" xml:base="https://marc.io/embrace-the-chaos"><![CDATA[<p>Starting something new is messy. You don’t know exactly where you’re going. You try one direction and hit a dead-end. Try another. You’ll get fully immersed in a new piece of technology, only to hit an insurmountable roadblock and be back at square one.
Your code will be a mess. Your UI lacks structure. Your UX is full of glaring problems. When you fix one bug, three new ones pop up. But only sometimes. With some browsers. And of course you’re unable to reliably reproduce them.</p>

<p>If you’re anything like me, you’ll see a multitude of opportunities to clean up. To streamline the design. Remove unused assets. Refactor that piece of code you wrote late last night.</p>

<p>Don’t.</p>

<p>Early on when building your startup, chaos is your friend. That mess of an HTML template? It reminds you it’s okay to be scrappy. The customer won’t mind. Making that border radius consistent with the rest can wait. It’s okay.</p>

<p>Enjoy the moment. Pretty soon you’ll have your structure. You’ll have a working product. And better yet, customers!</p>

<p>But this comes at a price. Rigidity. Changes will be harder to make. Bugs more costly. You’ll long for the chaos. Back when anything was possible.</p>

<p>Embrace the chaos… while you still can.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[Starting something new is messy. You don’t know exactly where you’re going. You try one direction and hit a dead-end. Try another. You’ll get fully immersed in a new piece of technology, only to hit an insurmountable roadblock and be back at square one. Your code will be a mess. Your UI lacks structure. Your UX is full of glaring problems. When you fix one bug, three new ones pop up. But only sometimes. With some browsers. And of course you’re unable to reliably reproduce them.]]></summary></entry><entry><title type="html">Measure once, cut twice</title><link href="https://marc.io/measure-once-cut-twice" rel="alternate" type="text/html" title="Measure once, cut twice" /><published>2022-09-22T00:00:00+00:00</published><updated>2022-09-22T00:00:00+00:00</updated><id>https://marc.io/measure-once-cut-twice</id><content type="html" xml:base="https://marc.io/measure-once-cut-twice"><![CDATA[<p>The old adage “measure twice, cut once” suggests you spend some extra time planning your work before taking action, saving you from having to do the work again, wasting time and material.</p>

<p>This is excellent advice for carpentry and working with physical objects. But, when it comes to building startups, I’ve come to realize it’s usually faster to “measure once, cut twice”.</p>

<p>You often don’t know yet exactly what you’re making. You’re figuring it out as you go along. The first cut lets you try out an idea. The second cut makes it right.</p>

<p>So next time you’re starting a new project, don’t spend too much time planning. Just start hacking away and see what you come up with. It’s usually faster and more effective than trying to plan everything out in advance.</p>

<p>Measure once, cut twice.</p>]]></content><author><name></name></author><summary type="html"><![CDATA[The old adage “measure twice, cut once” suggests you spend some extra time planning your work before taking action, saving you from having to do the work again, wasting time and material.]]></summary></entry><entry><title type="html">#buildinpublic</title><link href="https://marc.io/buildinpublic" rel="alternate" type="text/html" title="#buildinpublic" /><published>2021-08-09T00:00:00+00:00</published><updated>2021-08-09T00:00:00+00:00</updated><id>https://marc.io/buildinpublic</id><content type="html" xml:base="https://marc.io/buildinpublic"><![CDATA[<p><img src="/images/posts/buildinpublic/screenshot.png#full" alt="" /></p>

<p>I’ve always been fascinated by seeing creative people work their craft. I don’t just want to see the finished product. I’d like to see the progress that got them there.</p>

<p>That’s why I make products like <a href="https://betalist.com">BetaList</a> (discover startups in their early stages) and <a href="https://wip.co">WIP</a> (community of makers sharing their work in progress).</p>

<p>Over the last couple of years, the concept of “building in public” has become mainstream. People no longer wait to show off their project when it’s finished. Instead, they start sharing their progress from day one. It’s a great way to meet other makers, stay motivated, get early feedback, and build an audience.</p>

<p>A lot of people now build in public on Twitter. To connect, they use the hashtag #buildinpublic. Unfortunately, there wasn’t a great way to explore all these tweets and makers. Until now…</p>

<p>Introducing <a href="https://buildinpublic.com">buildinpublic.com</a> 🚀</p>

<p>A place to explore all the #buildinpublic tweets and see what everyone is working on.</p>

<p>Have a look and maybe give building in public a try yourself. Just post a tweet with the #buildinpublic hashtag and it will automatically show up on the site!</p>

<p>It’s also live on <a href="https://www.producthunt.com/posts/buildinpublic">Product Hunt</a> and <a href="https://betalist.com/startups/buildinpublic">BetaList</a>, so if you’ve got an account there, your support would be appreciated! Looking forward to your feedback and #buildinpublic updates!</p>]]></content><author><name></name></author><summary type="html"><![CDATA[]]></summary></entry><entry><title type="html">Tweet Photo got acquired</title><link href="https://marc.io/tweet-photo-acquired" rel="alternate" type="text/html" title="Tweet Photo got acquired" /><published>2020-08-31T00:00:00+00:00</published><updated>2020-08-31T00:00:00+00:00</updated><id>https://marc.io/tweet-photo-acquired</id><content type="html" xml:base="https://marc.io/tweet-photo-acquired"><![CDATA[<p><strong>TL;DR: <a href="https://tweet.photo">Tweet Photo</a> is a software service to automatically post your Instagram photos to Twitter. It started out as a Medium post, turned into a software product, and eventually got acquired for $30,000.</strong></p>

<p>Continue reading for the full story on how I validated the idea, built a simple product, grew it to thousands of active users, tried monetizing it, and eventually sold it.</p>

<hr />

<h3 id="-blog-post-as-an-mvp">📝 Blog post as an MVP</h3>

<p>People always tell you: start with an MVP, prove there’s demand for your product
before investing all your time into something nobody wants. In my experience
that’s good advice, but it seems many successful products often start out as
accidental MVPs. Tweet Photo is a perfect example of this.</p>

<p>If you’ve ever tried posting an Instagram photo to Twitter, you might have noticed it looks like this:</p>

<div class="jekyll-twitter-plugin"><blockquote class="twitter-tweet"><p lang="in" dir="ltr">🌺 Flower power. @ Bali, Indonesia <a href="https://t.co/HBUbFDbvL5">https://t.co/HBUbFDbvL5</a></p>&mdash; Marc Köhlbrugge (@marckohlbrugge) <a href="https://twitter.com/marckohlbrugge/status/1072785131226697728?ref_src=twsrc%5Etfw">December 12, 2018</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

</div>

<p>Just a link. No photo. Useless. I don’t know the politics behind this, but I believe Facebook is the one that disabled the photo previews at some point. So now we’re stuck with useless tweets.</p>

<p>You can find many workarounds using automation services like <a href="https://ifttt.com">IFTTT</a> and <a href="https://zapier.com">Zapier</a>. Because I was unhappy with all solutions, I decided to write my own article in May 2017:</p>

<p><strong><a href="https://medium.com/@marckohlbrugge/a-better-way-to-post-your-instagram-photos-to-twitter-7f3a04a37d89">A better way to post your Instagram photos to Twitter</a></strong></p>

<p>Turns out I struck a chord. To this date that post has been read 70,000 times. Over three years later it continues to get over a thousand hits per month.</p>

<p><img src="/images/posts/tweet-photo-acquired/medium.png#full" alt="" /></p>

<p>If you read the post though, you will notice how complicated the setup is. So I figured there might be an opportunity for a product here. I knew there was interest, but I didn’t know if I could monetize it.</p>

<p>It wasn’t until <a href="https://hi.yuko.im">Yuko</a> posted <a href="https://wip.co/questions/what-is-the-best-way-to-repost-instagram-contents-to-twitter">this question</a> on WIP:</p>

<p><a href="https://wip.co/questions/what-is-the-best-way-to-repost-instagram-contents-to-twitter"><img src="/images/posts/tweet-photo-acquired/wip.png" alt="" /></a></p>

<p>She mentioned she’d happily pay $20/mo for Zapier to tweet her photos. That got me thinking: maybe it’s a product that can be monetized after all. Plus, I already got the leads coming in via the blog post. I could funnel them through to this new service instead.</p>

<p>Rather than further validating the business model, I challenged myself to build a prototype over the next couple of days.</p>

<h3 id="-building-the-product">🛠 Building the Product</h3>

<p>I believe in using the tools you’re familiar with, so I used Ruby on Rails to build the product.</p>

<p>Tweet Photo is technically quite simple. I’m basically gluing together the Instagram and Twitter APIs. I was able to do most of the work with open-source libraries.</p>

<p>I finished the product in just over a week during my spare time.</p>

<p>I initially went with the <strong>tweetphoto.icu</strong> domain name because it was only $1. That’s how much faith I had in the product I guess. But shortly after I decided if I’m going to do this, I might as well do it right and purchased <strong>tweet.photo for $130</strong>. It might not seem like a lot of money, but with all the projects I start things start to add up 😅. In hindsight I’m really glad I got this domain name…</p>

<p>I wouldn’t realize it until later, but the key feature I added was appending <em>“via tweet.photo”</em> to every tweet. This single piece of text would prove to be the driving factor of Tweet Photo’s growth.</p>

<div class="jekyll-twitter-plugin"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">🌺 Flower power.<br /><br />📸 <a href="https://t.co/uJSFHQSyOE">https://t.co/uJSFHQSyOE</a> via <a href="https://t.co/4BojSCBY2i">https://t.co/4BojSCBY2i</a> <a href="https://t.co/N9A0ZyZ3Ar">pic.twitter.com/N9A0ZyZ3Ar</a></p>&mdash; Marc Köhlbrugge (@marckohlbrugge) <a href="https://twitter.com/marckohlbrugge/status/1072785705548595201?ref_src=twsrc%5Etfw">December 12, 2018</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

</div>

<h3 id="-time-to-launch">🚀 Time to launch</h3>

<p>December 12th, 2018, 11 days after Yuko’s post, I launched:</p>

<div class="jekyll-twitter-plugin"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">🖼👉🐦 I made a new thing called <a href="https://t.co/LMVsrPNaFV">https://t.co/LMVsrPNaFV</a> ✨<br /><br />Automagically post your Instagram photos and videos to your Twitter account. Your media will be embedded in the tweet, unlike Instagram&#39;s built-in feature.</p>&mdash; Marc Köhlbrugge (@marckohlbrugge) <a href="https://twitter.com/marckohlbrugge/status/1072869470866034688?ref_src=twsrc%5Etfw">December 12, 2018</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

</div>

<p>It got featured on <a href="https://betalist.com/startups/tweet-photo">BetaList</a>
(although no surprise here, as I’m the founder of BetaList) and
<a href="https://www.producthunt.com/posts/tweet-photo">Product Hunt</a>.</p>

<p>At the end of the launch day over 100 accounts were created with a combined total of over 100 published tweets.</p>

<p>The product worked! 🥳</p>

<h3 id="-growth">📈 Growth</h3>

<p>As time went on the userbase continued growing.</p>

<p>Unlike most software services, the retention of Tweet Photo was basically 100%. Meaning that anyone that signed up, was likely to continue using it for a long time. Once signed up, everything was automated after all.</p>

<p>Combine that with the “via tweet.photo” in every tweet and you’ve got steady growth:</p>

<p><img src="/images/posts/tweet-photo-acquired/growth.png" alt="" /></p>

<p>Here’s a screenshot of the <a href="https://simpleanalytics.com">Simple Analytics</a> dashboard showing how tweets are driving new leads to the homepage:</p>

<p><img src="/images/posts/tweet-photo-acquired/tweets.png" alt="" /></p>

<p>We even got some major Hollywood celebrities using the service. In fact, Tweet
Photo became a hot topic amongst her fans. Driving even more sign ups.</p>

<div class="jekyll-twitter-plugin"><blockquote class="twitter-tweet"><p lang="en" dir="ltr">I took this last week, ignore the makeup on my shirt<br /><br />📸 <a href="https://t.co/NrpzzKh9UO">https://t.co/NrpzzKh9UO</a> via <a href="https://t.co/NxPR6lYMyD">https://t.co/NxPR6lYMyD</a> <a href="https://t.co/uzB3ZTDQ9E">pic.twitter.com/uzB3ZTDQ9E</a></p>&mdash; Zendaya (@Zendaya) <a href="https://twitter.com/Zendaya/status/1150188870560092160?ref_src=twsrc%5Etfw">July 13, 2019</a></blockquote>
<script async="" src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

</div>

<h3 id="-monetization">💸 Monetization</h3>

<p>Okay, so we’ve got decent growth. But what about the revenue?</p>

<p>This was a lot harder. When I launched Tweet Photo I included a $19/year PRO subscription that would remove the “via tweet.photo” branding. I figured if people care enough about their Twitter profile to not want to show that link, they might be willing to pay.</p>

<p>People with more Twitter followers would pay more. After all if someone has a million Twitter followers it’s worth a lot more to me if they promote Tweet Photo in every tweet.</p>

<p><img src="/images/posts/tweet-photo-acquired/stripe.png" alt="" /></p>

<p>I eventually switched to monthly pricing starting at $5/mo. I figured churn rate would be really low anyway, so it would be better to charge monthly. Paying $5/mo instead of $19 for a year upfront is a lower commitment for the customer, but ultimately 3x the revenue for me.</p>

<p>Unfortunately MRR grew very slowly. It’s about $135 MRR right now.</p>

<p>I think the main problem is that the free plan is already very compelling. So it’s hard to convince people to upgrade.</p>

<h3 id="-now-what">🤔 Now what?</h3>

<p>While I had plenty of ideas for improving monetization, including removing the free plan altogether, it didn’t seem worth my time trying to grow a product that’s only doing $135 MRR. Even if I could 10x that, it’s still a low amount compared to my other products.</p>

<p>So over time I spent less time and attention on Tweet Photo. It continued to grow organically.</p>

<p>Another reason I didn’t want to invest too much time is the inherent platform-risk of building an API-powered product. I was dependent on both Twitter and Facebook continuing to provide me access to their API. They could revoke it at any time and Tweet Photo might be doomed.</p>

<p>Earlier this year Facebook did actually deprecate one of their APIs I was relying on, requiring me to upgrade my integration to use a different API.</p>

<h3 id="-acquisition-offer">💬 Acquisition offer</h3>

<p>In April, <a href="https://x.com/kevntz">Kevin</a> reached out to me asking if I was interested in selling Tweet Photo. He had a strategic interest with his other products <a href="https://creatorkit.com">CreatorKit</a> and <a href="https://topnine.co">Top Nine</a>.</p>

<p><img src="/images/posts/tweet-photo-acquired/dm.png" alt="" /></p>

<p>Of course the question of valuation quickly came up. Typically a SaaS product is sold for 3-4x annual revenue. In Tweet Photo’s case that would be around $5,000. But that didn’t factor in the many free users that required almost zero customer support, but drove continued growth.</p>

<p>If I were to sell it, it would need to be in the $xx,xxx range. Otherwise I’d prefer to just keep the service and see what happens. There’s always the possibility of another celebrity using it and it going viral.</p>

<h3 id="-valuation-of-30000">💰 Valuation of $30,000</h3>

<p>After some negotiation we ultimately settled on a purchase price of $30,000.</p>

<p>The first $10,000 is cash upfront with no strings attached. The remaining $20,000 is contingent on the revenue Tweet Photo will generate. Basically I will receive all revenue generated within 24 months of the acquisition, with a cap of $20,000.</p>

<p>We both ran the numbers and we believe that with the full weight of <a href="https://creatorkit.com">CreatorKit</a> behind it, it seems very likely Tweet Photo will generate more than that.</p>

<p>But you never know how things turn out, so this was a way to de-risk the acquisition for the buyer while still allowing for a higher purchase than you’d typically see for a $135 MRR business.</p>

<p>Ask me in a few months how things are going 🙂</p>

<h3 id="-whats-next">👀 What’s next</h3>

<p>The $10,000 is in the bank and we’re now finalizing the asset transfer.</p>

<p>In the coming months CreatorKit will likely start marketing it to their existing userbase and possibly improving the service as well. Since we still have a shared interest in growing Tweet Photo me and the CreatorKit team will keep in touch to see how things are going.</p>

<p>Personally, I will continue to focus on <a href="https://wip.co">WIP</a>, <a href="https://betalist.com">BetaList</a>, and <a href="https://startup.jobs">Startup Jobs</a>.</p>

<p>If you want to hear how the remaining $20,000 plays out subscribe to my newsletter below 💌</p>]]></content><author><name></name></author><summary type="html"><![CDATA[It started out as a Medium post, turned into a software product, and eventually got acquired for…]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://marc.io/images/posts/tweet-photo-acquired/og.png" /><media:content medium="image" url="https://marc.io/images/posts/tweet-photo-acquired/og.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">My rule for memorable domain names</title><link href="https://marc.io/my-rule-for-memorable-domain-names" rel="alternate" type="text/html" title="My rule for memorable domain names" /><published>2019-07-05T00:00:00+00:00</published><updated>2019-07-05T00:00:00+00:00</updated><id>https://marc.io/my-rule-for-memorable-domain-names</id><content type="html" xml:base="https://marc.io/my-rule-for-memorable-domain-names"><![CDATA[<p>My rule for a memorable domain name: it can only have two parts that need to be remembered. So either a dictionary word plus a non-standard TLD, or a dictionary word plus a prefix or suffix on .com.</p>

<ul>
  <li>✅ <a href="http://submit.co">submit.co</a></li>
  <li>✅ <a href="http://submitly.com">submitly.com</a></li>
  <li>❌ <a href="http://submitly.co">submitly.co</a></li>
</ul>

<p>It’s not a hard rule, but when you’re weighing options I’d lean toward fewer parts. Play around with different combinations and you can usually find an affordable domain that fits.</p>

<p>I’m not a linguist, but I think the way we memorize these domains is by remembering the <em>concept</em> of the dictionary word and the <em>letters</em> or <em>vocalization</em> of the prefix, suffix, or TLD. Memorizing two vocalizations (i.e. two non-dictionary words) is a lot harder.</p>

<p>Common prefixes: get-, use-, hello-, hi-, meet-, ask-, my-. Common suffixes: -app, -ly, -list.</p>

<p>For tech-savvy audiences or fun apps I tend to prefer dictionary-word + non-standard TLD. A few examples: <a href="http://tweet.photo">tweet.photo</a>, <a href="http://wip.chat">wip.chat</a>, <a href="http://highscore.money">highscore.money</a>, <a href="http://expensive.chat">expensive.chat</a>, <a href="http://startup.jobs">startup.jobs</a>.</p>]]></content><author><name></name></author><category term="twitter" /><summary type="html"><![CDATA[My rule for a memorable domain name: it can only have two parts that need to be remembered. So either a dictionary word plus a non-standard TLD, or a dictionary word plus a prefix or suffix on .com.]]></summary></entry><entry><title type="html">Makers, don’t try to reverse-engineer success</title><link href="https://marc.io/makers-dont-try-to-reverse-engineer-success" rel="alternate" type="text/html" title="Makers, don’t try to reverse-engineer success" /><published>2018-11-27T00:00:00+00:00</published><updated>2018-11-27T00:00:00+00:00</updated><id>https://marc.io/makers-dont-try-to-reverse-engineer-success</id><content type="html" xml:base="https://marc.io/makers-dont-try-to-reverse-engineer-success"><![CDATA[<p>I often get questions like “How did you get your first customers for WIP? How did you grow BetaList’s traffic?” Makers are looking to reverse-engineer success, and I see it everywhere. But I don’t think it works that way, and the answers to those questions are mostly useless.</p>

<p>I have built dozens of different products over the last couple of years. The vast majority failed. Surely if I already knew the answers to those questions, but still failed over and over again, those answers aren’t that useful. So what’s a better question to ask?</p>

<p>The real question — the thing you actually want to know — is this: what makes <a href="https://wip.co">WIP</a>, <a href="https://betalist.com">BetaList</a>, and <a href="https://startup.jobs">Startup Jobs</a> succeed where my countless other attempts failed? What separates a failed product from a successful one?</p>

<p>99.9% of the questions I receive are about the products that did well. In a way that makes sense, because we quickly forget the ones that didn’t. This is known as <em>survivorship bias</em> — focusing on what survived while ignoring what made it survive in the first place.</p>

<p>Honestly, I don’t know the answer. I wish I did. It’s like Steve Jobs said: “I’ll know it when I see it.” The same is true when we make products. We don’t know upfront what will work. But once we see an inkling of a product that does have potential, it’s not that hard to spot.</p>

<p>So keep shipping. Assume your current product will fail and that you need to try a bunch more before you find the metaphorical spaghetti that sticks to the wall.</p>

<h3 id="some-contrasts-ive-come-to-recognize">Some contrasts I’ve come to recognize</h3>

<p>The wrong idea requires you to push and push until you’re tired and can’t take it anymore. The right idea pulls you forwards.</p>

<p>The wrong product will have you focused on the technology, fine-tuning the design, tweaking the copy. The right product will give you the confidence to ship something embarrassing, because you know that despite all its shortcomings it’s useful.</p>

<p>The wrong product will have you begging people for feedback. You’ll cling to any comment remotely positive (“Wouldn’t use, but nice idea!”). The right product will attract people wanting to use it. People will give feedback without you asking for it.</p>

<h3 id="practical-advice">Practical advice</h3>

<p>Keep your initial products small. If it takes 10 tries to find something that works, you can’t afford to spend more than a month on any one idea.</p>

<p>Persistence is not about sticking with what doesn’t work. Persistence is continuously experimenting until you find something that does.</p>

<p>Happy shipping.</p>

<p><em>— Inspired by conversations in <a href="https://wip.co">WIP</a>.</em></p>]]></content><author><name></name></author><category term="twitter" /><summary type="html"><![CDATA[I often get questions like “How did you get your first customers for WIP? How did you grow BetaList’s traffic?” Makers are looking to reverse-engineer success, and I see it everywhere. But I don’t think it works that way, and the answers to those questions are mostly useless.]]></summary></entry><entry><title type="html">Book review: Creative Selection</title><link href="https://marc.io/book-review-creative-selection" rel="alternate" type="text/html" title="Book review: Creative Selection" /><published>2018-09-18T00:00:00+00:00</published><updated>2018-09-18T00:00:00+00:00</updated><id>https://marc.io/book-review-creative-selection</id><content type="html" xml:base="https://marc.io/book-review-creative-selection"><![CDATA[<p>Just finished listening to <a href="http://creativeselection.io">Creative Selection</a> by <a href="https://x.com/kocienda">Ken Kocienda</a>. It’s a rare look behind the scenes at Apple — how they design products and the amount of work that goes into software we now take for granted, like the iOS keyboard. I normally take weeks or months to finish a book; I got through this one in a few days.</p>

<p>A few things that stuck with me, in my own words:</p>

<p><strong>Show, don’t tell.</strong> Rather than endlessly discussing ideas in the abstract, Apple engineers build prototypes and demo them to each other and to decision makers.</p>

<p><strong>The best ideas win.</strong> There’s no place for ego when building great products. The book mentions multiple occasions where Steve Jobs, without hesitation, bins his own idea in favor of a clearly better one.</p>

<p><strong>Iteration is the name of the game.</strong> Kocienda gives countless examples of how a prototype starts as an okay solution and step by step gets better through experimentation, real-life usage, and continued improvement. The product Apple ships is more akin to a v5.0 than a v1.0.</p>

<p><strong>Hack together a first prototype ASAP.</strong> Apple’s first prototypes were often quick hacks that showed the potential of what the real product could become. They inspire, and they give you something tangible to work with. Start small.</p>

<p>There’s a lot more in the book — these are just the bits that resonated most with me as an indie maker.</p>]]></content><author><name></name></author><category term="twitter" /><summary type="html"><![CDATA[Just finished listening to Creative Selection by Ken Kocienda. It’s a rare look behind the scenes at Apple — how they design products and the amount of work that goes into software we now take for granted, like the iOS keyboard. I normally take weeks or months to finish a book; I got through this one in a few days.]]></summary></entry><entry><title type="html">The history of WIP</title><link href="https://marc.io/the-history-of-wip" rel="alternate" type="text/html" title="The history of WIP" /><published>2018-08-22T00:00:00+00:00</published><updated>2018-08-22T00:00:00+00:00</updated><id>https://marc.io/the-history-of-wip</id><content type="html" xml:base="https://marc.io/the-history-of-wip"><![CDATA[<p><a href="https://wip.co">WIP</a> is a social network for makers — a place to share your daily progress and keep each other accountable. It launched publicly in September 2017, but I’d been circling the same idea in different forms for much longer than that. Here’s the timeline of prototypes, mockups, and half-built products that eventually turned into WIP.</p>

<h3 id="february-2014">February 2014</h3>

<p>The idea of “Attaboy” was for makers to share what they are working on and keep each other motivated throughout the development process. It was email-based and never got any traction. Seems familiar though, right? 🤔🚧</p>

<p><img src="/images/posts/the-history-of-wip/1032308498674024448.jpg" alt="Screenshot of Attaboy, an early email-based activity feed for makers" /></p>

<h3 id="later-that-month">Later that month</h3>

<p>A mock-up for a mobile app. I figured maybe email wasn’t the right medium. I never built the app though — didn’t have the coding skills, nor market validation.</p>

<p><img src="/images/posts/the-history-of-wip/1032309175341084674.jpg" alt="Mockup of an early mobile app concept for the same idea" /></p>

<h3 id="february-2015--a-year-later">February 2015 — a year later</h3>

<p>You can’t tell from the cryptic copy in the design mock-up, but this was an iteration of the same idea. I got it fully built, but it proved to be over-engineered and I never felt it was good enough to launch. 🤷‍♂️</p>

<p><img src="/images/posts/the-history-of-wip/1032309870442082304.jpg" alt="Design mockup of the 2015 iteration" /></p>

<h3 id="april-2016">April 2016</h3>

<p>A different, but related idea. What if you could share your sketches, wireframes, and mockups to get feedback on? Truly building in public.</p>

<p>I built it, but lost motivation pretty early on so I never launched it. Repeating theme. 😂</p>

<p><img src="/images/posts/the-history-of-wip/1032310671919042560.jpg" alt="Design mockup of the 2016 iteration" /></p>

<h3 id="september-2017">September 2017</h3>

<p><a href="https://x.com/levelsio">@levelsio</a> suggests I start a Telegram group for <a href="https://betalist.com">BetaList</a>.</p>

<p>A few days later, people start sharing their completed tasks. So I built a bot and a simple website. I renamed the chat and WIP is born.</p>

<p><img src="/images/posts/the-history-of-wip/1032311994215424000.jpg" alt="The early WIP Telegram group" /></p>

<h3 id="today">Today</h3>

<p>WIP is helping hundreds of makers achieve their goals of building profitable businesses, is doing a few thousand dollars in monthly recurring revenue, and is distributing the best memes in town. #humblebrag</p>

<video autoplay="" loop="" muted="" playsinline="" class="rounded-lg" src="/images/posts/the-history-of-wip/1032312728226942976.mp4"></video>

<p>(FWIW, I only included a selection of prototypes, sketches, and related products. I actually tried many more approaches such as <a href="http://changelog.co">changelog.co</a> and others.)</p>

<h2 id="related-things-i-made-that-led-to-wip">Related things I made that led to WIP</h2>

<p>Back in the days before Slack was a thing, I experimented with a $7/mo chat community on 37signals’ Campfire team chat service. While there was some interest, it proved difficult getting to critical mass — crucial for real-time chat.</p>

<p>Another thing that influenced WIP is a quick prototype I made for Telegram. It was supposed to record short podcasts through the chat app. I was able to use that codebase as a starting point for WIP — it already had the Telegram integration I needed. If it wasn’t for that codebase I might not have bothered creating that initial WIP prototype.</p>

<h2 id="lessons-learned">Lessons learned</h2>

<ul>
  <li>Just because your idea doesn’t work right now in its current form doesn’t mean it won’t work later in perhaps a slightly different form.</li>
  <li>Even if a product doesn’t work out, you can still gain insights that will help inform your next product.</li>
  <li>Some of the hardest yet most important insights to gain are insights into customer needs and behavior. You will only get these if you actually ship the damn product.</li>
  <li>For the reasons above it makes sense keeping the product scope small early on. (I know I’m like a broken record on this, but it’s so important it bears repeating.)</li>
  <li>Managing your own psychology is crucial as well. Know the things that motivate, scare, and bore you. My pitfall is over-engineering and running out of motivation before the product is ready to ship. Solution: smaller scope + accept seeming ignorant to obvious product shortcomings.</li>
</ul>

<hr />

<p>It’s 1am, I’m eating McDonald’s delivery, and making tons of grammar errors. Signing out.</p>

<video autoplay="" loop="" muted="" playsinline="" class="rounded-lg" src="/images/posts/the-history-of-wip/1032323500889915392.mp4"></video>]]></content><author><name></name></author><category term="twitter" /><summary type="html"><![CDATA[WIP is a social network for makers — a place to share your daily progress and keep each other accountable. It launched publicly in September 2017, but I’d been circling the same idea in different forms for much longer than that. Here’s the timeline of prototypes, mockups, and half-built products that eventually turned into WIP.]]></summary></entry><entry><title type="html">Traveling tips</title><link href="https://marc.io/traveling-tips" rel="alternate" type="text/html" title="Traveling tips" /><published>2018-08-14T00:00:00+00:00</published><updated>2018-08-14T00:00:00+00:00</updated><id>https://marc.io/traveling-tips</id><content type="html" xml:base="https://marc.io/traveling-tips"><![CDATA[<p>Some of my favorite traveling tips.</p>

<h4 id="-only-bring-carry-on-luggage">🛄 Only bring carry-on luggage.</h4>

<p>It’s usually cheaper and you can check in online. For most airlines this means you don’t need to go to the airport counter and can go straight to the gate. It also saves you time when you arrive at your destination as you don’t need to wait for the slow luggage belt.</p>

<h4 id="-in-case-of-doubt-dont-bring-it">🛒 In case of doubt, don’t bring it.</h4>

<p>The less luggage you bring, the less hassle. Smaller chance something gets lost, and less weight to carry around. If you’re unsure about whether to bring a certain item, consider that you can probably just buy it at your destination as well.</p>

<h4 id="-flight-ticket-prices-vary-wildly">🎫 Flight ticket prices vary wildly.</h4>

<p>Prices can change a lot depending on when you travel, with which airline, in which class, etc. If you’re traveling on a budget, make sure to do your research. Typically the more time between when you book and when your flight is, the cheaper. Use sites like <a href="https://flights.google.com">Google Flights</a> and <a href="https://kiwi.com">Kiwi</a> to compare different airlines.</p>

<h4 id="-meeting-people">💬 Meeting people.</h4>

<p>It’s great if you can travel with friends. But if that’s not an option, there’s a bunch of different ways to make new friends at your destination. Joining a co-working place is one way. But also meetups through sites like <a href="https://meetup.com">Meetup.com</a> or <a href="https://nomadlist.com">Nomad List</a>. Dating apps like Tinder and Bumble can also be good ways to make new friends (or more).</p>

<h4 id="-stay-flexible">📅 Stay flexible</h4>

<p>If you’re visiting a new place, it’s hard to predict if you’re going to like it. And which area to stay at. So I try not to commit too much in advance and keep my options open. For example I might book a one-week hotel stay even if I plan to stay a few months. That gives enough time to explore the area IRL and pick a permanent spot.</p>

<h4 id="-use-revolut">💳 Use Revolut</h4>

<p>Traditional banks can charge a lot for international credit card payments and ATM withdrawals. Newer banks like Revolut have a lot lower fees, and make it easy to order multiple cards so you always have a backup if you lose one.</p>

<h4 id="-make-checklists">✅ Make checklists</h4>

<p>I’ve created a bunch of check lists for myself for travel. I’ve got a list for “what to look when booking an accommodation” (I have quite a few requirements 😅). Prep for a flight (including a packing list, etc). I even have checklist with what to do when <em>arriving</em> at my destination. It includes things like getting protein powder for exercise (as I usually find it too bulky to travel with) and properly unpacking rather than living out of my suitcase.</p>

<h4 id="-select-specific-in-flight-meal-during-check-in">🍛 Select specific in-flight meal during check-in.</h4>

<p>You’ll get food first + your choice. AFAIK there’s never an additional cost for choosing beforehand</p>

<h4 id="-noise-cancelling-headphones">🎧 Noise-cancelling headphones</h4>

<p>Well worth it for long flights. They make a huge difference to how rested you feel when you land.</p>

<h4 id="-nomad-list">🗺 Nomad List</h4>

<p>Add trip to <a href="https://nomadlist.com">https://nomadlist.com</a> to receive arrival email with local tips (which sim card to get, tipping percentage, etc)</p>

<h4 id="-you-can-wash-clothes-during-travel">👕 You can wash clothes during travel.</h4>

<p>No need to pack weeks worth of clothes.</p>

<h4 id="-seatguru">💺 SeatGuru</h4>

<p>Use <a href="http://SeatGuru.com">SeatGuru.com</a> to find the best seats in plane</p>

<h4 id="-enjoy-the-trip">👍 Enjoy the trip</h4>

<p>All the prep is only worth it if you actually take the time to enjoy where you are. Don’t pack your schedule so full you forget to just be there.</p>

<p>I learned many of these tips from <a href="https://x.com/levelsio">@levelsio</a> (<a href="https://x.com/nomadlist">@nomadlist</a>), and <a href="https://x.com/jelmerdeboer">@jelmerdeboer</a>’s book: <a href="https://thuisblijvenisduurder.com">https://thuisblijvenisduurder.com</a></p>]]></content><author><name></name></author><category term="twitter" /><summary type="html"><![CDATA[Some of my favorite traveling tips.]]></summary></entry></feed>