I started introducing Flutter in my life very doubtfully. I wanted to develop one particular side project but I was not sure if I should do it for Android only or stretch myself and do it for both Android and iOS with Flutter. Back then I knew zero about Flutter and was negatively influenced by nu-tech haters that literally called Flutter shit. Time-framed, that was the period before my second child was born, and she is 1.5y old already. So I know about Flutter as long as I know my daughter. Love and Love.
From this perspective now, learning the technology was one of the best decisions I've made, for quite some reasons. I thought to summarise the 5 most important realizations I had on the journey, just in case somebody else is struggling to make a decision if they should or should not adopt the framework for their next product.
Here is how it affected me.
I was very technical person before I started learning actual product development. I was curious about deep technologies like reactive architectures, state machines, frontend design principles, functional programming. I was reading lots of literature back then for those topics and always wanted to rewrite that feature in the latest thing I've learned. Eventually that led to burnout and frustration and pushed me to something else, even more abstract. To a large extent I have developed bigotry for few specific technologies. Nobody should've said anything bad about rxJava or functional reactive programming. It was a flamewar.
But then, when I started to write simple use-cases in Flutter, the first thing I noticed was how fast the feedback loop is and how easy it is to actually focus on software development rather than struggling with frameworks, setups, pipelines and whatnot. I started to see and experience other areas that I knew nothing about before. I got the chance to work with Firebase as a realtime database and express myself in a way that was still scoped around the problem and was not being distracted by simple things like build-time or caching. All that changed my perception about technology and, potentially subjectively, led to chase away that nose-high character I was, always in love with the technology I choose only to be able to justify my decisions from the past. Again, this comes with a price and the price is that once you get to see how performant you are using Flutter as a developer, you'd feel motion-sickness from almost all other frameworks.
¯\(ツ)/¯
Honestly now I am very much convinced that what we have from either Google or Apple as ecosystem is highly broken for so many reasons. Before Flutter I didn't know anything about deploying iOS apps to the App Store. Learning about that process brought me to another level of appreciation for iOS engineers that have to regularly do that, some even daily 🙇♂️ It is not easy. Everything from setting up XCode to signing and setting up the iTunes account for publishing is confusing. If you have never had an experience with this process before, I'd suggest you to either be well prepared to spend significant time doing it before you launch or start planning when you'll be learning that. Then as part of the whole deployment process is Apple's reviewing process that goes back and forth till all criteria is met and application approved. anxiety Again, this is manageable and not that scary 😱. It just takes time to get used to.
Another option is to find somebody and pay to do the whole process for you.
I was a huge fan of Kotlin so the first thing I was whiny about learning Dart was the missing ADT features of the app. How can I have sealed classes without using libraries, how can I do deep copy of an object? At this phase you have two paths, the first would be to go the road of complaining and never achieving (it will end up in abandoning the learning process) or giving it a chance to the language to see its full potential. I chose the second one (but I was very edgy on this decision), and that is when I got to know few great features like the factory constructors and generic data types (like dynamic vs Object), lexical scopes and also few great plugins that helped me easily generate copy operators for my custom data objects. At some point the extension methods were released for Dart, that made some of the workarounds much easier.
Point is, Dart is not Java and is not Kotlin. But also, German (language) is not Swedish neither Spanish. As simple as that. To the person that is open to learn new technologies, Dart will not be a constraint on the way.
I shortened lots of curves by reutilising what I already knew - IntelliJ (via Android Studio), so I set it up as an IDE of choice and didn't spend a minute more rethinking it. Worked fine, still does. There are tons of people that have said good things about VSCode and are doing their every-day work with it, and you know what? It also works. Do not overthink this, just use whatever works and focus on the value - building actual things.
This is another realization I had from the process of learning Flutter. As young as the technology is, it became popular a lot fast. I can name 5 companies that at the moment (during the crisis) have open positions for Flutter developers in Berlin. But what they measure the most is an actual hands-on experience with the framework rather then academic knowledge. I guess this comes unsaid but, the biggest boost to learning any language is to start building something with it. Not doing or writing code with it. But actually building something that you can push as much as possible to production. It can be simple Corona (sorry future people) Tracker application or a note-taking app, regardless. Make it vertical and do not just focus on the UI part, do it top to bottom. Implement one whole feature, then another. Then try to see the rest of the framework from non-technical point of view. And there is lots to be done there also (example: making sure that the Firebase integration works for both Android and iOS and if not - finding out why not and fixing it - this is configuration).
Get used to lots of 3rd party libraries to achieve great things. Just one advice in advance (and this goes regardless of Flutter): do not use libraries for your architecture. Especially not for something that you want to actually release. I would really recommend dig into the articles of Didier where he explains reactive architectural concepts, and try to understand this as part of your learning process.
Other than that, be very cautious to not overuse libraries because that as a habit makes the maintenance expensive. Try to measure what can be done by you and what can be reused from a library. This is a gut feeling that more experienced engineers already have, I guess, but the way I think of it is: if it's complex and there is library that had been maintained the past 3 months - I will use that. If not I rethink even the feature and adopt simpler solution written by me. Active libraries (with lots of users) have lots of feedback and improvement streams. The common sense applies here too: do not reinvent the water.
That is it. I am very happy to help anybody struggling to make decision and even help with some technical problems - for free! 🤯👏 Ping me on Twitter.
I have a similar story where many developers get stuck with unnecessary questions, such as which editor to use or whether the technology is good or not. I believe you just have to dive into the tech and try creating something.
Hi Alex, do you have few minutes to talk? Please ping me.
hey sure, reach out at twitter.com/itsbalal :)
Hey Aleksandar, congrats for sticking it through on Flutter! I'm trying to launch a prototype with Flutter, do you have any good resources on debugging? I'm finding dev tools confusing .
Well I'd say it's not straight forward to get to debug an app. I'd first say: accommodate with your environment. Regardless If it is IntelliJ or VSCode, you can either use the integrated debugger or DevTools (really powerful as of lately). Here is a good article on it: https://link.medium.com/CmuZWoJwQdb
Yeah not straight forward at all but trial and error will eventually get it done lol. Thanks for the article.
Thanks @itsbalal! A very valuable post, I'm stuck in the decision making process and this has helped. Would be great to catch up further so I can pick your brain re Flutter.
Sure! Ping me on Twitter anytime!
http://twitter.com/itsbalal
Thank you for your insights Alek, im actually starting to learn flutter to develope some projects, following the Angela Yu, just im stuck with some more complex concepts and kind of lost momentum. I would like to ask you if would you recomend focusing on this concepts until i get them or start building basic things and learn them by the need of developing an specific goal?
hello! Just go with whatever you have, many tutorials are great nowadays.
I guess you mean on the ones presented in the tutorials from Angela? Focus on whatever gives you value back. Start building small app and see how far you go. Do not stop, experiment and build on top. Here are some resources I found useful:
and a book I found best: Flutter in Action
I started last year just by reading this: https://dart.dev/guides/language/effective-dart
Thank you Alek!, really apreciate the resources, gotta give them a shot, specially the book.