最近又重读了一下 Boring Technology 系列文章和评论，得出了对于创业公司技术选型的一些想法。
If each tech is expensive, you should pick a few.
我们生活在一个创建公司的美妙年代，有那么多直接可用的工具和服务可以让我们解决时间和金钱 并提高生产力。从来没有像现在这样，一个小团队（甚至一个人）可以使用简单无聊的技术来做出 一点对世界有用的工具来。
大多数时候，构建和交付的最大障碍来自想得过多。如果这样怎么办，那样怎么办。天啊，你 根本不重要。每个人都很忙的。没人关心你和你创造的东西，直到你证明你值得别人的注意力。即使 你把第一次产品发布搞砸了，几乎不会有人注意到。Think big, start small, act fast. 使用 无聊的技术来做一些简单的东西（甚至很丑）, 只要你解决了实际问题。
每个工具都会带来收益(+)和维护成本(-)，如果 n 个小任务都选择最优工具，
总收益 = 收益 * n - 维护成本 * n
总收益 = 收益 * n - 维护成本 * k, (k << n)
Every time I spin up a new project, I try to answer the following question honestly:
Am I using this project as an excuse to learn some new technology, or am I trying to solve a problem?
Trying to learn some new technology? Awesome, I get to use one new thing. Since I already understand every other variable in my stack, I'll have a much easier time pinning down those 'unknown unknown' issues that invariably crop up over time.
Trying to solve a problem? I'm going to use what I already know. For web stuff, this'll be a super-boring, totally standard Rails web app that generates HTML (ugh, right? How last century), or maybe a JSON API if I'm trying to consume its output in a native app. For mobile stuff, this'll be an Objective-C iOS app.
Waffling about it and saying 'well, I am trying to solve a problem, and I think maybe a new whiz-bang technology is the best way to do it' is the simplest path to failing miserably. I've watched incredibly well-funded startups with smart people fail miserably at delivering a solution on-time because an engineer was able to convince the powers that be that a buzzword-laden architecture was the way to go.
You don't know what the 'right' solution is unless you understand the tools and technology you'll use to deliver that solution. Anything else is just cargo-culting.
The way I see it is that one should master their stack. If you work over and over again with the same stack you will know it well. You will be able to move mountains with it. But it takes years to arrive to that. It takes implementing multiple projects the same way over and over again.
This is 100% how we did things for the last 5 years. We used the exact same basic tools & APIs, but iterated on how we integrated them together by way of our code.
We took what most people would call a "toy" stack, consisting of just C#/AspNetCore/SQLite (and recently Blazor), and turned it into something that can serve thousands of users in production across several B2B customers. We don't use any sort of containerization or cloud tech. Our software can be deployed by unzipping a file on the target environment and running a single command. You would be surprised at how much speed you can get out of SQLite when you have had 5 years to live with and experiment with its capabilities. On top of its extensive internal testing framework, I have several testaments to its stability sitting in our customers' environments right now. We've got OLTP SQLite databases that are getting close to 1TB in production without any signs of distress.
So, instead of focusing all of our energy on shiny things, we focused on building a 100% integrated vertical with (mostly) boring tech so that we can fully manage the lifecycle of our software product with the product itself. We have a management web interface built out for everything we need to do for building & operating the solution. We are very close to being able to partner with other organizations who can run the implementations on our behalf because the software is so easy to manage now. This is the type of real-world horizontal scalability the CEOs are after.
This equally applies to a company's business process. Focus on a specific scalable business model that scales - don't make a special niche process for every "opportunity" that comes by.
It also applies to managing your life, personally. Know what things you do, what your personal goals are, and don't let yourself get distracted by the latest and greatest social media trends or stuff your friends are doing.
Focus. Mature. Achieve.
The "opportunity" is often a dangling carrot from a big enterprise customer. It's very hard for a cash-strapped startup looking to make bank and reputation to turn these opportunities down, and they don't look at the TCO and long-term costs in terms of complexity and tech debt.
Happiness comes from shipping stuff. 快乐源自交付。