Majid Hajian

Majid Hajian

DevRel at Invertase.io

Oslo, Norway

Majid is a Google developer expert and passionate software developer with years of developing and architecting complex web and mobile applications. He is an award-winning book author at Apress and instructor at PacktPub/Udemy and Pluralsight. His passions are generally Flutter, PWA, and performance.
He loves sharing his knowledge with the community by writing and speaking, having workshops and video tutorials, contributing to open source, and organizing meetups and events. He is also the organizer of several big Nordic conferences and meetups, such as FlutterVikings!

Area of Expertise

  • Information & Communications Technology


  • progressive web apps
  • JavaScript
  • PWA
  • flutter
  • dart
  • JAMstack
  • Firebase

Scaling Flutter architecture by Leveraging strategic Domain-Driven Design

Architecting software, especially on a large-scale where it needs to meet the business requirements is always a challenge and Flutter apps are not an exception.

Strategic Domain-Driven Design techniques ensure your application is optimized to support business goals while identifying cohesive modules, known as bounded context which creates a maintainable, comprehensible codebase by isolating dependencies and describe business value.

In this talk, I share my knowledge of architecting a large scale flutter app by exploring the ubiquitous language, the bounded context, sub-domains while they are being implemented in an application. I will go through Layered architecture by touching Clean and Onion architecture. All in all, You'll learn how I attempted to architect a (large-scale) Flutter application by technical solution and appropriate methodology in order to have a sustainable app.

Leveraging Stream APIs within Service Worker

The Streams API provides an interface for reading or writing asynchronous chunks of data, only a subset of which might be available in memory at any given time.
The API helps to enhance UX both in a SPA or MPA (Multi-page) architecture. Using the Streams API within our service worker makes that possible. Workbox Streams abstracts the details of how streaming works.
In this short talk, you will learn how to leverage the powerful Stream to enhance UX and boost the web page's performance.

Let the main thread breathe!

The main thread, on the web, has a lot of responsibilities. At the same time, web apps are getting more sophisticated every day. Therefore, the main thread gets too busy that will disappoint our user by showing janky frames! The off-main-thread architecture ensures apps run smoothly on every device for everyone.

In this talk, we will go through the possibilities in browsers such as WebWorker, Worklet, and WebAssembly by introducing practical tools that allow us to boost our user experiences.

Talk Agenda:
1- Introducing the problem, event loop and how the problem occurs
2- Example of Web worker, an old friend and underestimated feature
3- Introducing a new Solution to work with WebWorkers
4- WebAssembly, a new friend and powerful, it made easy to write it with AssemblyScript.
5- Worklets, a baby that is growing in the browsers, accessing low-level rendering pipeline and it's very performant.
5- And finally PWA and Service Worker, in fact, this doesn't help directly in browsers but will help to handle processes like offline browsing, push notification and etc. I built an application that works offline and accepts web push notification.

Applying DevOps in Flutter mobile development

Adopting DevOps in mobile app development can be a game-changer and ensures teams become more productive in terms of execution and collaboration. Flutter is known for its fast and practical development experience, which is a great candidate to deliver your applications quicker to your customer.
However, there are many challenges while developing a mobile app for Android and iOS, such as automatically bumping build or release versions, running tests, checking code coverage, formatting, code signing, sharing keys among team members effortlessly, and writing changelogs, and more. These are just some repetitive, time-consuming tasks that may lead to inconsistency.
In this talk, I will demonstrate several approaches and tools to address the issues above.

Problem: Some things in the mobile development world, such as code signing for iOS apps, are complex and time-consuming.
Solutions: Automate as much as possible and create a consistent environment for building on all platforms.
Result: Save time and money, and at the end of the day since delivery and development are faster, your customer will see the result quicker.

The outline for the talk consists of the following:

1- Develop fast, Deliver fast an Android or iOS app
2- Consistency in Mobile development app codebase (Git Hooks and more)
3- Sharing Code signing profiles and certificates among team members!
4- Automate build and version number
5- Automate deploying to Google Play and Apple Connect
6- Automate Writing changelog
7- Automate Enterprise deployment to Apple Connect with several schemas and flavors!
8- last but not least, deploy consistently on all platforms and CI tools

