New Indie Hackers often ask this question:
Should I to learn to code or can I get by with no-code tools?
I suggest that this is the wrong question. A much better question is:
Am I committed to learning whatever it takes to build a money-making robot?
Let's break that question down.
Firstly, let's understand the goal - most Indie Hackers want to build a money-making robot. They want a machine which will deliver value to customers and collect their money on a 24/7/365 basis. Usually this isn't a physical machine - it's software which directs a CPU to do something with information - gather it, process it, modify it and spit it out to customers in a way that they value. And then, of course, receive money from those customers.
Secondly, you must understand that the path of being an Indie Hacker is learning. Whatever you already know, you don't know anywhere near enough. Not even close.
If you think that you already know everything except a few coding skills, you are horribly wrong. On this journey you'll constantly encounter situations in which you don't have a clue how to accomplish your next task, and you'll have to learn your way through it.
Thirdly, your learning is not upfront - it's continuous. Do not attempt to learn everything you need before you start - you'll waste your time by learning the wrong things.
What you need to learn right now is whatever is needed to perform your next task - the most important task which, therefore, should be done right now. As you perform your next task, you'll learn which task to do after that and how to do it. And so on.
Building a money-making robot means taking on many new and unpredictable tasks and, therefore, it requires learning each task just in time. But don't take my word for it - here's a complete misquote of Jesus which says the same thing:
"Do not worry about learning for your next task, for your next task will worry about itself. Each task has enough learning of its own." (Not) Matthew 6:34
Fourthly, the hardest part of building a money-making robot isn't the building the robot part - it's the money-making part. It's the human-focused work of finding out which problems people actually have (and are so painful that they'll give you money to solve them). This is very different to the problem that you think they have - read 'The Mom Test' to understand the difference.
This means learning things that may not seem interesting, e.g. how to:
The good news, however, is that these things become more interesting when you actually need them (and can make money from them).
And now, finally, we're ready to look at the question of building your robot:
Should I to learn to code or can I get by with no-code tools?
By now you can probably guess my answer - you will need to learn which tools are available and which tools are best for your next task.
Code and no-code are essentially the same thing - they're tools for telling a CPU what to do. They do, however, offer different trade-offs with respect to:
A coding language has a completely open structure and provides a wide range of discrete commands for telling a CPU precisely what to do. This gives you immense flexibility at the cost of upfront learning (how to set up your own coding environment, the basics of coding, how to execute and deploy your code to a CPU, etc.). Then, once you've done that, there are a complex set of commands to learn, coding patterns to master, security practices to understand, deployment options to consider and so on. The learning is literally endless.
A no-code tool is a tool which someone else has coded using one or more coding languages. Their tool aggregates many discrete coding commands into a smaller set of more powerful / leveraged commands which are easy to learn. On top of that, they do the hard work of deploying, executing your code and keeping it secure. They do all of this because it's their money-making robot. The easier they can make their tool to use (i.e. the less learning you need to use it), the more people they can attract to their tool.
That's not to say that no-code tools can't be powerful or flexible - they can. But a no-code tool will always limit your flexibility because:
The only way that a no-code tool can become as flexible as a coding language is to become as complex (and difficult to learn) as a coding language. Flexibility comes from having precision in the set of instructions that you can give to a CPU. And the cost of allowing precision is to present the user with a complex system which they must learn. This is why code (and coders) will always be needed - we'll always want the ability to tell a CPU precisely what to do (and coders are the people who learn the complex systems which give precise instructions to CPUs).
Every no-code tool is written by a coder who has their own limitations and incentives. Their no-code tool will always be limited, therefore, by their ability to learn which features that users want and by the business case for each of those features (limiting the feature set to those which many users want).
In the very best case, the no-code tool will overcome its flexibility limits by giving you the option to add your own custom code wherever you need it. This gives you the best-of-both-worlds approach in which the tool does the heavy lifting and you add a little code for customisation. I presume that this is the future of every no-code tool (think, for instance, of how much code you can write into an MS Excel spreadsheet).
That future is already here, however, with any mature coding language - it's just packaged in a different structure. Every well-established programming language (such as Python or JavaScript) has an immense array of powerful libraries which allow you to perform complex tasks (sending emails, scraping the web, processing images, getting data from a database, etc.) with very little code. To use those libraries, you only need to set up your coding environment, find the libraries (search for 'awesome python', 'awesome javascript', etc.) and download them. Once you've done that, you need only a few lines of your own code to send an email, scrape a website, modify an image, retrieve data from databases and so on.
Clearly, then, I have an opinion on which is better for you. Learning how to code will give you much greater flexibility as an Indie Hacker. If you can code you won't be reliant on anyone else, particularly not the creators of no-code tools or a 'technical co-founder'. You won't have to guess whether something will work - you can build a quick version and test it. You won't have to obsess over business ideas - you'll be able to test them, learn something new and modify / improve / reject your first idea. The more you learn, the more flexible you will be and the greater possibility space that you can operate in as an Indie Hacker.
But that doesn't mean that you should code everything! You should always use the most effective and efficient tool for your next task, which might be a no-code or low-code tool of any kind at all (e.g. MS Excel or WordPress). Your next task is probably not unique and, therefore, It's highly likely that someone has already built a tool to handle it. Being a coder gives you the option to code, not the obligation to code.
So ... let's bring this all together, starting with two definitions:
Coder [noun]: A person who has committed to learning whatever it takes to build the robot they want.
Indie Hacker [noun]: A person who has committed to learning whatever it takes to build their own money-making robot.
By these definitions, you can call yourself a coder and an Indie Hacker right now.
As you go, remember these things:
As for what you should do right now (and every other day), here it is:
Commit to learning and go.
Appendix: How to Learn to Code
The only way to learn how to code is:
That's it. Commit to learning and go.
If you need help with the first few steps of learning to code, do this:
Commit to learning and go.
Thanks for writing this, Andrew. A really nice article.
Thank you!
Pretty much sums it up. This should be the Indie Hacker guide for beginners 🙂
Thank you! I hope it helps some new Indie Hackers as they get started. There's so much to learn that it can feel overwhelming. But you only need to learn enough to take that first step. And then the next. And so on.
Nice read. One benefit of learning how to code that was not mentioned is that if your indie hacking fails, you have a valuable high paying skill that will work great as a backup plan.
Thanks! I agree with you - learning to code has the genuine benefit of having a coding job to fall back on. I am concerned, however, about having two goals in the back of your mind. Possibly the hardest part about Indie Hacking is being your own boss and directing your own time sensibly, and we have endless excuses for avoiding what we should be doing. Maintaining a secondary goal of getting a coding job, for instance, might make it too easy to justify over-investing in learning to code (which is easy and fun) and, therefore, avoid that very difficult next task in your Indie Hacker business (which is hard and no fun at all). So we should keep our options open, by all means, but avoid using it as an excuse which allows our Indie Hacker business to fall apart.
This is a truly well written article.
Clear, concise and not bias.
👌👏
Thanks. I do have a bias toward coding, but hopefully it's for a good reason 😉
Nice article! For a project I'm currently working on I'm using no-code (bubble.io). Eventually I would like to start learn how to code (probably React JS) but I think a no-coding tool is a good first step to understand the basics of building a (responsive) website as it's more visual and less complicated.
A perfect way to start! Commit to learning and go. 😉
This is the cycle I find myself trapped in. But I agree with learning what you need for the next task. I jump from business books, to UX courses, to marketing strategies and to coding. I’d be fairly confident at saying I know what feels like nothing in each area! But as I’ve been going I’ve tried to do this exact thing and focus on what I need to know in that stage.
That's all you can do - be comfortable with not knowing things, understand what's most important and focus on learning for that. And yes, that will involve a lot of switching. And it will be especially difficult if you are easily distracted or (like me) have ADHD (where your brain focuses on the interesting tasks instead of the important but less interesting tasks). Hang in there - your efforts will not be wasted, in this business or your next.
Nice article!
Thanks! 😀
Super interesting Andrew!
The sentences comparaison with « tell things to do to your CPU » and « tell things to do to your CPU precisely » to explain no code & code is brilliant.
For the « money making » part. I just discovered rather than die & retry to find a problem, why not just picking a $500 MRR ugly tool that already exists in a niche we love and just make the same better. At least with our perception of « better »?
Then, our vision of « better » may be wrong for sure 😂 but focus to robot-making cause problems is already found.
Thoughts ?
Thanks!
Yes, it's a valid strategy to take an ugly duckling and turn it into a swan - this can work whether it's a $500 MRR business or a $100M corporation which investors acquire and turn around.
And yes, it can be a valid strategy for identifying a problem and avoiding the failure in looking for problems. Be aware, however, that there might be other reasons that the tool is only making $500 MRR, e.g.:
Also, we tend to overestimate the importance of aesthetics of a product rather than the value delivered by the product. A friend and I were pondering this the other day - he found a market-leading business with a really ugly website and couldn't get his head around it. We reminded ourselves that this meant that the company was delivering genuine value to customers, value that they cared so much about that they didn't care that the website is ugly. That's what you're looking for - a real problem which is so painful to customers that they are desperate to pay money for your solution no matter how ugly it is.
So yes, maybe it's an ugly duckling awaiting your magic wand to become a swan 🦢. But maybe it's just a turd 💩 and polishing it will just get your hands dirty. Look for evidence of actual demand and actual value and proceed with caution.
As an aside (which I didn't cover in my post 🤔), finding a valuable problem is a genuinely difficult problem in and of itself. There are probably only three ways to identify a problem:
You may notice that 'sit in front of your computer and imagine what customers need' is not on that list. You have to be in the real world to notice problems or ask the potential customers about their real world (using what you learn from The Mom Test).
I hope that this is helpful.
Thanks for your reply, Andrew :) I agree with we have to choose wisely a real valuable problem.
For my example, I took a $500 mrr product but it could be safer to bet on anything between $2K - $10K mrr product that comes with a sort of special note: "there is a real and valuable problem".
I feel bizarre about these thoughts cause it looks like something elastic:
90% of the game is to work on a valuable problem. All spots are on finding one whereas we can just pick one. This will not work every time so far but damn, we can "just" focus on the 10% left.
I've thought about it as a freelance designer. It's not working cause I found some problems, but cause I just pick some and make better solutions (make a great first impression, convert more, sell more, gain seconds of attention...). Why this consultant paradigm is often forsaken by indie makers, who focus on finding a problem whatever it takes?
Weird x)
Thanks IndieHugo. Perhaps I've was too imprecise when talking about problems in my post.
The most important problems are no secret at all. A human has to eat, stay warm and sleep somewhere which is comfortable and safe. A business needs to find customers, pay bills and send invoices. Employers need to find job seekers. Job seekers need to be found. The most valuable problems are easy to identify - they're in your face.
IHers going off to 'find a problem' often results in looking for some obscure problem which no one has ever solved before. And the reason it's never been solved before is typically because the problem has low value (and isn't a problem worth solving) or the market is very small. Yes, a small market can be the perfect place for an IHer to play without any threat from larger competitors, but the market does need to be large enough to satisfy the IHer or it's a complete waste of their time.
It is, therefore, a perfectly valid strategy for an IHer to look at a big problem which has a big market and many competitors and aim to take a little of that market for themselves. The difficulty is that we need insight into what unmet customer needs exist in those markets. If we don't know what is broken about the existing solutions we'll simply create copycat products and compete solely on price. And that's a dumb place to be.
So you don't need to find a never-before-found problem. Not at all. But you must have some insight into what is broken and what needs to be fixed (as Transistor.fm did for in the large market of podcast hosting) in order to not compete solely on price .
This means that you still need to go out into the real world to find those insights / problems.
And, if you take on a business that's struggling, you're going to need insights or resources that the original developer lacked. That's why, after all, they failed to make their business the success that they hoped it would be.
It's highly unlikely that you could walk into a new market that you know nothing about and take on a mediocre business that you didn't develop and do better than the person who spent a year or two trying to understand that market and build a solution for it. That's the same hubris as people have when buying into the stock market and expecting to outperform the market without any reason to justify that expectation (other than uninformed and unrealistic self-confidence).
So buyer beware. You'd be better off finding an insight first and then go looking for a mediocre business which is available for sale, lacks that insight and could be modified to incorporate that insight.
That's really true. And maybe we can be lost into array.reduce() technical stuff and just miss the point x)
But at the same time concretely building a working solution is important, so have to go in.
Super interesting mate! Thanks for your time :)
Love your thoughts.
As someone who held off on learning how to code for way too long, I can only recommend that you start learning how to code and do it now. I started learning a few months ago (for real this time), and it amazed me how smoothly it is coming to me. It makes sense. The programming challenges melt my brain, but its fun. I am learning Go, btw. I can't recommend it enough for beginners.
I was tired of relying on no-code tools, and I am still of the opinion that no-code tools do not offer a fraction of functionality that old-fashioned coding does. The other even bigger factor is cost. Whatever a no-code, super managed service, etc, tool can do for you, you can almost always do more affordably with a little code. That's not always true, but that is what I have seen.
If that is true, it is a huge business advantage to be able to produce a service at a lower cost than you would be able to while utilizing no-code tools.
That being said, there are plenty of low-computation SaaS ideas that no-code is suited for. They are great for getting an MVP out in no time. My concern is when you want to offer that new feature that doesn't have a no-code provider at the moment or your next business requires custom code.
Thanks ChillyCuve, your experience of learning to code mirrors mine. I held off learning to code until 5-6 years ago - I thought I should focus on my strengths and find others for the coding. What I failed to understand was that coding was easier than I thought, more fun than I thought and coding allows you to explore and test your ideas. There are no downsides in learning to code!
As for your concern about choosing a no-code tool for an MVP or not, this is essentially what startups call 'technical debt'. From Wikipedia:
"In software development, technical debt is the implied cost of additional rework caused by choosing an easy solution now instead of using a better approach that would take longer."
It's a problem that doesn't go away, no matter the size of your business. And even if you're coding everything yourself - your first version might be quick and dirty and need to be refactored for countless reasons.
The key thing to remember is that your primary risk is not failing to build a robot, it's building the wrong robot and , therefore, failing to make money.
So don't see your MVP as the path to your final robot, it's not. It's simply a test to work out whether the problem is real and customers will pay. If the problem is real and customers will pay, they will wait for you to refactor your application and turn it into the real thing.
good
Thank you for making the first comment on my post ☺️
Stumbled upon this by accident and really needed to read this...
If you like coding, you should learn it regardless.
If the priority is to build and ship a product, certainly focus on the business side as opposed to the technical development.
But that doesn't mean you can't continue learning.
For sure. But let's not confuse our hobbies (learning to code for fun, woodworking, fishing, gardening, etc.) with our business (build a money-making robot by focusing on the most important tasks).
Let your business be the business (don't let your hobby distract you from working on your business). And let your hobby be a hobby (don't pollute your fun by bringing your business into your hobby).
FYI I also wrote something about not confusing hobbies with business here: https://andrewmackie.com.au/2017/03/hobby-v-real-businesses/