When you discover a new technology that excites you, you want to master it. A common practice to start learning it, is to create lots of small projects before starting your big project. But, if we start with an app that already has 10.000 active users, an advanced UI and a considerable complexity?
Most probably the first thing that comes to your mind is the word impossible.
Well, I did exactly what I described above and the result is very far away from being catastrophic or impossible. I am going to tell you, step by step, my experience with the last app I’ve been working on since COVID entered our lives. I launched this app a few months ago in the Spanish app stores (replacing the previous one developed on Ionic). By the way, an existing number of active users is not necessary, and if you consider developing the simplest app this is your place too.
Before getting into the matter, I am going to tell you a bit more about this app called Journify. It is a mobility solution that connects drivers with passengers for the daily routines, especially home-work-home routines. If you are a driver, you can post your planned weekly trips, and if you are a passenger you can search for trips and join the one that matches your planned time and destination.
Now we can start.
Phase 1: Learning Dart
With a medium knowledge of development and willingness to learn new technologies, entering the world of Flutter doesn’t have to be a painful process. In fact, it’s completely opposite.
In February of 2020, COVID-19 was starting to threaten Spain and a lockdown was expected to start soon. It was the perfect moment to lock myself up at home and learn something new. The first step was clear: learn the programming language used in Flutter: Dart. I started with a video that was claiming “Dart in 2 hours”. Well, I don’t claim this is the best way to learn Dart, but if you are eager to start the whole thing as soon as possible like I was, this video could help. However, I believe it’s very important to read the Dart language tour from the official website of Dart.
Of course, if you want to spend more time learning this language (what is highly recommended) the best is to take a look into online course platforms and find a decent Dart course.
Phase 2: First contact with Flutter
After learning Dart’s basics, I wanted to start using my new skills as soon as possible. So I began following Flutter’s official steps how to get started.
When you finish that section, you start to dream about all you can do with Flutter, fantasizing how amazing your new app could be. I would tell you to be careful of that illusion because the road is longer than it looks like. However, having that motivation is the key to finish a project with success. So keep dreaming.
The next step is to dive into the development section and take a look at some examples that we can find in the section “Samples & Tutorials”. Especially take a closer look at the examples of architecture.
Phase 3: Let’s do it
The time has come, we are going to put into practice our new knowledge. In my case I had a design to work with, and that made my life much easier. If it’s your case too, I suppose you will take the easiest screen to start to work with. I did the opposite.
Choosing the most complex screen can lead into future problems like having to redo most of the work. We have to keep in mind that our knowledge is very basic and we are going to learn on the go. However I chose one of the most complex screens to start the project with because it had all the features:
- It was the main screen.
- It had more UI elements to be used in the rest of the app.
- It had complex enough functionality to test what I have learned, to find more documentation and learn to develop the basics like HTTP requests to a REST API.
- The UI was challenging.
Are you confused now? You don’t know which screen to start with? From my humble point of view, I will tell you that decision depends on how “brave” you feel, how strongly are you willing to build, destroy, rebuild, and how comfortable you feel with Flutter.
Phase 4: The learning curve
Maybe, most of you think that it’s a bit crazy making your first project with Flutter based on the app that the whole business is depending on. Well, if you have at least 2 years of experience developing apps and you dedicate the proper amount of time to Flutter, the only price to pay is going to be the time invested in the famous learning curve.
We don’t want to end with a non-scalable app, in which we cannot work comfortably or which is full of errors. That’s why you are going to face a 3 months period of minimum app development progress.
I recommend you dedicating your full days to document and research different examples and ways of doing the same functionality. Search for all the information you can and don’t stay with the first thing you see (Medium is a good ally, you know it already). “BLoC Pattern” and “Provider Pattern” are two concepts you are going to hear often. If in this stage of development you already hear about them and you started to apply them, you are on the right track.
The next few months you are going to stick to the screen, go late to bed and be obsessed about some functionalities of your app. I am not going to lie to you, maybe more than one moment of frustration or worrying. I had the “luck” of being locked down just in this stage of the development, so being late to bed and even not sleeping at all was not a big problem. I suppose you know this lesson already, but: if you cannot solve something, it’s better to go to sleep and try the next day. Don’t repeat my mistakes.
Phase 5: Excess of Flutter
In approximately the third month I started to feel that I had enough of Flutter for that moment. So, my working hours dedicated to the project started to decrease and I gave a bit of oxygen to my brain. So, a month after, I recovered my energy and my eagerness for Flutter. I was able to get back to work. I think being able to manage these ups and downs, accepting them like something natural is the key in order not get tired of a project.Whether you have to report your working hours, whether you work by goals or on your own, I recommend you Toggl for tracking your time. It helps a lot to be conscious about the time that you are investing to be able to manage your energies better, and ensure that every hour you devote to the development is as productive as possible.
Phase 6: The light at the end of the tunnel
Without any doubt, the most satisfactory stage of the whole process of development. You are working for 5 months on the project, all the puzzle pieces start to connect and your skills have matured enough to develop tasks fluently and with quality.
You give time to refactor old errors and develop new features without any problem. You don’t get stuck easily and you start to see the light at the end of the tunnel. You feel that you can set an exact release date to production.
But, actually, you cannot. Developers are always late. Think forward.
Phase 7: Time to go live
Basically you are going to spend around a month more finding and fixing errors. Thinking that the app is almost done and realizing about some features that you forgot to introduce. Remembering something you are not completely happy about. The app goes from hand to hand among friends and colleagues. They give you their opinions and add new questions on things that you were sure about. Then you realize maybe it can be improved.
It is not the most beautiful stage, but your “baby” is starting to show his head and that’s very relieving.
After some last minute changes, infinite testings and bugs’ hunt, at the end, the moment of going live comes. But something fails in the iOS build and you have to postpone the release until you fix whatever is “broken”, or until you match the new and extravagant Apple requirement.
When you make peace with Apple, your app is uploaded to stores and ready to publish, enjoy the moment and look back to digest all that you have learned. It is the best way to keep improving every line of code you write in the future.
Now you can go live.