Gideon Greenspan - Startup Tips
Does my Startup have "Technology"?
The world of software and web startups has become brutally competitive. Ideas on their own are worthless - if you've had a great idea, you should expect that many other people are working on it already.
Technology isn't enough to make your startup succeed. But it's a great way to gain an edge over the competition. Having technology means you have solved a difficult problem. This makes your product hard for others to reproduce.
Most startups claim to have technology, but few actually do. A ton of code is not technology, no matter how well-designed and bug-free. It only becomes technology once it solves a tricky, sticky problem.
Below are some common types of problems that can be solved with technology: (technical terms ahead...)
Different skill sets are needed for different types of technology. Solving complexity problems is about finding mathematical models, then making inferences from them. You want PhD grads and professors working on this stuff. Scalability also relies on research chops, plus an intuitive feel for computer and network architecture.
- Complexity. It's not easy to represent the complexities of the human sphere in the binary world of computers. How do you identify a spammy email? Recognize the faces in an image? Create an enjoyable Sudoku puzzle? Identify the most relevant content on a web page? This stuff is deep, and goes beyond undergraduate Computer Science. Common approaches include Bayesian Networks, neural nets, Markov models, clustering, heuristics and support vector machines. You can get started with Programming Collective Intelligence (book).
- Scalability. Many tasks are easy to perform for small cases, but become dramatically harder at large scales. Storing and retrieving 100 small images is easy. Providing random access to satellite imagery for the entire Earth is not. The same goes for routing messages between millions of IM users, or keeping a record of billions of cellphone calls. Common methods include data partitioning (horizontal and vertical), replication, synchronization, indexing, failovers and load balancing. For a detailed example, check out Inside LiveJournal's Backend (PDF).
- Performance. This is about making a system more efficient, without altering its fundamental design. The goal is often to reduce the response time for a task. The motivation may also be economic - to save on memory, disk space and CPUs. Optimizing performance is an incremental process of identifying and removing bottlenecks. Common techniques include profiling and rewriting code, compression, caching and preloading. Leveraging multiple platforms can also help, e.g. by replacing a critical section of PHP with some C++ code which uses bits and pointers. For an extreme example, read chapters 17-18 of the Graphics Programming Black Book (online).
- Compatibility. Most mature products interface with pre-existing data and systems, and support diverse groups of users. An instant messaging service connects to AIM, ICQ, MSN, Yahoo Chat and Google Talk. A word processor checks spelling in dozens of languages. Websites are viewed in multiple versions of Explorer, Firefox, Safari and Opera. A price aggregation website scrapes content from hundreds of other sites. In each of these cases, a lot of work goes into supporting all the variations. The deeper challenge is to find an appropriate abstraction to minimize the work required. For a concrete example, read Joel Spolsky on Where there's muck, there's brass.
At the other end of the scale, compatibility is about dealing with piecemeal, nitty gritty issues, so programming experience really counts. As for performance, look for hacker whizz kids who have a deep understanding of processors and operating systems, and who know how to think in assembly language.
Some examples of the technological issues solved in some well-known products:
||personal product recommendations
||stock millions of products
||serve complex pages fast
||integrate with diverse suppliers
||spam-free page ranking
||store billions of web pages
||provide instant search results
||support hundreds of languages
||photo-realistic image filtering
||edit images larger than memory
||support SIMD processors
||import/export dozens of formats
||efficient voice compression
||handle millions of concurrent users
||keep down CPU usage
||work under any network setup
You don't need to start out with all four types of technology. If your product succeeds, the others will probably spring up along the way. But if your startup has nothing that would fit into this table, I would start to worry. If you're a technology company, but not solving something difficult, competition is rapidly on its way.
© Gideon Greenspan 2021