Flutter, up and running!

Flutter is a cross-platform, mobile development framework created by Google. With user-centric design in mind, Flutter allows developers to create beautiful apps several platforms from a single codebase. Flutter is well-known for its productive and fast development experiences which I will prove by doing live-code.

In this session, I will walk you through the fundamentals of Flutter and Dart that make you ready for building your first Flutter app with ease and comfort.

Basic talk for those who want to start with Flutter and want to learn it quickly how to start.

1- Introduction to Flutter
2- Introduction to Dart
3- Basic of Dart for Flutter development
4- Flutter Fundamentals
5- Introduction to the most useful Flutter Widgets.
6- Create a small beautiful app to get a sense of development with Flutter to make the audience ready to continue building their apps later.

Taste of web with Flutter

The web is the largest application-delivery platform in existence and introducing progressive web applications takes it into the next level.

Flutter, a UI toolkit to create beautiful cross-platform applications, supports standard web technologies like HTML, DOM, Canvas, JavaScript, and runs PWA on the browser; Not surprisingly, with only one language, Dart!

In this session, I will fly you from a typical Javascript, CSS, HTML web development to Dart side with Flutter through live-coding of a beautiful progressive web app!

1- Introduce to Flutter and Flutter architecture
2- Dart and Flutter fundamentals
3- Responsive web applications
4- PWA with Flutter
5- Sharing code between several platforms.
6- Live-coding

PWA, advanced patterns and strategies!

Building progressive web apps become the norm of web development these days! In fact, we are being introduced to more complex patterns and strategies to create a PWA. For example, When I build my book's website pwawithangular.com, I considered several caching strategies and patterns to deliver fully offline and high-performance web applications that can load under 2 seconds with 3G internet. In this talk, I will share how I could manage to build a fast and reliable PWA by using different caching strategies, advanced PWA architecture, and patterns.

Efficient debugging with Dart DevTools

Debugging takes a big portion of development time; hence, it's crucial to become an efficient and effective developer with an appropriate tool that could, ultimately, save our time.
Dart DevTools is a web suite of debugging and performance tools that can work standalone or integrated into your IDE, aiming to ease debugging different Flutter and Dart application parts, including layout issues, performance problems, Network requests, and many more.
In this talk, you'll learn what a Flutter developer can do with these tools and how you can get the most out of your development time using Dart DevTools.

Running automated Flutter integration tests on a device farm

Integration testing (end-to-end or GUI testing) attempts to simulate a user interacting with your app by doing things like pushing buttons, selecting items, and typing on the keyboard to avoid having humans do that kind of repetitive work. A device farm like Firebase Test Lab or AWS Device Farm services allows you to run tests across various devices and device configurations simultaneously to check whether the app works or performs well.
In this talk, you'll learn how to use the new package integration_test, a more straightforward way to test your Flutter apps supporting Firebase Test Lab and running it on the cloud.

Scalable Flutter app development

With Google’s Flutter framework continuing to grow in popularity for companies and developers alike, the need for an understanding of utilizing the framework in a large-scale context has become more relevant than ever. In this talk, I will share knowledge on how to start a project to automate mobile development. We will review scalable layer architecture, state management, and continue enhancing code collaboration and team culture.

1- Learn how to automate and apply DevOps in mobile development

2- learn how to use Layer architecture in the Flutter project

3- Learn how to do code collaboration and team culture enhancement at scale

Flutter PWA, what and How?

The web is the largest application-delivery platform in existence, and introducing progressive web applications takes it to the next level. Flutter, a UI toolkit to create beautiful cross-platform applications, supports standard web technologies like HTML, DOM, Canvas, JavaScript, and runs PWA on the browser; Not surprisingly, with only one language, Dart!

But, what exactly is PWA? How Service Worker as the brain of the PWA works? How can Flutter web be turned into a progressive web app? What are the advanced patterns in creating PWA that can be applied in Flutter web?

These are all questions that I will answer in this session.

Fullstack App with Flutter and Firebase [workshop]

Firebase and Flutter are two impressive stacks these days to build world-class applications at scale. These two have fantastic hand-to-hand features that make us as productive and agile as possible. Flutter is a UI toolkit to help you create beautiful applications that can run on six platforms. Firebase, on the other hand, is a fantastic serverless approach towards the backend as a service to help you run your applications at any scale.

