创业

创业公司应该选择无聊的技术

感想

昨天又重新读了一下 Boring Technology 和 Boring Company 两篇文章,得出对于创业公司技术选型的一些想法。

  1. 创业必须是老鸟,老鸟已经知道了足够的技术,有足够的技术可供选择,才能有全局思考选择最合适的少数几个技术。
  2. 什么是 Boring Technology?Boring 也不能无脑,Oracle 和 MySQL 都已经足够成熟且无聊了,但是 Oracle 显然不是未来的方向,所以我们肯定要选择 MySQL。
  3. 对于新手来说,显然是不适合创业的。别扯啥比尔盖茨和扎克博格的例子,人家高中水平比不少五年工作经验的人都高。新手还需要足够的时间了解足够的技术知识。就像文中说的一样,每个人的精力是有限的,创业不能把精力都放在技术选型上,更多地是实现商业逻辑。
  4. 作为一个技术人员,或者说技术公司,还是应该固定地花费时间去学习新技术或者更基础的底层技术,比如 20%时间、串讲或者黑客马拉松。否则的话,因为对于技术的追求被压抑了,可能反倒倾向于在生产环境中引入各种 fancy 的新技术而引起问题。
  5. 总体来说,还是哪句话:不要因为手里拿着锤子就看哪里都是钉子。但是工具箱里一定要有锤子,不然看到钉子了你就傻眼了。锤子应该放在工具箱里,需要的时候用一下,而不是一直攥在手里。
  6. 运维团队的一个核心 KPI 就是组织开发人员增加一些功能重复的组件,比如 Python vs Ruby, Redis vs Memcached, Influxdb vs Prometheus.
  7. build from what you really need

原文的一些摘抄

  • 很重要的一步是认识到注意力是非常宝贵的,人类对于细节的把控粒度是有限的。
  • 我的朋友 Andrew 每天穿着同一个牌子的黑衬衫。他认为如果他节省下选择衣服穿的脑力,就可以存起来用到别的事情上。
  • 我们应该选择能够覆盖我们问题的最小工具集,然后把工作搞定。
  • 增加一项技术是容易的,但是和它共存很难
  • 我可以随时 brew install 一个数据库,并且开始往里写数据,但是要在生产环境运行数据库就是另一个技能了。
  • 如果你给不同的团队做出局部选择的权力,那么在你是在全局性地伤害自己。
  • 当你使用多个相同功能的服务的时候,你不只要付出多一分的维护精力,还要失去大家使用同一个平台的好处。
  • 技术对你的公司有全局影响,不应该交给单独的工程师们自己决定。
  • 如果你觉得你用现有的工具无法实现某个新功能,那么一般是你想的不够用力
  • 你可以把你觉得很难实现的功能写下来,然后就就会发现并没有那么难,至少比维护一个新的工具要简单。
  • 当然你有可能得到相反的结论,使用一个新的工具也许是值得的。
  • 如果你正在添加一项冗余的技术,那么你应该尝试着替换掉旧的工具,而不是维护两套。也应该准备着如果新的工具不好用的话,要回滚。
  • 优先做能够让你集中精力到真正重要的事情上的事情。
  • 全局思考你要做什么,选择一组最小的工具能够解决你所有问题的。
  • 有意思的是你选择的任何工具可能都不是”正确的工具”. 但是他们组合起来依然可能是正确的选择。

熟练使用你选择的工具非常重要。你应该往马斯洛需求模型的上面爬,关心大局。你不应该每天都在讨论要使用那个数据库,而应该是跟高阶的业务问题。如果你真的真么做的话,问问自己是不是哪里搞错了。

我们生活在一个创建公司的美妙年代,有那么多直接可用的工具和服务可以让我们解决时间和金钱并提高生产力。从来没有像现在这样,一个小团队(甚至一个人)可以使用简单无聊的技术来做出一点对世界有用的工具来。

大多数时候,构建和交付的最大障碍来自想得过多。如果这样怎么办,那样怎么办。天啊,你根本不重要。每个人都很忙的。没人关心你和你创造的东西,知道你证明你值得别人的注意力。即使你把第一次产品发布搞砸了,几乎不会有人注意到。Think big, start small, act fast. 使用无聊的技术来做一些简单的东西(甚至很丑), 只要你解决了实际问题。

你的过度思考就是我的优势所在。

最后

Boring technology 的思路和 Facebook 工程师的文章 [4] 看似是冲突的。一个强调使用各种”无聊的”的技术,而另一个则是炫耀各种高级的基础设施。其实两个并不是矛盾的,反倒是统一的。无聊的技术才是经过大规模检验的基础设施,而其他高级设施要按照自己的思路,而不是看到乱七八糟的东西为了用就用。

Happiness comes from shipping stuff. 快乐源自交付。

参考

  1. Choose Boring Technology
  2. The Boring Technology Behind a One Person Company
  3. 引入开源库的取舍
  4. FB 海归国内高管:谈谈 infra、代码管理、微服务、测试系统,以及技术人员海归能做什么

亚马逊公司文化学习

Day 1

在头条的时候,公司经常强调“Day 1”意识,也就是把每天当做公司创业的第一天。开始以为是原创的,后来发现原来是从亚马逊学过来的——Jeff Bezos 在给股东的信中经常提到 “Always Day 1”。那么 Day 1 究竟是什么意思呢?

Leadership Principles

亚马逊还有一项重要的公司文化,那就是 Leadership Principles。这个规则如此重要,以至于他们会在面试的时候针对这里面的 14 个 Principles 提出问题。需要注意的是,虽然叫做 Leadership,但是这个是对每一个员工的要求,也就是每一个人都应该把自己当做领导者,而不是一颗螺丝钉。我想这个隐含的条件对许多公司来说都做不到吧?

原文有中文翻译,但是我认为翻译过于“雅”而没有做到“信”,好多信息都做不到忠于原文,所以我这里又自己翻译了一遍:

https://www.amazon.jobs/en/principles

偏执于客户

领导者从客户出发并回归于客户。他们努力工作来赢得和维护客户的信任。尽管领导者也会留意竞争对手的动态,他们更偏执于客户。

主人翁意识

领导者是主人翁。他们从长远出发思考,不会为了短期结果牺牲长远利益。他们从整个公司,而不只是自己团队的角度行动。他们从不会说:“这不是我的工作”。

发明并简化

领导者期待并且要求他们的团队能够创新和发明,并且总会找到能够简化的方法。他们了解外部,从各处寻找新的主意,也不会被“不是我发明的”限制住(也就是说会积极采纳别人的优秀观点和方法,而不是重新造轮子)。当我们研究新东西的时候,我们接受很可能长时间被误解这种情形。

能够做对,并且经常做对

领导者经常是对的。他们有很好的判断力和直觉。他们寻求不同的理念,也会质疑自己的理念。

Learn and Be Curious 学习而且有好奇心

Leaders are never done learning and always seek to improve themselves. They are curious about new possibilities and act to explore them.
领导者从不停止学习而且总是寻求提升自己。他们对新的可能性充满好奇并且会用实际行动去探索。

Hire and Develop the Best 招到并且培育最优秀的人

Leaders raise the performance bar with every hire and promotion. They recognize exceptional talent, and willingly move them throughout the organization. Leaders develop leaders and take seriously their role in coaching others. We work on behalf of our people to invent mechanisms for development like Career Choice.
领导者能把每次招聘和晋升的标准提高。他们能够发现不同常人的天才,并且愿意在整个组织中让他们轮岗。领导者培养领导者并且很认真地为其他人做教练。亚马逊提供 Career Choice 等服务来让大家能够提高自己(Career Choice 是亚马逊提供的培训服务,可以报销 95%)。

Insist on the Highest Standards
坚持最高标准
Leaders have relentlessly high standards — many people may think these standards are unreasonably high. Leaders are continually raising the bar and drive their teams to deliver high quality products, services, and processes. Leaders ensure that defects do not get sent down the line and that problems are fixed so they stay fixed.
领导者坚持高标准——以至于很多人觉得这些太高了。领导者持续提高标准并且驱动着他们的团队产出高质量的产品服务和流程。领导者确保不会像下游输送残次品,问题解决了就是解决了。

Think Big 想搞个大新闻

Thinking small is a self-fulfilling prophecy. Leaders create and communicate a bold direction that inspires results. They think differently and look around corners for ways to serve customers.
想得很小只是一个自我实现的预言。领导者创造并传达一个宽广并且多产的领域。他们的思路异于常人,并且总是在找能够服务与客户的边边角角。

