You're a software dev that is about to start a new project. Everything's cool, you're pretty excited about the opportunities and all the good things that'll come out of it but before you begin you're faced with the old-time dilemma:
Should I build it in the old but boring (😑) tech stack I'm already so familiar with or should I try something new (🤩)?
TLDR; Focus on learning if you have the time and interest. On deliverability if you want to bring your idea to the world asap, or do both by staying in the 80-20 healthy ratio.
Longer version:
You already know some React or Vue, a bit of Express and even played with Typescript, but you've heard that Python or Ruby are in demand nowadays, and now you don't know what path to take?
I think this is a valid question software developers should ask themselves, but it always boils down to 2 things mainly: delivering vs learning.
So to put it simpler ask yourself:
You might have more time than usual on your hands for this project or you're not too interested in delivering something right away or at all, or you've heard X language could be better at this type of project in the long run.
Then by all means go the route of learning something new. I might even suggest that if you are already proficient in languages like Javascript or Typescript for example, not only to learn another one such as Python or Ruby (which are pretty similar btw) but go further and learn about a different paradigm altogether such as Functional Programming in languages like OCaml, Clojure or Elm-lang (this one is really fun).
Or if you're already comfortable with that then play with some IOT and low level programming like C or C++.
Get your hands dirty with some Rust and get really familiar with the intricacies on ownership and memory management of a modern type system.
Heck, pick up Gang Of Four and dive into some new (old) Design Patterns or a Fowler book and go deeper into Architectural ones.
Anything new you learn, make sure it's exciting, relevant and helps with your (secondary) goal of delivering a project at some point.
I used to take this path a lot in my early days, and although I've learned a lot thanks to it, I also found myself burning the night oil many a times, which later on translated into some mental-health issues stemming from insomnia and anxiety so make sure you are conscious and intentional about this decision!
If this is the case then your job is pretty straightforward, and although could seem a bit boring while you're building it, don't fret too much as there as so many other domains you can learn about.
And especially in this case, since your goal is to see if there are enough users that find your idea useful, you will need to develop those entrepreneurial skills anyway. It's quite a fantasy, that I've been (still am?🤔) guilty of believing in as well, that "You'll build it and they will come", because it so rarely happens.
More often than not, you'll build it and while that is great in itself, no one will actually come. Or at least not without you doing something about it. In order for the users to come you need to promote it somewhere (marketing skills), you need to demo it to some people (pitching/public speaking), you need to make it visually appealing (design), to eventually sell it (sales), or if not to hire someone who can do some or all of these steps (talent recruitment and resource management/financial skills).
So, my advice here is: don't worry if it seems dawning at first to mechanically type code on the screen without too much excitement. There are always new things to learn and get excited or frustrated about :)
This is probably my favorite because it's a mix of both, and as long as I keep a healthy balance between delivering and learning, things should be pretty smooth. At the end of the day what I'm looking for, is a bit of a challenge, and to feel that I'm curious and excited enough to keep going. Learning something new definitely achieves that for me, but so is the thought of deploying something that the world hasn't seen yet 😁.
So I try to keep it at a healthy rate of 80-20 / 70-30 of using what I already know vs learning something new just for the sake of it, and get the best of both worlds!
Also, to be fully transparent I want to build more in public, and I'm learning and trying things on Twitter. If you find me there, please give me some much needed feedback! :)
There is a say " if you want to go fast go alone. If you want to go far, go together ".
You need a team if you want to accomplish bigger goals
I totally agree Chubakadirty with that! My intention wit the post was to shed some light on the process before you have a team and just need/want to hack an idea up. For me, the beginnings were usually characterized by me doing it solo, until I had something to show and build a team!
Thank you!
Or "If you want to go fast with software use some nocode platform" :)
Everything can be rewritten better. Just pick a stable platform and move on. That said, you can't beat C# in when you take everything in consideration (performance, framework, support, community, tools, etc etc). It might not be 100% in every area, but it's consistently 90%+ for everything. There's no other language/framework can say that.
I'm also on the .NET bandwagon!
Are you a game dev?
I can code games in c/c++/c#, unity, swift, java, js... I was far worse. BIOS engineer doing x86 asm, then embedded/smartphone kernel engineer. I do smartphone apps/web apps these days. Actually who am I kidding, I am just etf investor with tons of unprofitable projects.
I ask because I’ve used C#, but only for Unity games. I found few things on my OS use it. I tried downloading mono but it was a lot more friction than my other dev environments.
I think it all depends. I am a strong supporter of first-party. So if we are developing for MacOS/iOS, it makes sense to use Swift/Obj-C than C#. But if web technology is good enough (which I think it's pretty close), we can just dev and put them in webview.
I am pretty much Blazor/ASP.NET Core most of the time now. I do swift specifically for iOS.
What would you use for Linux?
Haven't used Linux as my main or secondary since... 2006. Windows and Mac is handful already
My 2 cents is TEMPLATES.
1- React (Next.js)
2- Hosting, Auth, Storage (Firebase)
3- CDN (ImgIX)
4- backend (Firebase functions when necessary, you can get away with serverless for MVP)
Templates save time and enforce best practices so you don't have to think about them every time, ex: SEO, responsive UI etc.
This is a great approach and I agree!
We started to deploy experimental la ding pages with nextjs + tailwind to keep things fast, but now I’m even thinking of doubling down on “fast” and simply start with a mock prototype in a design tool like Framer or Figma to get that first user validation, as I learned on this post https://www.indiehackers.com/post/how-to-prototype-and-user-test-ideas-in-hours-not-weeks-24fb4d8a10
Also on the template train. I think they get a lot of the boring, initial setup out of the way so you can focus on differentiating your landing page / offerings.
But they also leave you in a good place to grow - you have full access to the codebase and can modify it to fit your next requirements.
Yes, I have just read about a guy using local JSON before he got his first customer :-) Loved it.
At this point I have a boilerplate project which gives me a full-stack web app with a lot out of the box (accounts, auth, landing page, basic routes, db). In my case, built in React and Meteor JS :)
I'm sure there's a startup idea in here somewhere... Oh yeah, website builders haha
I do this too but for my tech stack of choice: .NET with NextJS frontend.
I find it takes away a lot of the boring, duplicate work and gets me launched faster.
Great write-up!
Also, regarding getting things done ASAP, done is better than perfect <3
So finding the "perfect" stack, may be an illusion and time waste a lot of the times.
Totally agreed! 🙌
Over time, relying on one tech stack helps you deliver faster.
We've always used Angular and .NET Core, with a CosmosDB backend. Mobile apps in ionic. CI/CD totally automated via Azure DevOps. Hosted on Azure.
Can feel how setting up things becomes a lot more easier every time we start a new project because the existing IP helps.
Good point! Similar findings for me except I’m on the react side of web/mobile frontends :)
I pick the best tool for the job, if that means learning a new one that is fine.
I was happy with Django and Django rest framework, but Supabase and Fastify are much better for my use case (I share a lot of code between frontend and backend).
Also there is a large subset of IHs that prefer learning to building a business. So hard to give them advice on what tools to use.
Agreed. The problem determines which tool is right for the job.
Agreed here!
I agree! The problem does determine the tool, as it should, but there’s also a tendency in the dev community(especially around front-end) to learn something new just because it’s trendy and thus use it in their next big project. Which is totally cool, but there’s a bit of a fallacy there that I tried to point out in the post, when it come to the ROI.
As long as there’s awareness around the reasoning why learning that new thing is needed and as long as that pans out well with integrating it in the new project then all is good.
But for me, I’ve often felt into the trap of learning learning learning, especially new trendy tools, frameworks, languages, and not delivering delivering delivering. I realized that a healthier approach is something more like delivering learning delivering :), which is why the post!
Appreciate your input!
100%
Default should be ROI based.
I usually will watch and let everyone else hop in and test.
Currently doing that with Remixjs and Astro.
The first SaaS project I started working on I focused more on #1 - Learning new tech. In the end, I learned about Hosting, DNS, CI/CD, expanded my architecture knowledge, conquered a new DB, became very proficient in Angular.
Of course, my SaaS never saw the light of day 😂
However, I recently started working on a new SaaS idea I had, and all of the learning I accumulated from the previous project allowed me to iterate so much faster this time. I also decided to focus on marketing first, by creating a landing page and validating my idea some more, before diving into the implementation.
We'll see how everything turns out in a couple of months, but I'm very satisfied with the progress I'm making.
Just an alternative perspective here:
I regret using JQuery for my development back in 2018.
I was too lazy to learn a framework, and now it's starting to bite me in the ass with tons of refactoring needed.
I'm new to this forum. How do I find a partner here to build something with? Have you been successful finding a partner here and build great things together? Its such a daunting task to think of a product and build it yourself. Coding is a like an overwhelming maze to me.
Def a fan of the 80/20 split. At the end of the day, you're experimenting to determine whether people would even use this. Any thing that makes that learning take more time is additional cost.
I also take some steps to try and make sure that my 'learning' actually pays dividends in my future projects. For example, I'll update my project planning documents to reflect any changes and I keep a project template codebase (https://cloudseed.xyz/) handy that I'll update with new code / technologies I come across and find useful.
Very interesting shihamy! I haven’t heard of cloudseed before, but it seems to be a useful tool. Would you please give more details on what it is exactly and how it helps you?!
Just saw this reply! CloudSeed is a project boilerplate I put together that has all the code and features I typically need to start a SaaS business already built. Plus I use the best languages and techniques I've found so far (both from experience and learning from other Indie Hackers) for making a scalable, easy to work with SaaS codebae.
Tech Stack is:
You can’t make a reasonable answer to this question without more information.
If it’s a large project, the new tool is a much better fit than what you use now and you can learn to use it quickly, definitely choose the new tool.
If it’s a small project and the new tool isn’t much better for it and you’re going to struggle to learn it, definitely stick with what you know.
For cases in between, consider the variables and make your best estimate.
Agreed! In my experience when I’ve dealt with this dilemma, it wasn’t usually a fully scoped and planned project, but an idea I really wanted to build. So for me it was a struggle because, being a learner (out if the need to keep things “exciting” and not get bored) I also wanted to use some newer, fancier tool, even though it didn’t really make the most sense!
I used to entertain myself with trying new languages, especially Functional (Clojure, Elixir, OCaml) languages, but recently I have stopped this because it takes the focus out of actually building something of value.
That said, if I were to choose a new language to entertain myself, that would definitely be Ruby with the intention of using Rails for future side-projects. But again, no-code is really exciting as well, and outsourcing is even more so.
Haha yep!
So timely!
I've been using Laravel since R4 and since then have built a very productive stack with MongoDB and Twig+Vue.
Recently I jumped on the Next.js/Tailwind bandwagon and although I can see the appeal with SSR, file-based routing and most of the bell & whistles, I feel the pain.
The more I go with my startup, the less it's about coding. Funnels, customer development, monetization, copy, SEO, and more other things that are far far away from actually coding.
In my opinion, if your hands itch to make some amazing thing, choose the stack you will enjoy. Do it as a side-project and don't put big expectations.
If you want to start a business, it heavily depends on what the business requires. Maybe you should abandon your coding skills, hire a bubble developer, focus on marketing and spend all your time talking with customers. I do not exactly know what to do, because I'm still in phase "wantrepreneur" :)
So true Kozlov! I’m learning this more and more, the hard way if I’m completely honest, that there is so much else to do as a founder that I don’t have time to code almost at all anymore.
Marketing, sales, pitch decks, partner relationships, social media, community building, etc…
Because of this I started to structure my day in a different way, where I allow specific times for high-level biz stuff/meetings and others just for coding but this could be the subject of a post altogether!
Thanks for you input and I’m curious what your startup is!
I like your idea about structuring the day. Would love to read more. I'm still trying to find my formula to combine coding and founder-related tasks.
I'm making a visual editor for Kubernetes infrastructure.
Good one!
🙌🙌
I like this advice and effectively did the same thing on my project.
The front end is tried and true, leaning heavily into my current skills. The backend is all skills that will increase my market value for employment opportunities.
Nice work with this write up
Awesome to hear aisflat439! If you don’t mind what backend did you end up using?
I use cdk
As in aws cdk?
This sounds interesting! Thanks so much!