Posted on:
Last modified:
最近又重读了一下 Boring Technology 系列文章和评论,得出了对于创业公司技术选型的一些想法。
brew install
一个数据库并且用起来,但是在生产环境运行数据库就是另一个技能了。要熟练掌握你选择的工具。工具在使用初期会暴露出很多问题,随着你的使用会越来越顺手,如果你 在刚刚用熟练的时候切换了,那就永远在处理每个新工具的各种问题。
我们生活在一个创建公司的美妙年代,有那么多直接可用的工具和服务可以让我们解决时间和金钱 并提高生产力。从来没有像现在这样,一个小团队(甚至一个人)可以使用简单无聊的技术来做出 一点对世界有用的工具来。
大多数时候,构建和交付的最大障碍来自想得过多。如果这样怎么办,那样怎么办。天啊,你 根本不重要。每个人都很忙的。没人关心你和你创造的东西,直到你证明你值得别人的注意力。即使 你把第一次产品发布搞砸了,几乎不会有人注意到。Think big, start small, act fast. 使用 无聊的技术来做一些简单的东西(甚至很丑), 只要你解决了实际问题。
当你选择一个组件的时候,功能多并不是一个优势,相反,简单才是优势。不要选择功能多的那个, 选择简单的那个。
挑选一个数据库和或者是语言都是低级的欲望,高级的欲望应该是如何实现一个有用的产品。
每个工具都会带来收益(+)和维护成本(-),如果 n 个小任务都选择最优工具,
总收益 = 收益 * n - 维护成本 * n
如果选择一个能满足需求的最小工具集(k),
总收益 = 收益 * n - 维护成本 * k, (k << n)
每次我开始一个新项目的时候,我都会尝试回答以下问题:
我是在用这个新项目作为学习新技术的理由,还是在尝试解决一个实际问题呢?
越是有经验的人设计的架构反倒越简单,因为不太懂的人才会想着把自己知道的东西全都一股脑都用上,不管是显得牛逼还是处于试一试的心理。有经验的人知道哪里才是必要的,也已经没有了炫耀的动机,做出来的架构才会是「大道至简」的。
Happiness comes from shipping stuff. 快乐源自交付。
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 and 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#/Asp .Net Core/ 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.
© 2016-2022 Yifei Kong. Powered by ynotes
All contents are under the CC-BY-NC-SA license, if not otherwise specified.
Opinions expressed here are solely my own and do not express the views or opinions of my employer.
友情链接: MySQL 教程站