You'll explore what the services are in Firebase. Next, you'll discover how to integrate a Flutter app with Firebase and use Authentication and Analytics services. Then, you'll delve into Firebase extensions. Then, you'll learn how to benefit from Cloud Firestore to manage your database and message to deliver push notifications to your users.

At the end of the workshop, you'll have the skills and knowledge to create a full-stack app using Flutter and Firebase needed to deliver a scalable and high-quality app to your customer.

Each section comes with practices on a working app built throughout the workshop and is suitable for everyone who wants to learn Dart and Flutter from scratch.

The instructor will build a pre-designed page from a production application in the workshop.

- You are familiar with at least one programming language
- You have done
- Install on Windows (Please use this link https://flutter.dev/docs/get-started/install)
- install in Linux / Mac (Please use this link https://flutter.dev/docs/get-started/install)
- Setup Android Studio and Xcode (Please use this link https://flutter.dev/docs/get-started/install)
- Setup Emulators (Please use this link https://flutter.dev/docs/get-started/install)
- Setup IDEAs and Plugins (Please use this link https://flutter.dev/docs/get-started/install)


A quick Introduction to Dart
- Dart variables and Constants
- Strings and String Interpolation
- Dart data types
- Inheritance in Dart
- Functional Dart
- Dart Built-in types
- Dart List/Array
- Conditions in Dart
- Streams and Future
- Dart Standard Libraries
- Package dependencies with Pub

Mastering Layouts, Widgets, and UI in Flutter
- Material Design (ANDROID)
- Cupertino Design (IOS)
- Stateful and Stateless Widgets
- Layouts (Column, Row, Grid, Positioned, Stack, StaggeredGridView, ...)
- Widgets (Scaffold, App bar, Text, ... )
- Styling in Flutter (Color, Fonts, Themes, Images, Backgrounds, padding, margin, borders, shadows, and SVGs)
- GestureDetector and Inkwell

Navigation and routing in Flutter & Basic State management and dependencies injection
- Working with Navigator and GoRouter
- Riverpod

Firebase and Flutter Integration
- Setup Firebase
- Authentication with Firebase
- Setup Firestore and CRUD operation
- Firebase Extensions

Networking Layer
- Working with Rest API
- Working with JSON, Serializing, and Deserializing

- building for iOS
- build for Android

At the end of this workshop, we have implemented a fully functional real-time app that can be released on both App and Google Play stores.

Architectural thinking on Flutter State Management

Sometimes state management shapes the application architecture, which we even interchangeably call state management, app architecture. State management is a controversial topic among all developers, and it's, at the same time, one of the most complex topics that developers should decide on when they are building a Flutter app. Many developers say one solution is the best, whereas some disagree! What if I tell you that, in my opinion, there is no right and wrong answer! If you ask a software architect, which state management is the best for an application? The answer is evident; It Depends.
This talk discusses how to think like an architect and understand, recognize, and analyze tradeoffs and characteristics when choosing state management. I will show you why all state management might be best and worst, at the same time for your application which eventually helps you to make your mind to determine your appropriate solution.

CQRS Pattern in Dart

CQRS stands for Command and Query Responsibility Segregation, a pattern that separates read and update operations for a data store. One of the promises of the CQRS is that it can maximize the performance, scalability, and security of the application. The CQRS usually appears in Domain-driven design development and is often used along with the Event Sourcing pattern. However, you can still leverage it with your application in any architecture style.
This talk will discuss what CQRS is and how you can leverage using it in your Dart application. I also will elevate it with task-based UI components and show how beneficial it might be in the presentation layer of your application.

The Art of Failing Job Interviews and Winning a Job!

Interviews can be scary or can change your life! It might be frustrating or enjoyable! Whatever it is, Job interviews are not something everyone is looking forward to.
What if I tell you that by shifting your mindset towards job interviews, you can turn each job interview into a great opportunity regardless of the interview outcome?
Many, including myself, usually overvalue the interview's result just because we are trained that way!
I changed my mindset towards job interviews a few years ago, and that has changed my life in which I took over 50 job interviews in 1.5 years and failed all of them except one! In this talk, I'll share my personal story and my tips on how you can achieve the same thing.

Running Flutter Integration test in the Cloud

Integration testing (end-to-end or GUI testing) attempts to simulate a user interacting with your app by doing things like pushing buttons, selecting items, and typing on the keyboard to avoid having humans do that kind of repetitive work.

A device farm like Firebase Test Lab allows you to run tests across various devices and device configurations simultaneously to check whether the app works or performs well.

In this talk, you'll learn how to write an efficient Flutter integration test, run it on Firebase test lab for Android and iOS, and learn tips and tricks to manage your code and tests. Leverage performance results in your CD/CI and deployment pipeline.

Flutter for React and React Native developers

After working quite a long time in tech, especially as an architect, I understood that it's not good to be tied to a single framework for a long-time. You might have heard about the technical breadth term! If not, it means you should know what you don't know. It helps you broaden your knowledge, sharpen your skills, and ultimately make a better decision or even have a better career or life.

In this session, I will onboard you to Flutter and its ecosystem, where you can start developing the next application right away. You'll learn Flutter based on what you already know. If you have been a React or RN developer, this talk will facilitate and speed up your learning process and help you add another skill to your resume.

Building PWA with Flutter

Progressive Web Apps are web applications that have been designed, so they are capable, reliable, and installable. These three pillars transform them into an experience that feels like a platform-specific application.
The central core components that ensure that PWA works flawlessly are Service Workers. These components are a network proxy that takes control of a network request from the application and adds cache capabilities, background app sync, push notifications, and offline features.
In this talk, I will review the PWA capabilities in Flutter and show you how you can extend these functionalities to have a better progressive web app building with Flutter in order to boost user experience in your application.

One Plugin, Six Platforms!

Building and maintaining an open-source project comes with many challenges, but it's fun and rewarding! Plugins and packages are an essential part of any framework, and  Flutter is not an expectation for development to make a cross-platform application with a single code base!

You can develop a plugin package that connects the API to the platform-specific implementation(s) using a platform channel to provide calls into platform-specific APIs.

In this session, you will learn how to start developing a plugin for Flutter, the best practices from my experience of being the maintainer of great plugins such as Plus plugins, FlutterFire, and the importance of Federated plugins and their architecture together with platform channel API.

Extending Firebase

Firebase undoubtedly revolutionized how we think of building a fully scalable and complex backend service to build mobile and web applications rapidly. The service gets even more exciting if you can integrate it with great software on the internet or extending by adding predefined functionalities.

Firebase Extensions help you quickly deploy functionality to your app with pre-packaged solutions. This session will reveal the power of Firebase extensions and show you how you can achieve more by doing less on Firebase!

Securing Flutter Apps

Robust mobile app security on devices people carry around is a special responsibility that is an undeniable aspect of mobile development, and Flutter is no exception. A security strategy with critical pillars such as Identify, Detect, Protect, Respond and Recover must be taken into account from day one.

Reviewing OWASP's top 10 for mobile, reporting vulnerabilities, best practices to minimize risk, preventing reverse engineering, staying up to date, and identifying and blocking attacks in real-time with technology such as RASP (Runtime Application Self-Protection) are the topics you will take away from this talk.

Supercharge Firebase with Extension [Workshop]

Firebase services get even more exciting if you can integrate it with great software on the internet or extending by adding predefined functionalities.

Firebase Extensions help you quickly deploy functionality to your app with pre-packaged solutions. This session will reveal the power of Firebase extensions and show you how you can achieve more by doing less on Firebase!

Explore a step-by-step walkthrough and learn how to implement extensions for different purposes in a retail swag app, including:

- Persisting data in Firestore
- Search with Algolia
- Automatic Payments from Stripe
- Shipping with ShipEngine
- Validate addresses with ShipEngine
- Get Shipping Rates with ShipEngine
- Generate Shipping Labels with ShipEngine
- Communicating Tracking Updates with users
- Send Abandoned Cart Reminders with SendGrid

Flutter Festival London 2022

March 2022 London, United Kingdom

Majid Hajian

DevRel at Invertase.io

Oslo, Norway