Maybe you just enrolled in a coding bootcamp or software development course. You have learned some JavaScript and want to take your new skills for a spin. You have an app idea, an app development project in mind, and maybe you will even take the opportunity to build the app as your final project for your coding bootcamp’s demo day. There’s only one problem: you don’t know how to create an app.

Maybe you have a couple other fellow programmers interested in building an app with you. You’re all excited, and are already working on the idea of doing a split from the profits. This person gets X percent and this other one Y percent from all proceeds. You think this is free money, cash will pour in as soon as you build the thing.

The biggest problem you face now is your own limitations: you haven’t built anything from scratch before. You have never taken apps to market. You run into a roadblock after the dreaming phase, and don’t even know what language should you do it in, which platform to build the app for (Android? iOS? Both? Web? macOS? All of them?) – or what technologies to use. But you keep repeating to yourself: “I am gonna build it no matter what”.

Do you work on a Mac?

Hustl is a macOS app I made that helps you record awesome time-lapse videos of your Mac screen.

Check it out

We’ve all been there.

So today I wanted to be 100% honest and set the right expectations if you’re in this situation – just as I would have liked someone had told me when I was starting out.

It’s going to suck

If this is your first app, expect it to be difficult as hell. Getting a whole product from scratch to market is no joke.

You not only need the technical skills to build it – but also design skills, marketing skills, etc. Your first few apps will almost certainly be kinda buggy and sketchy. But that’s expected, you just have to push through and ship more apps until you get good enough.

You’re going to face errors every step of the way. It’ll feel like every single step is an uphill battle. Every line of code will trigger some obscure error message. You’ll spend hours googling the errors and you’ll feel like you’re not progressing much. This is not only expected, but it will never go away in your entire career. Expertise will only make you deal with errors more effectively, but the errors will never stop. Things will become easier over time, but they will never become easy.

Distribution, and not tech, is the key

There are already a ton of apps in the market. No one cares about your new app.

The differential part of your app development project is not going to be building the app (any experienced enough developer can do it) – the differential part will be distribution and marketing.

Everyone can post an app to the App Store, but almost no one succeeds in getting users.

The biggest risk of any project is not technological (whether you can or cannot build the app), but getting distribution right. If you fuck up your go-to-market strategy, the app will likely fail.

Without a clear marketing channel you can consistently get new customers from, your app will likely just be one more app in the App Store no one really cares about.

Unless you have an unfair advantage, like getting a celebrity to sign a deal with you to promote your app, or being famous yourself, or having another company or successful project you can use as launch pad, or having literal millions in the bank you can burn in paid ads, or something along these lines… you’re going to have a rough time.

Sit down with your team and manage the expectations. If you’re expecting revenue right away, understand this is just not the way things usually go down.

Maybe read Traction by Gabriel Weinberg and Justin Mares if you’re interested in marketing and learning the few different ways you can get people to use your app. But don’t spend too much time reading books at this stage. You just need to keep churning out one app after another until you’re good enough. Don’t fall trap to the “Super Mario Effect”:

You need to keep doing app after app to improve.

Plus – you’re just starting out. You’re shortsighted and clumsy – things won’t turn out like you first envisioned. Getting your skills to the point one of your apps gets even the first customer is remarkably difficult. It took me years. Sit down, be patient and get ready to get your 10 thousand hours in.

Which technology do I use? Kill two birds with one stone

Tech-wise, I’d say the most versatile language you can learn nowadays is JavaScript. It allows to build apps for every device, from websites, to native-like desktop apps, to hybrid mobile apps.

If you want to build a mobile app, you might want to look into “React Native” or Ionic. They are both JavaScript frameworks that allow you to write hybrid apps (multiplatform apps): that is, you write the code once and that code with slight changes can be compiled as both iOS and Android apps. You don’t need to learn a different language for each platform, you can just use JavaScript everywhere and reuse a lot of the code.

Flutter is another option for hybrid app development, but it requires you to learn a different language called Dart, so I would advise against it.

If you’re building desktop apps, look into Electron. It’s a JavaScript framework to build native-like apps. Don’t listen to purists that complain it eats up a lot of RAM or whatnot. Just use it. You’re on square one, you’re in no position to act as a tech connoisseur and pretend you have the skills to use the most performant language or framework.

JavaScript, HTML and CSS, React Native, etc – that’s all front-end, which is 90% of what your app probably needs to do. Handling files locally, using the device’s capabilities like recording from the microphone or opening the camera, interacting with user gestures – that’s all front-end.

At some point you may need to build the server-side of things, the backend. That will be useful for things like user login, saving user files in the cloud, communicating users, syncing across devices, etc.

If you need to write a backend, JavaScript again is enough. Look into Node and Express.js.

But you definitely can (and should) build the v1 of your app without things like user login. Just get started and make something you can use. You can add user login later.

Start with a toy app first

You might wanna start by building a really simple toy app first. Something just to get your feet wet. Something that helps you get the 30,000 foot view and understand the whole process with perspective.

The app doesn’t have to do anything sophisticated. Just a simple to-do app or even an app that does something simple when a button is pressed is enough. It doesn’t have to take you more than a day or two.

There is enormous value in understanding how all the moving parts fit together first, before jumping in to your grandiose app idea. You need to understand how everything works together, from design to development, to compiling, deploying, uploading to the app store, handling bugs and errors, etc.

If you start out with a toy app, you’ll get something really simple that works well every step of the way: you’ll have a template to follow, something to reference and go look for code in when your bigger, more complex app doesn’t work the way you expected.

Once you understand the workflow from start to end, and have gone through the process at least once, you’re in a way better position to start your “real” app.

Oh, and by the way!

I'm most active on Twitter – follow me to stay in the loop.

You can also join my newsletter, and get cool stuff delivered directly to your inbox.

You'll be the first one to know about my private betas, early releases, and behind-the-scenes stories of an indie entrepreneur! No spam ever, unsubscribe with one single click.

As a quick reminder – I'm rameerez, an indie software developer that's making cool stuff like Hustl or Edit used by people all around the world in 165+ countries, among cool people at companies like Google, Uber or Adobe. My work has been featured in media like Fast Company, Vox, or The Next Web.