Ever wondered what it's like to work on an enterprise mobile app with over 2.3 million lines of code in a team of 60+ #Flutter engineers? Or how to scale your own project effectively? Dive into my latest Medium series for insights!
In this series, I break down the core principles, methodologies, and technologies we use at Tide to build and scale our mobile applications. Whether you're a seasoned developer or just starting, there's something here for everyone.
The series is split into 4 parts:
- ??Introduction. Don't skip this one ?? https://medium.com/tide-engineering-team/project-miniclient-introduction-0a94aefa5638
- ??? Utilities: These are essential tools or helpers that perform common tasks throughout the app. By extracting this code into reusable packages, we adhere to the DRY (Don’t Repeat Yourself) principle, making our code more maintainable and less error-prone. https://medium.com/@olexale/project-miniclient-utility-layer-fc9ff4a11d6f
- ?? Features: These are the building blocks of the app, implementing business logic and providing functionality that end-users interact with. Each feature package is self-contained, making it easier to maintain, update, and scale the application. https://medium.com/@olexale/project-miniclient-feature-level-1030f3174e79
- ?? Application: The application package combines various features to deliver a seamless and comprehensive product to users. It integrates different feature packages, enabling them to work together harmoniously. https://medium.com/@olexale/project-miniclient-application-layer-aecc0793e31f
?? Ready to dive in? Check out the full series on Medium and start transforming how you approach mobile app development!
Senior Mobile Engineer (Flutter)
7 个月Hey Oleksandr Leushchenko - a nice article you got there! I especially like the part with DI containers and initializations. ?? I have a quick question though: How do you usually handle the "Missing dependencies" warning when you run the injectable generator? For example, the "MarvelCharactersBloc" depends on the "Monitoring" utility package, yet it is declared outside of "features" part of the project. When you run the build_runner it will complain about the missing dependency... I presume using a simple "ignoreUnregisteredTypes" in the InjectableInit would silence the warning, yet this does not seem like a best approach to me. ??
Fractional CTO / CPO | Product Journey Specialist | MedTech Expert
8 个月Very interesting read! What a fantastic insight into how larger teams are using Flutter ?? It’s clear to see that Tides architecture is incredibly robust and scalable, and has given me some ideas on how we could tweak areas of the MyOpNotes architecture ?? I do think however that this architecture has been tailored to cater specifically to multiple large teams working on the same large codebase. I don’t think this is suitable for smaller teams or newer projects and would be better for projects reaching that inevitable large refactor once its at the end of its growth phase. This is due to the large amount of boilerplate and the necessary knowledge of project requirements in advance (something you don’t always have as a startup) making quick iterations and pivots difficult. I would be interested to know if you agree/disagree here. On a final note, I have a question regarding your feature layer. You have defined your models within the feature layer, however you specify that features should not depend on each other. What would you do in the scenario where multiple features use the same model? Would you stick them into a utility class (this feels wrong to me)? An example would be something like a user model.