Since this is YC's official forum, I figured that folks here could give me solid advice on what technologies I should learn to start a startup. I have a vague idea that knowledge about web dev (React, Javascript etc.) and cloud (AWS) is in high demand in industry, but are they the first things I should pick up? What about mobile apps? And blockchain? Where should I start? What area is the easiest to pick up and has the most resources online?
Thanks!
AWS/GCP are tools to achieve some goal. It’s hard to suggest learning those until you have some kind of app that has needs served by a cloud provider.
Blockchain is something of a meme. No startup has succeeded in the “blockchain” space other than in “selling shovels in the goldrush” sense.
(Native) mobile app development is somewhat involved, plus there’s 2x as much to learn because there’s two different mobile platforms. I wouldn’t suggest investing time there as your first area. I found it quite impenetrable until I had a chance to learn it in a work context.
React itself is fine and relatively straight-forward, but its ecosystem is massive and there are many competing options for several accompanying libraries. AWS includes a powerful array of services, but it's considerably more time-consuming to learn than other hosting options such as Render.com.
I'd say your best bet is to just use an MVC-ish back-end framework and sprinkles of JavaScript. Once you've done well enough to hire a few engineers, then maybe start thinking about React, AWS, more complex devops, etc.
At the beginning, the most important thing is speed.
If you are truly starting out fresh/green, I would ignore all the buzzwords, and simply focus on how to make a solid, good 'ol fashioned web app.
For this I would suggest learning/reading up on the Django Framework. The docs are excellent, kind to newcomers, and will walk you through all the main architectural considerations and components needed to make a robust fully featured app - databases/orm, controllers, templating etc.etc.
Once you've built a (few) webapps like this then you can worry about spending time refactoring parts of it with the new hotness. They will reveal themselves to you once you get some experience and grow your app/business, and you'll have the knowledge to make better decisions on whether or not they're worth it.
For now just stick with a framework that will guide you; ofc it doesn't have to be Django, there is Ruby on Rails and many others, and remember even the first iteration of Instagram was a Django app!
Tech stack: React + Nextjs (react-query, graphql-generate, typescript), Django (admin panel, celery for background tasks, channels, graphql), Postgres, Redis (for celery and websockets). Postgres in RDS with auto rotating secrets. Deploy as a Django as a Docker image on AWS. Access keys from Secrets Manager at runtime (this is your pre EKS setup). Deploy frontend app on Vercel. Use Stripes newest payments system for billings. Deploy everything via GitHub actions PRs and use Actions, including the new code and dependency checks.
Bam you’ve got a frontend with a busting cache, websockets for automatic updates, ability to do server side rendering, and all the content management systems from the Django admin panel you would have setup by hand with Express/Flask. You can choose to use any method of auth that Django provides or go with Auth0.
Using graphql-generate and Django Graphene you can auto generate your typescript SDK on your frontend. All you have to worry about now is your view code and your models structure.
Using celery and celery-beat will allow you to do long running or scheduled tasks. Connect it with Django channels and push updates from a celery worker to the frontend.
GitHub will keep it up to date and check for security errors with automatic pull requests.
Expansions on this architecture include: - switching to EKS (useful especially for secrets and scale) - Infra as code via Pulumi to switch to any K8s provider - Using RabbitMQ for more robust messages passing over simple Redis queue
1. It sounds like you're already really curious so you've got your number one skill taken care of. If you're looking for a curriculum, start with something you're interested in and find the fastest, tightest feedback loop. Basically you want to be able to make something that activates all the reward centres in your brain or build it in small increments so you stay engaged. That might be learning how to write 3d graphics, build a website, basic javascript, etc. Find the smallest piece and just learn that.
2. Don't worry about doing everything "the right way". The whole point here is to try something, get a feeling for it, and then figure out how to make it better, how to write it differently, etc. You're going to end up realizing that one persons "best practices" are better than other peoples "best practices" and where you can make trade-offs (no1 skill imo)
3. As far as things to learn, that list is never ending. Just learn whatever you need to accomplish your goal.
Next, the strategies to make money off blockchains usually involve selling a mis-understood product to the next greater fool, and the blockchain industry has a really sketchy history of using pump and dump schemes to make money while leaving purchasers with useless products.
Finally, I believe there is now a shift in opinion against blockchain: After the huge investments of late 2018/2018, a number of well known folks in tech have spoken out against blockchain. Right now, there are still a lot of people holding the bag, so to speak, including a lot VCs from 2018. I believe, based on the performance of blockchain companies and new regulation, that there won't be many new blockchain/crypto companies, although you never know.
That said, the underlying technology that makes blockchain work is worth study in it's own right, and has industry applications: Distributed systems, databases, distributed consensus, cryptography, byzantine generals problem, et cetera.
For apps i would recommend Flutter. It's great, one code base for ios/android. Compared to react, i think flutter is easier as you dont have to deal with CSS/HTML etc.
Regarding hosting, start with heroku. It's super easy, does the right things for you out of the box. Security of something you need to do right from day 0 and with doing AWS/GCP yourself, you may be better off getting heroku to take care of this for you instead of doing yourself.
Mobile apps have a higher barrier to entry and you should focus making your personal website responsive so that you can design for screens.
Add a blog to your personal website and when you have to learn something first learn it and then write it down. Learn JavaScript at this point to automate the creation of blog posts.
Once you believe you know enough to make a project that you can do make a prototype on https://glitch.me and move to the paid tier. Then name the project and buy a domain from google / AWS . Then learn about authentication.
I think it's probably easier to find a good tech co-founder nowadays than spending 50+ hours a week learning how to code. There are so many ways a startup can fall apart even if you know how to code!
(I'm a tech co-founder, and for better or worse, I spend more time building relationships, sending emails and business models and planning than writing code)
- Internet: Domain names + DNS + Hosting (VPS is enough)
- Web Dev + Backend: Nginx (web server) + PHP-FPM (PHP) OR Unicorn (Rails)
- Database: You will need SQL no matter what other people tell you
- Front end: HTML, CSS (Bootstrap), Javascript (jQuery)
These are the most "boring" things you can learn but you won't spend weeks just getting your environment going and you are already frustrated. All the cool stuff deals with async, PWA, SPA, NoSQL, (... insert more buzzwords here ...) that will just confuse you before you even get a login page up and running.
Your goal is to be able to create a functioning "web application" that may already exist so you can just "borrower" the features and not have to think too hard if learning coding and technology is where you are at right now.
All of this is considered somewhat simple for seasoned technologists, but still takes a lot to be decent. If you grow you'll hire someone else so unless you're willing to spend 5+ years only to produce decent code, I'll say this is sufficient.
If you don't know yet, then figure this out first. It is useless* to spend your time reading about how blockchain solutions on AWS work when you don't have a plan what to do next with this knowledge.
*) except if this interests you personally
For example, use a “no code” approach first and simply use tools to design or build a simple Product, from concept to creation. Use cloud services like Invision to create a prototype, website builders/template to validate need/interest in an idea. These are all things that anyone can pick up reasonably well without coding.
Essentially, what I’m saying is focus on non-technical skills related to ideation, proof of concept, product validation, etc.
I agree w/others here that picking a good problem to solve is the MOST important (along with having a decent idea of how you might find customers) - and implementation/selection of technology less important. That said, when I was thinking of starting a company, I learned Rails first (I used DHH's Rails textbook)! For me, it was useful to learn web programming so that I could understand what web apps were even capable of doing. It's really helpful when you're picking a problem to work on to at least have a very vague general idea of how software might solve it! So for me at least, it helped inform & inspire our brainstorming/ideation discussions. And since we did end up using Rails to build our MVP, when my cofounders and I all quit our jobs to work full-time, we could start building right away.
I’m just curious to know