Bias for Action 崇尚行动

Speed matters in business. Many decisions and actions are reversible and do not need extensive study. We value calculated risk taking. 
速度在商业世界中很重要。许多决定和行动都是可以撤销的,所以不需要过度深入研究。我们赞赏深思熟虑过的冒险行动。

Frugality 节俭

Accomplish more with less. Constraints breed resourcefulness, self-sufficiency, and invention. There are no extra points for growing headcount, budget size, or fixed expense.
用更少做到更多。捉襟见肘孕育组织多谋、自给自足和创新。增加人员编制、预算和固定支出并不会有额外收益。

Earn Trust 赢得信任

Leaders listen attentively, speak candidly, and treat others respectfully. They are vocally self-critical, even when doing so is awkward or embarrassing. Leaders do not believe their or their team’s body odor smells of perfume. They benchmark themselves and their teams against the best.
领导者认真倾听,坦率直言,尊重他人。即便会非常尴尬,他们也用于自我批评。领导者并不总是觉得自己一定是对的。他们以最高水平要求自己和团队。

Dive Deep 深入

Leaders operate at all levels, stay connected to the details, audit frequently, and are skeptical when metrics and anecdote differ. No task is beneath them.
领导者参与所有层级,他们了解细节,经常审计,当指标和描述有出入的时候会提出怀疑。没有任何事实能瞒过他们。

Have Backbone; Disagree and Commit 有脊梁;服从大局

Leaders are obligated to respectfully challenge decisions when they disagree, even when doing so is uncomfortable or exhausting. Leaders have conviction and are tenacious. They do not compromise for the sake of social cohesion. Once a decision is determined, they commit wholly.
当有不同意见的时候,领导者有责任不卑不亢地提出,尽管这么做可能会让人不舒服或者筋疲力尽。领导者应该有定力。他们不因为面子而折衷。一旦做出了决定,他们全力实现。

Deliver Results 输出结果

Leaders focus on the key inputs for their business and deliver them with the right quality and in a timely fashion. Despite setbacks, they rise to the occasion and never settle.
领导者聚焦于他们业务的关键输入,并且能够按时以正确的质量输出结果。尽管会有挫折,他们会迎难而上并且绝不妥协。

参考

  1. Amazon Letters to Shareholders
  2. Amazon Leadership Principles

Netflix 公司文化学习笔记

在头条的时候经常听一鸣说到“context, not control”,开始以为是他原创的,后来才知道原来是从 Netflix “偷”来的。不过当时其实自己并不能特别理解这其中的含义,直到后来在创业公司,偶然想到才感觉真是醍醐灌顶,于是特意找来完整的 Netflix 文化 PPT 学习了一下,并做了一写笔记。

file

Value are what we value

file
file

公司价值观体现在我们珍视什么。几乎每个公司都有一些听起来很高大上的价值观,然而这些金玉在外的话语是没有用的。

  1. 公司真正的价值观体现在公司奖励哪些行为,提升哪些人,以及解雇哪些人。
  2. 公司的价值观也体现在员工们珍视的行为和技能中。

High Performance

file
file
file
file
file
file

Freedom & Responsibility

file
file
file

Context, not Control (My favorite part :p )

file
file
file
file

Highly Aligned, Loosely Coupled

file

Pay Top of Market

file
file

Promotions and Development

file
file
file

What are some profitable one-person online businesses?

Here are a list of examples I collected from Hacker News that claim to run a successful one-person online business. You could find the original threads at the end of this post.

Quiz Website

I run a popular Quiz website. I make around $6,000 per month from Google adsense. I work between 2-3 hours a week usually posting quiz links on my Pinterest page. My only expense is hosting which is around $20 per month (Digital Ocean). I have never advertised my website and it gets all the traffic from Pinterest Organically. Compare to my salary, I’m an IT Administrator in my day job and make $400 per month. I live in Ethiopia 🙂 I thought this inspires my fellow HN. Good day.

  • How do you manage to kickstart something like this? You mentioned you get your traffic organically via Pinterest, but there had to be something you did initially that set off that growth.

My website started five years ago, It didn’t get any traffic the first three years before one of my quiz went viral. Now I have around 70k followers on Pinterest.

  • This is important. I have seen this a lot. Persistence. Many people keep pushing,keep pushing even if there is no positive feedback loop for a long time. After a while, they beat time. Kudos.

Cursive-IDE

