Flutter burst onto the scene five years ago, promising beautiful apps with code you could write once and deploy everywhere.
Today, with over 700,000 apps in the app stores, the question I hear most isn’t, “What is the best state management?”.
After presenting to 20+ conferences and collaborating with 5k+ developers globally this year, I always get asked a lot: “What makes someone a Senior Engineer in Flutter?”
In this article, I’ll share the top three skills that I find valuable that helped me level up from being a Junior to becoming a Senior Software Engineer in Flutter.
1. Technical Breadth and Depth
While Flutter offers an easy and declarative way of writing UIs and layouts, most start to experience difficulties when implementing custom UIs using painters or shaders and even working with low-level APIs for animations.
Also, given that Flutter is designed for deploying apps on multiple devices, trying to make an app work on mobile, web, and desktop can get very intimidating.
To level up as a Senior Engineer in Flutter, you need to find the right balance with your technical breadth in Flutter and diving in one of the technical depth:
- Learn how to create UIs from scratch.
Implementing your custom UIs with painters, shaders, and animations can help you appreciate Flutter more.
It helps you write better and performant UIs, which you can apply to other UI toolkits or frameworks, and negotiate better with your product designers if there are technical constraints.
- Specialize on one platform first.
Trying to master all of the platforms at once can get very intimidating and might be confusing for some.
Some level of mishaps could happen given the complexity each platform brings.
I was a native iOS and Android engineer before I used Flutter, so it made sense to me to start and jump right ahead learning desktop and macOS development with Flutter.
- Build CI/CD pipelines for your projects.
Distribution is a critical aspect of writing apps. This is one of the most essential steps to get the apps delivered to your users.
Knowing one or two CI/CD providers like GitHub Actions and Codemagic is a good start.
If you’re unsure which technical depth you want to dive deep, start with the needs of your team first and fill that gap.
Try to understand what makes the most impact on the business and go from there.
2. System Design
System design is a blueprint for building complex systems.
I witnessed a lot of Senior Engineers lead several successful Flutter projects by mastering this skill.
Flutter can be integrated with several server APIs, database providers, and 3rd-party vendors.
Flutter can also communicate with platform-specific APIs for more complex integrations.
With that said, when was the last time you designed a system from scratch? Have you drawn a diagram or created a design doc?
Having a good foundation in systems design will help you maximize what Flutter offers and help you build efficient systems from end to end.
You can develop this skill by:
- Learning from others
Learning from others who are more experienced and have built multiple systems can give you valuable feedback and insight on how to write your systems.
- Reading books, articles, and whitepapers on system design
I find the book Mobile Apps at Scale: 39 Engineering Challenges by Gergely Orosz helpful and is my go-to reference whenever I design or solve challenges specific to mobile.
- Building your own projects
Working on side projects that allow you to explore combining different tools, try the “best practices” advice you’ve read if they’re really helpful, and make mistakes with little to no risks, which can eventually help you grow much faster.
3. Take Ownership
One of the skills I know the best Senior Engineers have in common, whether it’s Flutter or other technology, is taking ownership.
Whether you are an IC (Individual Contributor) or a Tech Lead, taking ownership starts with you.
It doesn’t matter what type of work: a bug fix, a small feature, or a new big project.
Your work should reflect who you are and what you want to become — a Senior Engineer and beyond.
Working in a remote setting with a 12+ hour time difference as I do can add to the challenge.
What I found working well is to over-communicate for feedback or requirements, share blockers early and more often, and be visible in the work you’re doing.
You can start taking ownership by:
- Owning your work end-to-end
By owning whatever work you have for a small feature or big project, you will put your reputation on the line and give it your best shot to make deliverables on time and ensure the quality of the end product.
- Communication should be worked on both ways — up and down
First, be proactive at managing up your managers and setting the right expectations for the work, and provide feedback, especially if something isn’t right. Then, you have to over-communicate with your peers or team to align everyone.
Remember, taking ownership doesn’t mean putting yourself above everyone else, your goal is to drive influence without authority and take initiative for the growth of your team or the company.
Working with Flutter has been a huge part of my career.
It enabled me not only to go deep with mobile and other native technologies but also allowed me to think more about the product I build, work on products for startups and large tech that people use and care about, and truly care about the end-users.
If you are honing one or two of the skills above, you’re almost there! Make sure to truly know the foundations not just in theory, but also to apply them in real-world experience.
At the end of the day, engineering titles are only as good as you can do it.
Have fun and good luck!