Making a new app personal project
The suffering and the Joy of mobile app development
Hi! If you are here you are probably a developer of some sort, and be happy because: being a developer is AMAZING! You have the magic of creation in the palms of your hands tied with the ability to use it.
Until… you actually want to use it in order to build a new project.
It’s very easy to fall into several pitfalls:
- Should I use any frameworks to build it?
- What’s the best color to use on the interface?
- What should I do with the app Icon?
- Is it… really gonna be used by anyone?
And… it's easy to get frustrated, disappointed, feel overwhelmed, and kinda give up at some point — without finishing your project.
So I'm here to tell you about how I approach personal projects, get time and ideas, and just try to keep it going little by little until it's finished.
These are not, by any means, rules you need to follow in order to succeed. But I hope it may inspire you to work and finish your projects ♥️.
I'll be using as an example my latest project, an iOS app called Music Eye which converts sounds into beautiful animations. You can find it and download at the AppStore if you want to take a look!
Getting an Idea
I'm a developer and I WANNA DO SOMETHING!
Great! That's the spirit!
But.. what did you say you were going to do again?
An idea can come from any sort of inspiration, you saw something that you liked, you found a problem with something, you found a business opportunity…
I like at some times, to venture into unknown fields to me. So I'd watch a YouTube video about building 3D chess pieces or making colored soap, or even someone playing anime songs arrangements on piano. And it's not like I wander through these topics actively trying to find an idea, I use them to get to know more stuff and if I can find something I like I can turn it into an app or service idea to build.
To me, it's important you find a topic that you like to work with, otherwise, it will just become a burden to work on your own project — and nobody wants that.
So, read/watch/listen to new things, talk to your friends, and you will find several ways that you can create something (big or small) that could be used by someone.
Don't focus on only creating big things, I like to think that even if my users are going to be a small group, I'm still making a difference for someone, and I just love to do so.
Building your project
With an idea in mind, let's rock it!
First: Get your tools
What is your project about?
What will it need to be completed?
Do you know all the tools you are going to use?
Don't block yourself because you chose a topic that you don't know anything about right now. Part of the fun is learning a new skill to do it!
Last week I started a project towards music and I wanted to transform sounds into images. And at the topmost requirements for this project, I had never done anything with microphone access, NEVER. I had absolutely no idea what microphone permissions, APIs, methods, or anything remotely related to it looked like.
So I started looking into the internet, and, oh boy, Google is your best friend in here. Someone, at some point of the internet and StackOverflow existence, has probably worked with this topic, and they left behind a nice bread crumb trail for you to follow.
And, if I can give you a tip, be open to using libraries and frameworks to help you build your project. They are there to solve a problem, or to simplify some kinda process, and if you are building a project on your own, they will certainly help understand your needs and guide you through the project.
As a matter of fact, while I was working on the Music Eye app, I found a sound library called AudioKit, and it was my starting point for understanding what I had to do, and how I could work with a microphone and sounds.
Also, READ THE DOCS, they will give you a clear vision of how to use the libraries and frameworks.
You don't need to deep dive into the documentation and get crazy understanding "how the hell the lib converts a sound wave data object into a numeric value?", most of the times, understanding a top level of the lib is enough to your work, and if you are curious, you can make the deep dive later.
So, get your topic, and gather the tools you'll need to start it!
Second: Start from the main feature
It's easy to get stuck at the beginning of a front-end project imagining: "OMG! How should my app look? What should I use to build this interface? Does this button should stay at the top or at the bottom of the scene?…"
And… just let all of that go.
Do the minimum necessary to get directly to your main feature, and start working on it. It doesn't matter if you have the most beautiful and usable interface if the feature doesn't work.
As I was working on my music project, the main goal was: Can I detect a sound and tell which note it is? And it was where I focused on the first days: to make the main thing about it work. The result of my first days of work was just a black screen, with a label with the name of the note. It may not look like much, but, to me, it represented I had all I wanted to build the rest of the application: I could correctly identify notes and display them onscreen.
It probably won't work as you expect it to at first. But do not worry! Keep working and try to figure out what you need to do so it can work as you expect. Maybe you'll need to rethink your approach to the problem, and that's also ok, as long you are still learning something new from it.
Third: Add your vision
Nice! You have proved your concept and you have a working main feature!
Time to make it behave as you want it to. That goes beyond what you need to make it work, and into the field of what should it do with your base.
For the Music Eye, I wanted to draw the notes captured on screen, as a timeline view experience (like a MIDI file should look). And suddenly I had a new challenge: Converting a music note I captured in the microphone, into a different visual thing.
How can I do that? Well… I don't know. So, I started thinking about the numbers I had, screen sizes, timers… And eventually, I got to a way to calculate, given a time from my timer, where each note should be plotted on the screen, and just then I wrote the code to do so.
You have successfully implemented your main feature and made it work as you wanted it to!
I think now it's time to go user-friendly, build your interface, how to use the feature, buttons, colors, icons… You actually want people to be able to use it, right?
And if you are not used to doing this, I suggest looking into references you like. For example, you want to build an app initial screen, but you have no idea what to do. Look into other apps, not just one, but a bunch of them. Find what you like and dislike about their interfaces and build your own!
And there is no need to start crazy, make a simpler interface, make sure the features are easy to find and understandable, and later you'll have the time to refine it.
Fifth: Go crazy
Now it's time to go crazy. My favorite part: What else could we do that would be really nice to have?
And it could be anything:
- Making the interface pop;
- Add a sharing button to tell your friends;
- Adding a new feature to the application!
Look at your project and wonder: What is it missing? What would make people really enjoy using it?
And the secret here is that if you decide to add a new feature, you may trigger the same cycle all over again.
For instance, I decided to add a camera capability to the app, so you could record yourself while playing and drawing your notes. How do you add a camera view to an iOS app? I had no idea! So I went back to step 1, but now with a new feature, and started looking into it.
And I did it several times on this project, from camera to new displays, to even adding a Mandala generator... Each step had its challenges, I had to study and think about how could I do it. And the goal is not to find the best solution at first but to implement any solution and make it work. We can always improve it later.
Step 5.5: Oh no! Something went wrong 😭
You had an idea, you studied it, and found out that it was not possible to be made, or it was going to be just. so. much. work. to. do. that it made you give up on it.
Calm down, and take a step back. It's ok to cut features out if they cannot be done, and you don't have to abandon your whole project.
But it may also be useful to take the step back and try to find an easier solution for it. Maybe it's not the best for now, and it doesn't work as you expected, but it's always good to have a first usable version than having nothing at all.
I stumbled on this issue while trying to add the Mandala effect to the Music Eye app. I wanted to build mandalas with the song, using shaders, so they could grow and change according to the song…
So I started studying shaders, and, dear Lord… If I was going to do it with shaders it was going to take a lot more time to do. So I took a different approach, where I draw my mandalas, and I displayed them using the music parameters. It's not the same thing, not the exact result I wanted, but it turned out pretty good, and I'll have time to study shaders later and add them to the project.
Or not, life is to short to learn shaders from scratch.
Hahahahaha just kidding, if it's your thing, just go for it.
Step 6: Test and Validate
Test everything. And with testing, the bugs always come.
But solving bugs is part of the life of every developer, and it wouldn't be different on personal projects.
Make sure to test everything from your feature to your layout, from different devices, browsers, colors, days of the week… And prevent issues from going on when you publish it.
But if any bug actually gets published, that's also fine. You are doing a new thing just by yourself, you can publish it and refine it with the time and feedback from your users.
At last, publish it
Just do it.
That's the best part, seeing your baby going live and walking the world. Just an amazing feeling.
The publishing process can be a pain in the ass tho. You will probably need to write a bunch of stuff, make screenshots, preview videos, legal disclosures…
But there is also no need to rush, everything is ready, and this is the last step to take. Make sure everything is correct, and when finished, press that button so it can go live!
It can be difficult, but trust me, publishing it is worth it!
Find the time and a workflow
My main job is not having ideas and building multiple personal projects for just the sake of making them — I wish.
So, I had to conciliate having a job (which pays my bills) and working on my side projects.
The main thing is: You don't need to rush your side projects. Use part of your free time to study, and code it, try to create a habit to work on it. 30 minutes after your job, one hour at the weekends… And if you work as a developer you may even try to bring together what you want to study for your project with something you can use at your job.
I think that the most important part is to like your project, and use it to find the motivation to work on it! If you really want to, you have the tools, and you are motivated, it will be easier to organize your schedule and open a few time windows to work on it whenever possible.
BUT if you dislike it, it is going to be absolutely horrible to even think about taking time to work on it. I do not recommend working on a personal project you dislike. Really. Just don't.
And you don't need to work on a single thing at once. If I was feeling tired of studying something, I'd move to work on the app icon, or picking the app's colors, making a color picker feature… Move around the stuff you need to do as you feel that you want to change your focus.
And keep coding!
That's all for today folks, I hope this article could inspire you to work more on your personal projects, and I think it works for every kind of project, not only ones that involve programming stuff.
It's an amazing feeling to publish anything that you did, and get feedback and uses from it. Something feelings from mission accomplished and wow, I made a difference for that person!
And keep in touch with your previous projects, go back, check the review, correct bugs, maybe add new features. The first version doesn't need to be gigantic and full of stuff — but we can get in there with time! And if you do small features at each time, it's easier to see the project grow, give more value to the users, and solve bugs (because if you have everything at once, anything could have possibly caused the bug).
And professionally it's always good to have projects to talk about and expand what you know in your field by taking on new challenges.
If you'd like to know more about the Music Eye app, I have this YouTube video explaining more about the process of doing it (in Brazilian Portuguese).
Believe in yourself, get an idea, gather your tools, and keep working on it.
You never know what it may become in the future.