I develop and sell Cursive (https://cursive-ide.com), which has paid my bills nicely for a couple of years now. Currently I make more than I made in my last job at Google. I never thought I’d be able to make a living selling developer tools, much less into a niche market, but I’m constantly amazed by how well Cursive does.

The work is a mix of fun and boring slog, like most jobs I guess. A lot of my time is spent on support, both technical and sales, so when I work less I actually end up getting more frustrated because a higher percentage of the work is not as fun as writing new features. I’ve also had a bad year of having to work around IntelliJ bugs, but normally I like the actual development work a lot. I have friendly enthusiastic users who constantly make my day. It’s a pretty sweet gig, and being able to decide how I spend my time, and which bits of my time I spend working, is priceless.

I got started during a sabbatical from my last job, just building something that I wanted myself. It turns out that lots of other people wanted it too.

Product Pix

I own Product Pix (https://www.proproductpix.org). It removes the background from product photos, with the intended audience being mostly people who sell stuff online and need to set their background against a white background.

It makes $1300/month right now, up from $0 6 months ago. Living in the Bay Area, that would put me well below the poverty line if it were my sole source of income, so I’m not gonna call it “successful” just yet.

How I got started: I do machine learning, and I methodically searched for places where people buy a service transactionally on platforms like Fiverr and that I think can be automated away (or greatly automated with human reviewers in the loop) with state of the art machine learning models. There are hundreds or thousands of such opportunities that individuals can solve on their own.

I’ll be more comfortable giving sage advice once I’ve crossed the $10K/month threshold, but still I’d say a willingness to try a lot of shit out and get digging on stuff you have 0 familiarity with is mandatory. In this project I’ve had to learn javascript, frontend, photography, google ads campaign management etc.

Another tip I wish someone had told me is, build a pricing page from day one. The temptation to get some signal you’re useful to people will drive you to offer stuff for free, but that will end up getting you a lot of unwanted attention from people who will never ever pay.

Instagram Posting Service

My business is in my bio, don’t want to link it here. Pays about the same as my previous job at Microsoft did, but with a lot less involvement — I haven’t touched the main code in about a year now. I probably spend about two or three hours a week on customer support, that’s it, really. No marketing spend, all word-of-mouth and Google.

The idea came about when I wanted to post to Instagram, but the API didn’t allow it. So I spent about a week trying to automate the process using a phone, with screenshot OCR and a state machine. After a lot of messing around with it, I had a working prototype. Made a website, added a $5/month Stripe plan to see if people were willing to pay for it, sent it to a few friends, posted it on Twitter, and eventually, people signed up and tried it out. It worked, then it didn’t work, then I fixed it, then it worked again, this went on and on for a few weeks until it became quite useable.

About two months in, local offices of Toyota and Samsung signed up, and they loved it, money wasn’t an issue. That was the moment I realized it may be worth doing it properly.

It grew organically, and I bought lots and lots of Android phones, which are simple workers getting jobs off a queue, and host them in two locations roughly. Phones last for about two years, then I buy new ones (<$100 a phone). Each phone pays for itself in less than a month, server costs are less than $200 a month.

Facebook tried to sue me after I filed for a trademark, we figured it out (I rebranded). Been going steady ever since, but I consider it to be shut down by yet another Instagram move sooner or later. But I said that after 3 weeks of running it, and it’s been almost five years I think.

I made it a point to not use any private Instagram APIs, like all my competitors did — instead, I don’t emulate the Instagram app, I emulate the person tapping the phone, and use only the official app for it. I think that let me survive this long.

Updown.io

I run https://updown.io since 2012, a website monitoring service I created. I’m working about 5-10 hours per week on it. It makes about $6,000 per month and is still growing linearly. I also keep a full-time job alongside for now as an engineering manager. The key for me is to take time, make something useful, delight your clients, and don’t try to become uber or airbnb.

Sports App Business

I am mainly in sports apps. I think it is still possible to have succes. It requires a lot of patience. Don’t focus on the revenue part. And don’t try to build a new hype. Very slim chance you build the next angry birds. Instead try to build a product that is based on an already successful specific category/ product. Very important is that you understand your customer and genuinely try to make a product that is better than the competition. You should love your own product. The good thing is that bigger companies tend to destroy their own product with too many ads, notifications, non relevant features etc. Furthermore I believe it’s important that your product contents can be automated without too much manual work. After all you are the only person with only so much time. I know a guy who created a fitness diet app. He cooked and photographed more than a thousand meals. He wrote many articles. In the end he gave up. It took him 80 hours per week to maintain and update all the content. His app was making maybe 100 a month. I know another guy who created a successful formula 1 live app. He is using paid data feeds and scrapes a lot of additional data. Everything automated. Spends like 10 hours a week maintaining things. Makes about 100k a month. Similar story for a guy who created a popular weather app. In essence the only thing what they do is aggregation of data and present it in a relatively simple app. Also don’t spend too much time on analytics, seo and other optimizations. It may take 2 years before you get traction anyway. First the product then after (if it’s worth) the optimization. One concrete product where I think you can still have success is a baby monitor with 2 phones. Couple of good apps only. All premium priced. Not too difficult technically. I don’t have time for it, so go for it 🙂

PageFlow

I run https://pageflows.com and have been living off it full time for a little over a year.

The business makes a bit more than what I was earning a few years ago as a junior developer in London, so it’s not a huge amount of money, but it’s enough.
It’s a fairly boring business to run and not as predictable or sexy as some sort of micro saas, but it’s I’m happy with how things have been so far. Happy to answer any questions you have.

Most customers are indeed businesses. Great shout on some sort of team/business plan – it’s on my to-do list!

I’ve commended to a response below with the business model, but yeah I’ve just started trialling a freemium model yesterday so need to update the rest of the site with clearer pricing plans etc.

Until yesterday there was no freemium access, it was just paid up-front to access all the content. $39 per quarter or $99 per year.

Your use case is kinda where the idea came from, most product people do something similar. The hard part is adding enough relevant content on Page Flows for enough people!

Wakatime

Seven years ago I solo-started an automatic time tracker for programmers called WakaTime [1] and launched here on HN [2]. Partly from listening to developers too much, I waited way too long (almost a year) before adding a paid plan, but now it generates more MRR than an SF developer salary not including stock options. Technically I make more from RSUs and stock from past startups as a regular employee, but if I wasn’t lucky with those then it would be my highest income stream.

1: https://wakatime.com/about
2: https://news.ycombinator.com/item?id=6046227

For anyone thinking it’s egregiously difficult to start a solo-project: You’re right, but if you stick with it your persistence will pay off. For solo-products, I think grit is the deciding factor between success and failure.

There were several stages of MVP. First usable version took a month and half to build and public launch with 2 IDEs supported was 2 and half months after starting to build.

May 3 2013 – Started development Flask website & Vim plugin (https://wakatime.com/blog/1-why-i-built-wakatime)
June 25 2013 – Finished Vim plugin and Website (https://github.com/wakatime/vim-wakatime/commit/4346a055e301…)
July 1 2013 – Started Sublime plugin (https://github.com/wakatime/sublime-wakatime/commit/b7fe36f8…)
July 15 2013 – Finished Sublime plugin and public launch (https://news.ycombinator.com/item?id=6046227)

Unfortunately I don’t have WakaTime data until after finishing the Vim plugin, but everything after that I can see how long the actual coding took by dogfooding.

ERP plugins

I have a one-person lifestyle business. I like it primarily because it gives me the flexibility to live anywhere in the world. I hated my old desk job and the idea of 2 weeks vacation every year.

I run a SaaS product that integrates with ERPs. I pretend to my customers that I have a team (so much so that I have multiple email addresses to people that don’t exist that actually just forward to me). One of our customers thinks they’re paying for a team of 6, but it’s actually just me.

My monthly billings last month was 73k USD. I am a tax resident of a tax haven although I do live 3-6 months at a time in a different country.

The only advice I’d give anyone looking to build a lifestyle business is to keep your ambitions and by extension- product feature set in check. I know several other people who operate like me, and the common thread is we have businesses that can easily take VC funds, hire, and expand. But for lifestyle priorities, we chose not to.

A lot of people I’ve met (particularly in Chiang Mai, Thailand) copy popular, common, and easy online businesses such as drop shipping, social media XYZ, or coding. Unless you live in a really low cost area, it’s not a good life. The key is have a very specific niche that can be scaled upwards if you want, but you always have the option not to. Those the ideas and businesses that seems to provide the ideal balance in lifestyle.

EDIT: The product came about at my last job where I built it to make my own job easier. Essentially it did 95% of what job which at the time enabled me to be the “best performer” while not actually working that hard.

Flowx.io

I develop Flowx [https://www.flowx.io], an Android weather app. It makes around $2,500 USD/month with about $500/month in costs excluding my time. It covers about 60% of my total costs including my time which is 40+ hours a week. I cover my remaining costs through contract work. This might not seem like a success but the business allowed us to move to the Rarotonga, Cook Islands from Auckland, New Zealand. Lifestyle-wise and building-a-business-wise, I think it’s a success.

Just an added note. I started Flowx as a side-project in 2012. In 2016, we moved to Rarotonga and we decided then to try to grow it into a business. It was making ~$100/month at that stage. Since then, it has grown it to $2500/month through added pro features and a better subscription prices.

Stay focused

I sell freemium software that blocks distractions on your computer so that you can focus on doing work. Unlike my competitors, it’s a one-time payment business model.
The idea for my product first came to me when a friend in university had trouble staying focused on writing papers. He was constantly playing World of Warcraft and needed a way to temporarily block himself from playing the game. So I quickly made a little VB.NET app and service that would watch for the game executable and kill the process if it starts. It did the job well enough and he ended up graduating 🙂

At that point, some other students approached me and asked for my little app to help them study. That’s when, half-way through university (2010), I made a website for my app and had it available for free. I continued to maintain it and over 4 years, added more features including: blocking websites, adding breaks, scheduling, and passwords.

In 2014, I split the product into a free and paid tier. It wasn’t an easy decision, but I was spending a lot of time on it by this point and customer support was also starting to take a serious hit on my personal time. In about two years (2016), I was making more money from the paid product than my well paying government day job. So, I decided to quit my job and work on my business full time.

Although I felt it was risky, the alternative was passing up an opportunity many people dreamed of having. I never planned to start a business in the first place and I kind of felt/still feel imposter syndrome. For now, I’m just enjoying my new found freedom and continue to be thankful for my new job. I’m going to keep it a lifestyle business for now, but I wouldn’t be opposed to selling it as my exit plan.

I’ve spent (effectively) $0 in advertising since developing it and I’d say my customers come from organic search, external links, and word-of-mouth.

browserless.io

I run a headless browser service called browserless.io. Got started due to lack of a comparable service, and all others seemed more geared for testing.

It’s been around two years now, and makes more than any prior engineering job I’ve ever had. You do have a lot of other stresses you might not otherwise have, but you’ll also work a lot less than at a traditional job!

I’m working on a few interviews for some sites, which go more into the details, and will post here when they’re done.

EDIT: feel free to comment here on anything or email me at joel at browserless dot io

Website builder

I created a SaaS website builder for a small niche market. I’ve been running it for about 8 years. I gross a bit over $14,000 per month with about $500 in expenses for servers and third-party APIs. I work 1-2 hours per week answering customer support emails. Basically, I automated away my old job as a web designer 🙂

The smartest decision I made was targeting a small niche market that larger businesses wouldn’t bother with. I often get kind emails from customers thanking me for helping their industry. I kept things simple, didn’t add features unless I really believed customers needed them, and didn’t try to generalize the solution. I think those are the main reasons why the product worked.

By far the hardest part was/is marketing. I’m still bad at it. I’ve tried may things. Most failed or were too hard to sustain. Some succeeded, like Facebook ads, but those successes were often hard to recreate. At this point it’s mostly word of mouth.

Working alone can be psychologically challenging. When I have a problem, there’s no one to help because no one else knows how the platform works. With no one to bounce ideas off of, it’s easy to get stuck in a rut going round and round the same set of possible solutions. And I really have to monitor myself to ensure that I don’t get too isolated. This was an issue in the early years, but now I have a routine that gets me up and out and into the world every day. I would strongly advise anyone considering the solo route to carefully consider the social and mental health aspects of working alone.

I feel very grateful to my former self for doing the hard work that pays my bills today. And I’m tremendously grateful for open source tools and resources like Stack Overflow without which I would never have made it this far alone.

meme tshirt

I ran a Shopify site selling meme shirts for 3 years.

You might recognize classics such as “Legalize 4Loko 2020” and “BREAD” as featured in Elle magazine.

All on-demand printing. Order goes through Shopify’s API to the supply center, order gets fulfilled, shipped. No inventory. Kinda pricey, but zero maintenance. Set and forget.

Find the most extremely dank and niche memes possible so you hit the little nugget inside of someone’s brain that makes them want to spend $15-30 on a t-shirt.

A good print would net me somewhere like 300 orders a month. A sweatshirt could go for $50-60. You have options.

ML golf predict

I made https://www.golfforecast.co.uk – an ML algorithm to predict golf.

After 5 years it’s making enough from subscriptions for me to live off (3K gbp/mo). The algorithm is always a work in progress but it’s seeing consistent returns now so I’m making money from that too 🙂 plus it makes golf a lot more entertaining.

IPINFO.IO

I started https://ipinfo.io as a side project, and then ran it fulltime as a one-person SaaS app for over a year. We’re now a team of 8, profitable, and growing quickly. We’re still 100% bootstrapped, and I have zero plans to raise any outside funding.

We started with a simple IP geolocation API, which now handles over 20 billion API requests per month. We’ve added new data to that service, such as IP type classification (hosting, isp, or business, and soon education too), IP to company, and carrier detection. And we’ve also launched some other products, like hosted domain API (all domains hosted on an IP, sometimes called reverse IP), IP ranges belonging to an organization, and an ASN API. We’ve got a lot in the pipeline too, including some domain related offerings (see https://host.io for an early preview).

So it’s definitely possible 🙂 What sort of SaaS product are you thinking of launching? Would be happy to chat! Shoot me an email at ben@ipinfo.io

NANAGRAM

I’m working on NanaGram (https://nanagram.co) solo and bootstrapped. Although I’m not making a full-time income yet, it’s generating a profit. It’s mostly automated.

NanaGram is the 3rd greatest generator of happiness and fulfillment in my life (after my wife and my dog). I get a constant stream of good vibes from customers, most recently voicemails from grandmothers! (https://nanagram.co/blog/feedback-by-vm)

Good luck 🙂

PhantomJSCloud

I run https://PhantomJsCloud.com
I started it as a free MVP about 2 years ago while in Thailand, and given that I was attracting a slow but steady stream of users I decided to build out a commercial v1 from it.

The freemium SaaS went live in March and it’s growing monthly. If I still lived in Thailand I would consider it very successful, but I am in the Seattle area now so it’s ramen profitable.

The biggest surprise I got was how slow organic growth takes. Every month I gain more users + MRR but discovery seems to be the biggest problem. I tried Google Adwords in June but Google decided to cost me upwards of $5/click for basic keyword targeting so gave that up. I tried Adwords again in November and now google thinks I’m more relevant, so I pay starting at $0.20/click for the same keywords that cost $5/click 6 months previous. I am currently doing experiments to see if the acquisition cost justifies that spend.

From a effort perspective, the SaaS api+backend itself was about 50% of the effort. The subscription service + user dashboard was another 50%.

From a skills perspective, I think doing a SaaS as a solo founder is only practical if you have extremely broad skillsets: Business management, UX, full-stack webdev, devops, sales, marketing, support. Thankfully I have some experience in all those (except sales) so I was able to either do or fake everything required. If you don’t have all those skills, you are going to be increasingly reliant on luck, which isn’t a winning strategy.

I solicit users to email whenever they have a question/comment/issue and reply to everything. Overall I think I have provided email support to aprox 50% of my paying customers, and maybe half of the support was provided before they decided to pay, so it is very important 🙂

it’s actually a really great way to understand your customer’s needs, and your products actual (in the eyes of the user) deficiencies. I also use uservoice to help the highly-desired features/requests to “bubble up” but if a customer asks for something and it’s an easy enhancement I go ahead and implement it. Likewise if the same problem is annoying a bunch of people, I need to either document a workaround or make it easier.

Yes, “inbound marketing” (a blog) is probably the biggest accelerator to growth I can (and should) do. I’m holding off for now though, as I need to make the product more friendly to business users first. Right now PhantomJsCloud is focused on developers, so I need to make some non-dev friendly tooling first. That’s my excuse at least.
Regarding StackOverflow, yes, that’s actually how I validated the free MVP (answering SO questions and if my product might be beneficial, providing a link to my product) but generally those traffic sources don’t seem to scale very well past MVP validation. I haven’t tried Quora though, I will add that to my todo list 🙂

SingalBox

I’m running https://SignalBox.ai alone, I wrote all of the software and am working on partnering and sales right now.
Previously I have 2 other startups, one was media monitoring and one was forex.

The media monitoring is B2B only. The forex trading is automated and run from my home research cluster.

Both are generating enough revenue to live off (media monitoring 120k forex, 60-80k)

I guess they fit the definition of solo founder and online, but they have no public facing websites (except SignalBox)

EDIT: I also run a slack group for Solo Founders, If you would like an invite, please email me

  • Sales are a big struggle to me. Where did you find this partnerships?

Network. Go to the meetups.
Don’t rely on serendipity, we can do better than that. Use your programming skills.

Pull the meetup list, get all of their twitter profiles, search everyones last 1000 tweets for topics you are interested in. Pull all of their code on github. Push it through the profiler and find the talent.

Mirror github if you have to. Pull the whole darn thing, it’s only a couple of hundred gigs (if you dont pull the code) Profile everyone based on their stars, contributions, watchers and pull requests.

How many other meetups do they go to? What’s their history like on other forums?

Put the pics of these people on your phone, and then go and find them at the meetup. Pull their customer lists / testimonials and any other publicly available data.

Look at their company DNS records. Pull their company filings if they’re available. Know their revenue, know their customers. Who’s making the decisions at this company? Who is signing the cheques?

Scientia potentia est

dropshipping guitars on shopify

I run an ecommerce store from Shopify which fulfills the orders by drop-shipping through AliExpress.
This is definitely doable for one person, and it isn’t technically challenging for a software developer–but the hardest part (at least for me) is marketing, creating content, advertising, and so on.

Actually running a Shopify store and fulfilling by drop-shipping is simple. I would definitely recommend that as a good place to start, one person can do it.

There are a few good ways, but it really helps if you know the products well. For me, my site sells guitar parts and DIY kits. And I’ve been playing guitar since I was about 10 years old, so that helps a ton.
I had a few other stores before this that didn’t sell well at all, and I have to say that’s because I just didn’t know the products, or what the end users really wanted/needed/cared about.

Great ways to pick products: – Terapeak (http://www.terapeak.com/), but this is paid – eBay completed listings – Or most simple (and what I use) — once you know your products, search AliExpress and sort by “best-selling”. That’s my go-to.

Feel free to check my store for ideas (or if you want to buy something!). URL is: http://modshop.guitars/

pinpoard

I run Pinboard, $257K in gross revenue for 2016. A ton of money for one person, not quite enough for two people.

Do you have a writeup on your marketing?

My marketing is, I spend all my time talking smack on Twitter.

bugmuncher

I run BugMuncher (https://www.bugmuncher.com), it started as a side-project 5 years ago, then in September 2015 I packed in freelancing to focus on BugMuncher full time.

As of November 2016 BugMuncher reached profitability – ie: it’s my sole source of income, and covers all of my living expenses.

price comparison

I run https://www.fortsu.es (also https://www.fortsu.co.uk, https://www.fortsu.de and https://www.fortsu.com) a price comparison website for running shoes. Original one is focused on spanish market while expanding into interesting ones.

It started as side project some years ago when I wanted to buy running shoes online and it has been improved over the time. To-Do list never ends 😉

At the beginning it was basically word of mouth and niche related forums on the internet.
Then I started reading about SEO and advertising. Organic search more or less work but I got almost no traffic from a couple of banners on related pages during few months. I didn’t try advertising networks like AdWords.

I don’t see big brands as my competition. I have partnered with some but I don’t think they sell much on the internet (typically higher price tags) compared to full equipped city centre stores.

iOS app

I started selling macOS (and now iOS) software on my own website back in 2007. https://clickontyler.com My original goal was to earn enough money to refinish the hardwood floors in my house. Since then, however, it’s taken on a life of its own and become a suite of three main products. It enables me to live comfortably in the Nashville suburbs.

webhosting reviews

1 man startup – http://reviewsignal.com/webhosting/compare I do web hosting reviews. Not the scummy pay-for-placement stuff you see, but an actual review site. It tracks what people are saying about hosting companies on Twitter and publishes the results.
The story is told a bit here http://techcrunch.com/2012/09/25/web-hosting-reviews-are-a-c… I was just tired after 10 years of still relying exclusively on my experience and the experiences of people I knew. Figured there must be a better way and I had been working with Twitter data for thesis and saw this opportunity.

selling online

I started selling online, total sales so far over $300k. Multiple sources, some retail, some wholesale.
What I’ve learned:

  1. Not all rules matter. A large part of my business is stretching certain rules, either from the marketplace, or from the source (e.g. a store that doesn’t allow resale). That said, you can’t get away with breaking rules unless you have a very good understanding of why the rule exists, who’s motivated to uphold it, and generally what the risks are. Don’t screw over customers.

  2. There’s a lot more to be made by taking risks than there is to be lost. I’ve easily lost over $1k multiple times in various ways, but when I “win” it’s to the tune of 10 or 30 times that. Take smart risks, only where the realistic upside justifies it.

  3. Be willing to pay for information. There are courses out there in almost any topic. Personally I’ve largely carved my own path and paid very little , but I’d still recommend courses for others. Also read a lot of whatever free information is out there, and network with people who have more experience.

  4. Don’t do too many things at once. It will kill you. I’ve been full time in college and it’s extremely tough to balance everything. Delegate as soon as you can afford to, anything others can do that doesn’t take a lot of brains pay people to do.

  5. Don’t be afraid to scale, but do it slowly. My first purchase of over 10k was 6 months after I started, iirc.

(Several of these are probably specific to this kind of business, may not be generally applicable. Startups have a much different road where profitability isn’t the most important at first.)

selling open source software to government

I was working for Automattic after an acqui-hire thing. After a year there, I found that I missed working in security. I found a full-scope penetration testing gig three blocks from my apartment.

In my spare time, I started to tinker with a few ideas and released them as an open source project. Said project saw a lot of interest within the hacker community very quickly. I didn’t expect this. Folks formed an opinion on it pretty quickly. Some people hate it. Others love it. Of those who know it, very few are in-between.

I left my pen testing job with a decent amount of money saved up. I didn’t know exactly what I would go and do afterwards. I spent some time tinkering with Android, just for giggles.

I was very reluctant to start a business that used my “successful?” open source project. Partially because it leverages another open source project owned by another company.

I was at a conference in 2011 and someone from a US government agency asked if I was selling anything. I said no. He said that was too bad, because he had end of year money, and he liked my open source stuff. It was then that I decided to look at expanding my open source kit into a commercial product.

April will mark the two year anniversary of my first customer. My customers are well known organizations and they trust my software to assess how well they protect their networks. I’m constantly in awe of this.

website counter

https://www.improvely.com and https://www.w3counter.com

Five figures a month, just me, I’ve written about my solo business a couple times in other Ask HN threads. Ten years ago (almost to the day), in my college dorm, I was looking at the Webalizer web stats report my web host provided for my blog, and thought “I could do something much cooler than this”. So I did. I had built a few educational sites and threw some ads on them for a couple years before that, but W3Counter was the first service I actually charged a subscription for, and now I make a living building and selling this stuff.

vintage computer hardware

I don’t know exactly how you define “successful online business,” but I am currently a university student making $500 – $2000 a month at about 5 to 10 hours a week.
Basically, there is a market for vintage computer hardware, so I post some adds offering to take away old office items they can’t just throw away. Such as old keyboards, terminals, etc. and they pay me a nominal fee ($1 – $5 per item depending) to rid them of their “trash”. I then resell those items after cleaning them up a bit for extremely high profit margins $35 – $120 for 20 minutes of work (since I was payed to take away the trash).

One of the things I did was sold Model M keyboards which I made USB compatible: http://austingwalters.com/keyboards/

Another way I make money is by tutoring or helping out with programming, I use to help out local people, but I have since switched over to Google Helpouts. Usually, it’s just explaining some algorithms and writing some C code. Pretty easy, no real upkeep, and I can set what ever hours I want.

pingrow

Just launched Pinegrow Web Designer (http://pinegrow.com) two months ago. The company is actually run by my wife and me, but I do all the work with Pinegrow while she is taking care of our other projects.
Pinegrow has been paying most of our bills since launch and I have a lot of expansions in the pipeline: full support for Foundation alongside Bootstrap, developer edition that’ll work with templates, a similar app for designing emails…

cramfighter

I run a small business called Cram Fighter (http://cramfighter.com) that is targeted at students (mostly medical) that are preparing for standardized exams. I got the idea after watching my wife preparing for her board exams and it seemed like a perfect little project to learn iOS programming. Initially my goal was to do earn maybe $5k annually, but now I’m on track to surpass my salary as senior developer by next year.
You’ll find a lot of one-person businesses targeting tiny, but profitable, niches like mine. What’s great about it is that often when you find a tiny opportunity, it opens up a lot of other problems that need solving that you would never find otherwise. It’s also a great way to learn the skills of running a business in a relatively stress-free way (at least compared to running a startup).

The only downside is if you’re anything like me, you’ll get antsy working on small projects and yearn to tackle bigger, more ambitious problems. Sometimes 1-person companies have the potential for turning into a company with startup-like growth, sometimes not. I’m still trying to figure out how far I can take my company.

office snapshots

I run http://officesnapshots.com which publishes photos of office design projects from around the world.
I started it in 2007 as a gin side project to teaching history. I’m no longer teaching and it is the majority of my income.

laptop battery meter

I sell a laptop battery meter (http://batterybarpro.com). It’s not income replacing; it makes about $1,000 per month, but it’s been crucial in saving enough for down payments one two houses.
I’ve tried to get the revenue numbers up, but I’ve never been able to break a $2,000 month.

robots everywhere

http://www.robots-everywhere.com I used to employ two people, but I automated them away. I am successful in the sense that I have clear title to my home at age 33, if that counts.

excel version control

I run https://www.spreadgit.com, a hosted version control system for Excel. Doing this solo and full time. It’s been a hell of a ride so far but I love it.

write a book

I wrote a book[1] that generates about $2k of revenue per month. Not quite your definition of success, but it’s given me a taste. I’m now in the beta testing process for my next thing[2].

smart shooter

I develop and sell Smart Shooter.
http://kuvacode.com

Its a traditional desktop app (windows, mac), but only sold online via our own website or the mac app store. I created it about 4 years ago, and work on it solely in my spare time. In fact I’m employed full time at a major tech company but this I keep separate.

To claim its profitable is a bit misleading, because of cause the major cost in developing such software is my own time. I’ve incorporated as a limited company here in Finland but do not pay myself a salary, so the only costs to the business are web hosting and occasional hardware purchases (computers, cameras).

I started this as a project for personal interest; at the time I was working as a software engineer developing financial trading software. Smart Shooter was a good way to develop something that covered both my interests in graphics programming and digital photography, to alleviate the borebom from my day job.

So for me its been successful, its still an pleasureable hobby, allows me an excuse to play around with the latest cameras, and brings in some pocket money. It doesn’t generate enough revenue that I could quit my main job, but the possibilities could be there if situations change.

payment gateway

I am running a complete payment gateway that supports VISA and MasterCard and mobile payments by SMS.
The name of the service is: https://www.bizify.me

For an introduction to the service: https://www.bizify.me/hacker-news/

asterisk consulting

I sell Asterisk reporting sw for win @samreports.com. It makes about $1000 a month in revenues. I also work as iOS developer for the man. I have a free iOS app on the AppStore (HRTecaj), soon to be commercial, when I add ATMs. I was Asterisk integrator, and learned a lot about the system, made software to present call reports in customisable and pleasant way. SAMReports has been selling, consistently, for 4 years. I made a few updates, but now I’m working on a major update.

sell books

I run http://lsathacks.com, and have a related book series
I sell e-books on my site and through affiliates, and sell print books on amazon. All told I make around $3,000 a month in passive revenues. I also make $4000-$5000 more in tutoring revenues.

However, the site is fairly new (I just sold the books through affiliates/print previously). As I grow the site I expect I may be able to get over $10,000 per month passive.

The LSAT is an admission exam for American and Canadian law schools. My materials/lessons teach people how to do better on it.

radio community

I own and operate http://www.radioreference.com and http://www.broadcastify.com. I do all the development, business management, and support.
I have a team of community volunteers that do a lot of day to day moderation and member management.

I got started simply building a set of community resources for the radio communications and hobbyist market.

We’re very profitable and these businesses provide the majority of my family’s income.

electricain calculator pro

I developed the Electrician Calculator Pro, a National Electrical Code compliant calculator for engineers, electricians, lighting designers, etc:
http://www.electriciancalculator.com

I first created the Android version about 3 years ago, then the iOS version about 1 year ago. It currently makes just enough to cover some bills, although I believe it has a greater potential. I’m currently looking for ways to make this a recurring revenue stream instead of a one time payment gig.

vlad studio – wallpapers

I’ve been running http://www.vladstudio.com (where I publish my wallpapers and other stuff) for several years, and for quite some time, it was my primary source of income. Unusual, because my premium accounts are not really a “product”, but just a way to “like” or “donate”.

m3u editor

Running a profitable SAAS has been my dream from the moment I wrote my first line of code.
Here on HN and IndieHackers I’ve always looked up to the people who pay their bills with recurring revenue from their tools.

I’ve tried, many times, to do the same, without much success. A couple of rather successful HN pitches, but none of my projects ever even paid me a beer (let alone my rent).

Until this month! Last year I built myself and my girlfriend a tool. Even though I did build it for other people to use it, I had never thought someone actually would. Long story short, half a year later I provide my service to more than 5000 (fully organic) users.

This month is the first month in which revenue is high enough to pay my rent with it. Disclaimer: I share my rent with my girlfriend, but it does sound cool to say.

Looking back at the proces, it does match with a lot of other success stories I read over the years in the HN community. The main lesson which I can now confirm: build something that scratches your own itch.

So… Thanks you guys, for keeping me motivated and inspired.

Gardening app

My only successful product to this date is an app I built because my wife asked me to. It is in an non-technical domain which I knew nothing about. I thought it was rather non-promising, but, since it was a pet-peeve of hers, I gave it a try.

It was an awesome (and very bonding) experience – she explained me the problem(s), and I tried to simplify and structure it (didn’t think gardening could be so complicated). Both of us were in their respective element, and from back and forth an app was forged.

Ref

  1. https://news.ycombinator.com/item?id=21332072
  2. https://news.ycombinator.com/item?id=19701783
  3. https://news.ycombinator.com/item?id=22098425

Baelish: An Introspection II

完全自己一个人做了一个系统,在这个过程中有不少的收获和教训,趁还没有忘记赶快记下来。

过早优化

开始设想的服务太大了,想做一个超牛逼的大而全的东西。所以在一开始的时候就拆成了好多的repo,
每个模块都拆成了不同的微服务,中间使用 RPC 调用,并且每次打成好多不同的镜像,部署的时候也很麻烦。其实这里的问题在于不明白其中的逻辑,而是生搬硬套架构,犹如东施效颦。

分库是一个很大的问题, 最开始的时候总是想着把库拆出来做一个基础组建库,然后拆出来了好多库,甚至把代理和抽取都单独出库来,实际上没有必要保持代码的纯洁性,这是我常犯的一个错误。这方面造成了镜像打包都很麻烦,而且要在各种库之间切来切去,依赖也要重复安装好多次。当某一个组件需要被其他人复用的时候再拆出来也不迟,像是 npm 那样拆得太散也不好。

即使在拆成不同仓库比较好的时候,也没必要打成好多的镜像,如果一个人维护多个镜像的话,很容易就会忘记每个镜像的每个版本到底更新了什么。

另一个问题就是典型的“过早优化”。早期我把很多只是保存状态,做增删改查的部分都抽象成了单独的服务,~~实际上封装到一个接口中,读取 redis 就很好~~,在做好监控的前提下等到 redis 扛不住的再优化也不迟。~~实际上在项目的早期,做一个单体应用就很好,需要抽出来的地方抽出来,能不抽出来尽量不抽出来。~~这里的问题其实还是在于没有理解逻辑,生搬硬套架构。看过了一千篇文章,却还是做不好一个架构。

强行使用刚学会的技术

这点主要体现在 Frontier 和后来的 Scheduler 上面。在定向爬虫上,Frontier 本身就不是必须的,根本没必要多此一举。~~Scheduler 也没有必要使用 token bucket 算法,使用堆是最好的。~~token bucket 或者 leaky bucket 还是必须的。这里也考虑过多,单点部署其实就够了。单 master 多 slave 虽然看起来会有单点故障,但是确实是最简单高效的模式。

选型

选型上出的问题主要在于消息队列,日志服务和容器平台。~~监控上的选型倒是正确的。~~监控的选型完全是错误的,Prometheus 才是唯一正解。这里的问题还是在于东拼西凑概念,没有完整的理论体系。

消息队列

~~最开始混淆了缓存和队列的区别,对于爬虫的不同任务来说,需要分别放在不同的缓存,而不是直接
放到同一个队列,这样是无法调度的。~~这里在于对于消息队列的理解不够深入。

在队列的选型上,首先尝试了 rabbitmq,然而 rabbitmq 并没有一个很好的 Python 客户端,官方钦定的客户端叫做 pika,抽象层级不够,仅仅提供了非常原始的包装,而且 rabbitmq 本身的稳定性非常差,经常莫名其妙挂掉,而且没有任何一场日志,在 rabbitmq 上至少坑了半个月。

然后尝试了 redis stream,因为我本身对 kafka 的概念比较熟悉,而且redis 本身也是比较稳定的。但是还是感觉被坑的不浅。当时 redis stream 刚刚出来,Python 的客户端还没有支持这个特性,导致一些代码还需要自己解析响应,在这上面画的时间不少不说,做出来的还不太稳定。redis stream 虽然是借鉴了 kafka 的概念,但是还是有很多地方不同的,而且有一些东西也没有明确,这就导致实现起来各种小 bug 满天飞。最重要的一点是,redis 想实现 kafka 这个 API 本质上就是南辕北辙了,kafka 之所以可以做到 consumer group 能够重放这个功能,就是因为在硬盘上有比较好的消息堆积能力,而 redis 作为一个内存数据库,注定做不到好的消息堆积能力。实际上单纯模仿 kafka的 API 是没有意义的。

现在使用的是 celery,然而还是有问题。celery 提供的并发模型太少,只有 prefork 和 gevent勉强可以用,然而 gevent 又回导致严重的内存泄漏问题,而爬虫是需要大量的并发请求的,在这种情况下,celery 就成了一个瓶颈。另外一个问题是对于失败任务的 retry 机制在 celery 中也很不明确,celery 本身封装了不少层,导致捕获出异常来成了一个很大的问题,而我们又不能设置永久重试,最终结果就是有一些任务在重拾到最大次数之后被永久丢弃了。这里也是和爬虫这个业务紧密相关的,毕竟下载的失败率是很高的。

最终决定还是使用 kafka。最开始的时候,实际上还是觉得 kafka 太难搭建了,用起来的话太浪费时间了。但是实际上最开始可能用 redis 就可以,等到性能出问题了再去换到 kafka 上。使用kafka 的话,上面两个问题都可以得到解决,自己编写客户端可以任意选择并发模型,而且对于抓取失败的链接可以自定义重试策略。

日志服务

当部署多个实例的时候,实际上日志的收集是非常关键的一步,可以说必须在横向扩展之前完成,而之前忽略了这一点。在 debug 的过程中,日志非常重要,日志的缺失也就拖累了开发进度。

实际上这里的根本问题还是在于东拼西凑架构,而不是有一个统一的设计理念。

另外,阿里云的日志服务也是一个大坑,连基本的全文搜索都做不到,搞一些花里胡哨的东西也不知道有啥卵用。plain old grep 才是排查问题的利器啊。现在看来可能还是需要 loki + kafka 来做一下。

关于业务性日志和程序性日志的区别,会单独再写文章讨论。

容器平台

最开始的时候没有多想,直接使用 ansible 上线部署,这样的不好是在同一台机器上只能部署一个实例。但是爬虫需要扩展的时候,需要在一台机器上部署多个实例,这时候就需要容器的编排平台了,另外就是日志也需要收集。首先考虑了 kubernetes,但是还是觉得太复杂了,概念有点多,感觉用不然,然后就选择了 nomad,结果证明又是一个大坑。nomad 的编排经常无法看到运行中的容器,迷之找不到 container。nomad 的日志收集也有问题,没有好的解决方案。最重要的问题还是,nomad 的生态太小众了,遇到问题无法查找到社区提供的解决方案。最终还是上了 kubernetes,其实过了入门的坎,再看 k8s 还是很简单的。另外一点就是 k8s 通过 cluster IP 这个功能很好地解决了服务发现的问题,完全不用再去手工注册服务,代码量节省了不少,也省去了维护 consul 的工作。

RPC

在 RPC 框架的选择上,主要纠结在 thrfit 和 gRPC 之间,虽然花了一些时间学习和比较两个框架,但是最终感觉还是值得的。不过也还是使用地太早了,在最开始的时候完全没有使用 RPC 的必要性。

监控

~~监控使用了 influxdb 现在看来是一个比较正确的选择,但是没能及早发现 statsd 还是走了一些弯路,不过学习了下时序数据库的相关东西也算没有浪费时间吧。~~

influxdb 和 statsd 实际上是两个大坑。influxdb 好多关于时序性数据的特点和要求没有在文档中提及,需要自己试错才知道。而 statsd 基本完全没考虑标签,导致聚合结果完全是错的。

数据库

数据库的选择和使用上其实暴露了我对于 mysql 性能的无知了。最开始没有考虑到连接数问题,导致 MySQL 被锁死。之后又没有如何批量插入的问题,导致数据插入的丢失问题也很严重。当然这个问题也不完全是我的个人问题,把半结构化的数据存入 MySQL 本来就是一个比较奇葩的选择。

总体来看,主要原因就在于两个:

  1. 知识不足,确实需要学习
  2. 选型过于小众,坑太多

其实核心还是没有自己的逻辑,东拼西凑。这一点在读完 Facebook 员工的一篇文章后有了极大改善。

业务逻辑

从业务逻辑上来说,也有不少可以优化的地方。

规则变动

从我自身而言,对于整个业务逻辑的梳理不是很明确,排期预计也不准确。最终导致的结果就是,爬虫要执行的规则变来变去,导致做了好多次返工。比如抽取的规则,最开始定义了页面的字段,最后才统一到必须是行的字段上。最开始觉得直接写 yaml 就可以了,最终还是回到做了一个 GUI 上。

混乱管理

CXO 们除了FBJ有做通用爬虫的想法之外,其他人还停留在线性增长的思路上。只是关心短线结果,不考虑长远的规划,对于爬虫的开发也产生了一些不良影响。实际上,作为科技公司,不论是否直接参与代码的编写,对于其中的好奇心和敬畏感是都要有的,如果只是关心结果,很难做到高效。

CEO 最大的问题在于在公司呆的时间太短,对于公司发生的事情掌控力太差,频繁见客户不一定有用,耐心打磨产品才是正途。

  1. 心不齐,没有得到足够的授权来做爬虫平台这个事情。好多方案不一定哪个更好,但是必须定下来一个,好多无意义的争论是没有意思的。

  2. 其他人能力不行,这个真带不动,kafka 不知道,grpc 也不知道,metrics 也不知道。根源还是上一个问题,人心不齐,这种问题竟然还需要说服他们,谁不会就赶紧学就好了。

对于 Baelish 的搭建,犯得一个错误就是问题考虑太复杂了。看了不少创业的书,心里很明白要拿出一个 MVP 来,但是实际上却做不到,总是想着要做一个大而全的东西,过早优化太多了。 实际上就应该单机部署就行了,直接 gevent 开一千个线程,然后就可以跑起来,这样的话,即使 20s 一个的请求,并发也可以在 50 了。单机部署可能还是不行,但是没必要用 Kafka,主要有两个原因:

  1. 最开始时候的量用不到 Kafka,等到规模大了再用也无所谓
  2. 团队不熟悉 Kafka,那么就需要时间来教他们用,这时候就浪费时间和感情了。

同事水平过低

很简单的东西,没有人能明白我的思路,反复说了,他们还是按照低效的方法来做,实际上最终还是要返工。

比如说对于监控问题,很明显很清晰的一个问题,利用现有工具也可以做得很好,非要自己写一通,最后的结果也是很差的。

对于缓存的问题,有很成熟的思路可以直接使用,但是由于大家水平问题,竟然理解不了,也抽象不到这个层级,最终竟然重抽问题还是没有解决。

过于倚重阿里云和其他第三方服务,缺乏自研和探索精神。实际上诸如灵犀和 jumpserver 之类的服务是非常难用的,而开源的工具可以做到很好,把时间花在这些 trivial 的东西上最终产出也不是很好。阿里云的日志服务,k8s 服务,es 服务等等都不是非常地好用,甚至可以说非常难用了。而整体研发的思路,尤其是F很信任的CD方面则是能用阿里云尽量用阿里云,没有一点探索精神。

战略的迷失

盲目追求数据的大而全,但是又不能保证数据质量,没有做精做细某一块。举个例子来说:

  1. 电商数据。最基础的抓取问题没有解决,或者说这个数据根本就是不可能获得的,阿里的风控团队是吃素的吗?更何况其中还有法律风险问题。

  2. 招投标数据。这里面可以做的点非常非常多。而且作为一手的数据来源,政府网站永远不可能屏蔽爬虫。而去爬二手数据来源,需要繁杂的反爬措施。

后端数据清洗方面,整个公司对于数据的治理还停留在线性叠加的水平上,而不是打造平台,从而能够横向拓展。比如说对于研报、新闻、招投标公告需要一套底层的文章库,而现在每一套的处理流程都是单独的,而且效率很低,没有人有整合的想法。相比之下,头条很早就有打造推荐引擎的想法。

抓取上,更是“脚本小子”的思路,每个项目都单独编写爬虫,主要精力竟然是放在了不同站点的反爬策略上,这一点是非常匪夷所思的。出了重点抓取的电商数据外,不应该有任何网站存在很复杂的反爬逻辑才对。另外就是单独编写的爬虫可维护性太差,其实就相当于内包给某个员工,业务的风险性太大。甚至经常出现某个人的脚本由于写得太差,把整个集群打挂的情形。

总结

要有自己的逻辑。科技公司还是要技术驱动的,那些“非技术驱动论”的鼓吹者可以休矣!

彭博到底是做什么生意的?

一句话:卖彭博终端机

为什么大家要买彭博终端机呢?界面那么老土

I think most of your questions can be answered by realizing that Bloomberg was founded in 1981, and they basically got a monopoly in financial data provision because there were no other options in 1981. That is why they have a custom monitor & keyboard: in the days before the IBM PC, everyone had a custom monitor & keyboard, because these things were not standardized. Bloomberg was a technologist & businessman before he was a politician; his business success gave him the money to run for office, his office doesn’t force people to pay for Bloomberg.

The reason they’re still a monopoly is because knowing how to navigate a Bloomberg is a critical skill for most finance professionals, and now that they have that skillset, they can be very productive moving around in it. A different (better?) UI would require they re-learn everything, which is not going to happen. And when financial professionals are making half a million a year, paying $24k/year for a terminal so that they can be productive isn’t a bad investment.
(Source: have a couple friends at Bloomberg. One is in their UI department, and keeps having his proposals for better UIs shot down for business reasons. Also married a financial professional who had to use a Bloomberg in her days as a bond trader.)

The best way to think about the Bloomberg terminal is a web browser that connects you to a private network. (Bloomberg actually is the largest known private network.) Once connected, you have access to thousands of “web apps” – which Bloomberg users call “functions”. Instead of a URL, you use a short 2 to 5 letter mnemonic code for each function, such as “MSG” for email, or “TOP” for top news. These different functions provide all sorts of various functionality – most of them are of course related to financial information. Functions like “CDSW” are for analyzing credit default swaps, “SDLC” gives you supply chain data for different companies, other functions analyze or curate Twitter, others correlate news events with historical stock data, etc. There are also many non-financial functions as well that reflect the “social network” aspect of the Bloomberg terminal, such as “POSH” which is basically a high-end Craigs list, or “DINE” which is a high-end Yelp.
All-in-all, the Bloomberg Terminal is like a private Internet for financial professionals.

核心的依赖可能是 bloomberg chat,相当于金融圈的社交网络。

“I think Facebook is the best comparison,” Ayzerov says. “If Facebook had only one fourth of your friends, you wouldn’t use it. The advantage of Bloomberg is that every financial person has it.””

Wow, great comments about Bloomberg. It makes me wonder, is there similar system for Cryptocoins traders?

Bloomberg would be very hard to dethrone. It’s key selling point is all of the data they have access to, which takes forever to setup integration with all of those providers. They continually expand data sources as well so it’s not like they are asleep at the wheel.
Finally, Bloomberg chat has strong network effects so even if you had all of the same data, many traders still wouldn’t switch to you because they can’t communicate with others still on Bloomberg.

  1. It is a all-in-one news source. There are a lot of features that allow you to monitor the news from many different sources in real time.
  2. It is a social network. The built-in chat and email service is really basic. But, just about every one working in Finance is on it, with their contact details and resumes. As a trader, you can legally close financial transactions on the Bloomberg chat, as one would over the phone.
  3. It is a data sharing platform. Banks and other market participants contribute to Bloomberg data by sending information that is normally not visible in the market. For instance FX volatilities are quoted by banks on bloomberg in real time. This information is only available in few places.
  4. It is an API that allows its users to use its data for custom analytics.
  5. It is an execution platform, where you can book trades, follow their values and risk when the market moves, etc.
  6. It is open to 3rd parties: some banks and other data vendors have their own pages on bloomberg (which I never had access to).
  7. It has many many other stuffs. There is a restaurant review system. There is a classified section. There are things to monitor the weather. It has videos, maps, it’s just huge.

知乎推广的一些小技巧

转载自:姑婆那些事儿

文章打开率越来越低,从 0 起步的公众号往往是运营最难跨越的鸿沟。刚起步的微信公众号,没人关注怎么办?怎样获得初始的 1000 个粉丝?”

由于微信的闭环特性,所以大量粉丝需要从外部渠道导入。粉丝渠道来源并不是单一的,如果我在其他自媒体平台同时采用一定策略吸引粉丝。这样算下来假定半年目标是吸引 1 万粉丝,每天吸引 55 个就可以了,这 55 个粉丝的主要来源是知乎、今日头条、朋友圈,每个渠道每天能吸引 18 就足够了。

而知乎作为高质量的流量聚集地是非常好的引流选择,目前很多人对知乎的流量挖掘并不是很好,下面有一些基本的方法分享给大家。

日常运营

4、一个高赞的答案回答字数控制在 800-1500 字左右,回答形式多采用图文式回复、数据分析式回复、引用佐证式回复,知乎用户重逻辑轻感情。

知乎用户尤其排斥软文广告,内容上干货价值+亲身经历+幽默风趣调侃语气+最后一段神来之笔+逻辑推理小清新+分段分点论述最能得到他们的青睐。

这样的回复才能获取点赞、收藏、评论,也容易把你推到话题回复第一名的位置。这时你就获得了他们的认可,粉丝关注,自然通过你的联系方式联系你。

5、回答问题时一定要挑选知乎热门话题,这些话题流量大关注人数多,如果只回答一些冷门话题那么很长一段时间内都不会有人看到。

回答内容一定要有争议有价值,即使抖机灵也要抖出新高度。回答下方的评论区也要充分利用,和粉丝保持高互动。

6、同样的回答内容尽量不要用多次,如果被系统检测到很容易受到处罚,首次违规封禁一天,或七天,甚至清除屏蔽用户的数据所有回答。可以在答案中留下链接引导用户查看。

7、回答中不要留太显眼的联系方式或者公众号二维码,知乎对大 V 留联系方式是默许的,但对普通用户或者小 V 被发现或者被举报就会处以禁言。

8、当你在知乎已经有了一定量的回答量,粉丝也有了一些积累。可以做初步的导流准备了。这时候修改自己的帐号资料,在上面增加自己的联系方式,数量不要多避免营销的嫌疑。

9、知乎系统有个特点,一天当中如果回答数量超过十个或者长期回答数量过多,系统会提示操作频繁。为了避免不必要的麻烦一天最佳回答数量应该控制在 5-7 之间。

10、知乎用户的活跃时间段在中午 12:00-14:00 及晚上 19:00-23:00,一般在此时间段内回答问题违规被处罚的情况会很少发生。

微信开发笔记

可以使用微信的测试号学习如何开发
http://mp.weixin.qq.com/debug/cgi-bin/sandbox?t=sandbox/login

公众号对于消息的处理相当于使用了微信的服务器做转发代理, 发送到公众号的后端服务器, 而一旦进入网页就相当于直接同服务器通信了. 微信会使用 POST 发送消息到服务器

对于消息的处理有一个签名的过程, 这样后端服务器可以判断消息是否来自微信, 从而防止 API 被恶意滥用盗用.

所以这些繁杂的事情不如交个框架去处理

APPID/APPSECRET 相当于公众号的账号和密码, 通过这两个组合获取一个 accesstoken 用于平时访问, accesstoken 是有有效期的, 即使明文传送被泄露了也问题不大

问题是, 服务器需要记得去刷新这个 token, 所以这些东西应该交给框架最好了

微信开放了 JS SDK 可以使用图片语音地图等一系列的应用, 不错

常用的一些 meta 标签

  1.  
  2.  
  3.  
  4.  

iOS中浏览器直接访问站点时,navigator.standalone为false,从 主屏启动webapp 时,navigator.standalone为true
移动版本webkit 为 input元素提供了autocapitalize属性,通过指定autocapitalize=”off”来关闭键盘默认首字母大写
开发者指定 的 target属性就失效了,但是可以通过指定当前元素的-webkit-touch-callout样式属性为none来禁止iOS弹出这些按钮

同样为一个img标签指定-webkit-touch-callout为none也会禁止设备弹出列表按钮,这样用户就无法保存\复制你的图片了
指定文字标签的-webkit-user-select属性为none便可以禁止iOS用户选中文字

The Problem with Pocket

I started using Pocket about six years ago. Back then it’s a Firefox plugin named Read It Later. I saved about 1000+ articles to read-it-later. But until now, when I quit my job, I finally got some time to read those articles. Then I got this:

I thought that pocket’s server would retrive the article for me, and store the copy so that I can read it when ever I got time. It turns out that I was wrong, Pocket only fetches the article on the computer or phone, it only stores the url in the cloud. That’s too bad, a lot of my saved pages have gone 404ed.

给产品经理的代码课

常见误区

误区1:这个功能之前我们就有啊,为什么现在还需要时间开发?

现在有的功能在新的条件下不代表能够直接使用,可能需要彻底需要重新开发,可能包括但不限于以下几种情况:

  1. 之前的系统能支撑的并发量、连接数都太少,没法满足现在需求
  2. 之前的就是催着上线的,代码太trick了,只能临时应付测试一下效果,没法维护,现在如果这个需求明确了,那需要重新设计一个良好的架构

误区2:我不要全部结果,能不能先给我跑一小部分数据?

好多情况下是不能的。比如说,你需要1000万行的数据,程序员并不是一行一行地从数据源中拷贝复制数据出来;而是写好一个脚本,让计算机去一行一行地产生数据。所以多对于程序员来说,产生一万行数据和产生一千万行数据需要的工作量很可能是相同的。

对于一些需求分析或者其他阶段的简单的数据整合分析的工作,如果产品经理能够自己使用 SQL 从数据库或者 Hive 等处来拉取数据,那么往往比求程序员更快捷一些。甚至分析竞品等等一些简单的数据抓取工作,如果能够利用内部平台来做,其实也都并不难,当然这需要程序员先提供一个不错的平台。

当然,也有很多情况下,一小部分数据和全量数据的确差异很大。这种情况往往是因为数据的产生受到的限制比较多,跑大批量的数据需要重新涉及复杂的架构,这时候往往也需要考虑下是不是需要这么多的数据?

误区3:这个是线上问题,真的需要赶紧改一下

如果这个问题现在对用户造成了伤害,

题外话:我遇到的一些产品经理

春风化雨型

如果有问题她会来直接找你,比较大或者需要提前规划会拉相关人员开个会。如果有相同的问题(bug)两次或者以上,她会问你能不能教一下她,让她自己解决,或者初步判断一下,或者把问题分类梳理清楚,而不是丢给你算了。如果有时候好多次了,你没有及时响应她,她会提前和你沟通,问是不是精力不够,然后说如果需要申请更多资源她可以帮忙协调。

总之,产品经理是一个考验情商的工作,既要有创造性的思维,又要协调好各方面资源。但是现实中的好多产品经理太让人失望了,他们不是真的热爱创造产品的过程,而是因为懒得写代码、懒得搞技术然后选择了产品的道路。