HACKER Q&A
📣 mannymanman

Technical skills helpful for building a startup today


I have recently developed a keen interest in coding and technology in general. I was suggested by a friend to go through Harvard's CS50, which I did, and now have a decent understanding of some basic data structures and algorithms. Now I want to learn more skills that will help me build projects independently from start to finish, and eventually create my own startup.

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!


  👤 jitl Accepted Answer ✓
If you actually want generalist web dev skills applicable to almost any web startup, learn Rails. There are tons of resources, and the Rails 1st party docs are a good starting point. Rails will set you up to learn SQL modeling, MVC pattern, CRUD basics, api design, etc without putting you into library selection paralysis which happens quite a bit in the JavaScript ecosystem, and you can replicate the architecture easily in Express/Node if you need to later. So, it’s a “paved road” towards familiarity / mastery of web development where there’s always a clear next step and obvious choices to accomplish your goals. Ruby isn’t too “hot” any more these days but it will massively simplify your decision tree. The JS ecosystem still has nothing to match the productivity of Rails.

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.


👤 AlchemistCamp
I would strongly encourage you not to dive into learning React or AWS. Both are very good to learn about if your goal is to become an employee at a tech company, but not so much for a solo founder.

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.


👤 OzzyB
You have thrown out quite the list there (Blockchain/AWS/etc), which I guess is more of an indictment of where we're at an industry today regarding tools, than any criticism on your part.

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!


👤 djstein
Rambling while I drink my coffee:

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


👤 thinkingkong
I would encourage you to put the idea of building a startup aside and just learn / have fun building things with no business utility first.

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.


👤 wespiser_2018
Stay away from "blockchain" or "crypto"! First, the blockchain use cases are few and far between. Illegal "darknet" markets selling drugs are the biggest use case of the biggest blockchain, Bitcoin. Distributed blockchains just doesn't make sense for most computational problems, and "blockchain" becomes the solution not for technical, but for marketing or legal reasons.

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.


👤 weedpeg
I think I am qualified to answer this question. When I started my own company (running for 3 years now), I was already writing code for 5 years but that was not web stuff. I was mostly writing wireless communication protocol(firmware). Then i decided to build a SaaS product. I started with Django and i would recommend that to anyone simply because it comes batteries included. The documentation and whole ecosystem of django/python is great. Also it is used by many large companies in production so you can go a long long way with django itself.

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.


👤 _ah
Technologies are tools. Figure out who your customer is and what problem you're trying to solve, and then look for suggestions for the right tool to solve that problem.

👤 brudgers
Because I think you are on the wrong scent, I recommend looking at Startup School https://www.startupschool.org/ and also reading some of Graham's essays to get a better sense about building a startup. http://paulgraham.com/articles.html

👤 zitterbewegung
Use glitch.me to build a personal website which will teach yourself how to code and will teach you not only the basics but also what is involved in basic web development. Focus on HTML and CSS.

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.


👤 angryredblock
If you want to be a solo/technical founder, I'd consider learning to build web apps a great first step - it's accessible, cross-platform, and flexible. There's also no shortage of resources online. On the frontend, React is commonly used and generally a safe choice. On the backend, some nodejs with heroku or docker should give you a gentle introduction (with the added advantage that you'll be learning the same language for both front and backend -- one less thing to worry about as you're starting).

👤 yawnxyz
Learn about building a company, product market fit etc. and start using no-code or low-code tools. Get traction, then get really good at finding a tech co-founder.

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)


👤 chrisgoman
If your goal is to create your own startup, the technology doesn't really matter. Unless your startup is a "mobile app", then that is also not important today. As with most suggestions here, your best bet is to start with web dev (like you have mentioned) but don't get sucked into the hype. You could do a lot with Rails or PHP (this gives you a solid understanding of some foundational stuff)

- 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.


👤 iagovar
Learn Excel (Strongly Advised), Python for CRUD stuff, SQL for analytics (MySQL, Postgre, SQLite & DuckDB), Sysadmin Skills for basic VPSs (bash scripts included).

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.


👤 cryptoquick
I'm a technical cofounder, and I've learned this the hard way. The two most often overlooked skills I lack are: Sales and Accounting.

👤 simonkafan
The question is: What do you want to build? What problem do you want to solve?

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


👤 benjaminsuch
I think your question is wrong. You don't ask of what you need to build a startup. You ask what tools do I need to solve the problem I discovered. A startup is just a company made to solve that issue and you can't pick a tool "for a startup".

👤 buchanaf
I'd take a look at https://cushionapp.com/blog and https://cushionapp.com/running-costs/. He's posted on here a couple of times and has a setup that is very similar to what I'd roll with if I was going to bootstrap an app: React, Rails, and Heroku. People on here like to hate on the React ecosystem, but it's pretty straightforward if you stay on the paved path of create-react-app, react-router, redux-toolkit, and material-ui.

👤 osdev
Focus on no-code, low-code approaches and tools to building a product to validate a problem and your solution to it.

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.


👤 mdifrgechd
Others have mentioned it depends on what problem you are trying to solve, but it also depends on your past experience and what you are already bringing to the table. E.g. If you are a recent high school grad, more CS fundamentals might be valuable. If you have experience from another industry, maybe you want to focus more on what the technologies you are considering will unlock in that industry, and look to a co-founder for some of the nitty gritty tech details. Where are you starting from?

👤 nyrulez
Check out https://ycadvice.com, especially the Product and Technology sections.

👤 nsedlet
I'd suggest Rails. You'll be able build a web app or an API. You'll learn about SQL. (Rails is a framework for web apps - which are generally useful to know about if you're not sure what you might do later). For deployment, I have had a great experience with Heroku, which is probably a bit easier than AWS. I'd suggest ignoring front-end frameworks like React for now - you can pick them up later, if your use case requires it. And you can probably get a decent MVP done without them. At the beginning you want to optimize for speed and simplicity, so that you can iterate quickly.

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.


👤 mraza007
This is a great question asked I just wanted to ask after reading most of the comments don’t we think starting with frameworks like react or vuejs since it would be easier to maintain the application since you can find many people who have JS skills compared to using Rails or Django

I’m just curious to know


👤 cvaidya1986
Start from the user not the technology. What if it turns out from your user interviews is what they want is a mobile app or even a newsletter instead ?

👤 jessehorne
Depends on what you want to build.

👤 general_orr
be very good with email

👤 gregjor
Satire or serious? I can’t tell.