manoj.dev

> hello_world.dart

Hi, I'm Manoj.
Senior Software Engineer.

8+ years crafting Android & Flutter apps used by millions. Based in Bengaluru, India.

01 · About

A bit about me

MD

📍 Bengaluru, India

💼 8 years shipping mobile

I've been building mobile apps for 8+ years — starting with native Android in Java and Kotlin, then moving into Flutter as it matured. Most of my time is spent thinking about state management, offline behavior, and how a codebase holds up after two years of feature work.

I care about the parts users never see: cold-start budgets, crash-free rates, memory pressure, and how gracefully the app degrades on a 2G connection. I like clean architecture, but I like shipping more — the two are not always the same.

Outside of client work I maintain a couple of open-source Flutter packages, occasionally write about mobile architecture, and take long motorbike rides across the Western Ghats.

02 · Skills

Things I work with

Mobile

  • Flutter
  • Dart
  • Android
  • Kotlin
  • Java
  • iOS

Architecture & State

  • BLoC
  • Riverpod
  • GetX
  • Provider
  • Clean Architecture
  • MVVM
  • Modularization

Backend & Data

  • Firebase
  • REST
  • GraphQL
  • gRPC
  • Node.js
  • SQLite
  • MongoDB
  • Hive

DevOps & Tooling

  • Docker
  • Fastlane
  • GitHub Actions
  • Codemagic
  • Bitrise
  • Sentry
  • Firebase Crashlytics

04 · Craft

How I build

Performance is a feature

Cold start under 1.5s, jank-free scroll, memory that behaves after 30 minutes of use. These are not optimizations — they are requirements. I measure before and after every change that could touch them.

Offline-first, always

Networks fail. Users on 2G, on planes, in basements, in tunnels. I design for the sync engine first and the online path second — it forces cleaner boundaries between UI, cache, and remote.

Architecture that survives Year 2

Any pattern looks clean at week 1. I care about how a codebase reads after two years of features, three engineers rotating out, and one major refactor. Boring choices usually win.

Tests that catch real bugs

Widget and integration tests that mirror how users actually use the app. Golden tests for anything visual. Unit tests for logic that could rot silently. Skip the tests that only test the framework.

Ship deliberately

Feature flags, staged rollouts, crash-rate gates before promotion, and a runbook for the release. The exciting part of shipping is that nothing exciting happens.

Read the platform docs

Flutter, Android, iOS — the platform teams write the definitive answers. I go there first, then to StackOverflow, then to LLMs. In that order.

Currently exploring

  • Impeller rendering internals
  • Rust for native FFI on Android
  • Kotlin Multiplatform for shared domain logic
  • On-device LLMs via TensorFlow Lite

05 · Contact

Let's build something

Have an interesting mobile problem, an idea worth building, or just want to talk architecture? Reach out — email is fastest.