Insights

Articles on application architecture, privacy engineering, performance and product design.

100 articles

Mykhailo Boichuk8 min read

How Flowo Handles a Deletion Request, Step by Step

A deletion request in Flowo runs as a server scrub and a local erasure that report separately. This article walks through the order, the key and the export.

Mykhailo Boichuk7 min read

The Schema.org Types We Emit on Three Sites

The schema.org types and properties BBMM Technologies emits as JSON-LD on bbmmtech.com, flowoapp.com and textpack.app, and the tests that check them.

Mykhailo Boichuk7 min read

How We Shape an Article So an Assistant Can Restate It

The article format BBMM Technologies uses on bbmmtech.com: summary, key points and questions as typed fields, fixed heading levels, and noindex on thin pages.

Maksym Bardakh Ivko7 min read

Data Minimization in Flowo Under PIPEDA and GDPR

How Flowo applies data minimization field by field: what the backend stores per install, what each cloud request carries and what the app declines to read.

Mykhailo Boichuk8 min read

How We Keep Secrets Out of Source, Builds and Logs

How BBMM Technologies handles secrets for Flowo: a gitignored dev file, build-time defines, a validator that fails a release, and a scan of every commit.

Maksym Bardakh Ivko8 min read

On-Device Embeddings and Cloud Language Models in Flowo

How Flowo splits AI work: a bundled multilingual embedder ranks tasks and notes on the phone, and a cloud model receives only the text a request needs.

Mykhailo Boichuk7 min read

Dates, DST and Time Zones in Flowo's Planner

How Flowo's planner handles time: an injected clock, calendar days built by constructor, day counts at UTC midnight, and tests in named zones on DST nights.

Maksym Bardakh Ivko7 min read

How Flowo Lowers the Cost of Starting a Task

Design decisions in Flowo that remove steps before work begins: capture with no required fields, a breakdown shown as a draft, and a leaf-only start rule.

Maksym Bardakh Ivko6 min read

Reducing the Cost of Context Switching Across Apps

Why moving between apps and tasks carries a hidden cognitive cost, and how software can reduce the friction of switching for the people who use it.

Maksym Bardakh Ivko6 min read

How We Decide Whether to Build a Feature

The questions BBMM Technologies asks before building anything, turning feature decisions into a deliberate test of purpose, cost and fit.

Mykhailo Boichuk7 min read

The Maintenance Mindset: Software That Lasts a Decade

What it takes to build software that remains maintainable for ten years, where most cost lives after launch and clarity beats cleverness.

Maksym Bardakh Ivko6 min read

The Trust Signals We Publish on Our Product Websites

The registry facts, legal pages, security.txt, response headers, consent rules and written limits BBMM Technologies publishes on its sites, and the reasons.

Mykhailo Boichuk7 min read

The macOS Security Model and What It Asks of TextPack

How App Sandbox, Hardened Runtime, notarization, Gatekeeper and TCC fit together, and the decisions they force on a local document tool like TextPack.

Maksym Bardakh Ivko6 min read

Writing for Both Humans and Language Models

Content is now read by people and by language models. The same qualities that serve readers, clarity and structure, also serve machine understanding.

Mykhailo Boichuk6 min read

Search UX in Small, Focused Apps

How search should behave in a small app, where scope is narrow and the right design tolerates imperfect input and fits the data.

Mykhailo Boichuk6 min read

Accessibility Testing Tools and Workflows

Automated checks catch only part of accessibility. A workflow that combines tooling, keyboard and screen-reader testing, and real users catches the rest.

Maksym Bardakh Ivko6 min read

Microcopy and Content Design for Clarity

How the small words in an interface shape understanding, and how to write microcopy that guides the user clearly at the moment they need it.

Mykhailo Boichuk6 min read

Crash Reporting Without Compromising Privacy

How to learn enough from crashes to fix them while collecting no more user data than necessary, keeping diagnostics and privacy compatible.

Mykhailo Boichuk6 min read

A Sustainable Release Cadence for Small Teams

Releasing too often wears a team down, and releasing too rarely lets risk pile up. A steady, predictable cadence keeps quality high at a pace people can sustain.

Maksym Bardakh Ivko6 min read

Content Design for AI Answer Extraction

When an AI assistant answers from your content, it extracts a passage. How to write so the passage it lifts is accurate, complete, and attributed to you.

Maksym Bardakh Ivko6 min read

Designing Settings: Progressive Disclosure

How to organize settings so common options are easy to find and advanced ones stay available, using progressive disclosure to manage complexity.

Mykhailo Boichuk6 min read

Designing for Interruption and Resumption

People are interrupted mid-task constantly. Preserving state, marking where they left off, and restoring context turn a jarring return into a smooth resumption.

Mykhailo Boichuk6 min read

A Disciplined Product Development Process

How BBMM Technologies keeps product development disciplined: limited work in progress, written decisions and a finished standard for every change.

Mykhailo Boichuk7 min read

Energy-Efficient UI Rendering on Apple Platforms

How rendering choices affect battery life on Apple platforms, and the patterns that keep an interface smooth without draining the device.

Maksym Bardakh Ivko6 min read

Single-Tasking Interfaces: Designing for Focus

Interfaces that present everything at once invite divided attention. Designing for single-tasking means showing one thing to do and protecting it from the rest.

Mykhailo Boichuk7 min read

How Flowo Rate Limits and Meters Its AI Backend

How the Flowo backend limits AI requests without user accounts: attested devices, per-device rate limits, atomic daily quotas and gates that fail open.

Maksym Bardakh Ivko6 min read

Deciding Whether a Feature Earned Its Place

The decision about a feature continues after it ships. How to assess, after release, whether a feature earned its keep or should be removed.

Maksym Bardakh Ivko6 min read

Progressive Onboarding for Complex Tools

Powerful tools overwhelm if they reveal everything at once. Progressive onboarding teaches capability in layers, as the user is ready for each one.

Mykhailo Boichuk6 min read

The Case for Boring Technology

Choosing well-understood, proven tools over novel ones is an underrated engineering strategy. Why boring technology often delivers more than exciting alternatives.

Mykhailo Boichuk6 min read

Writing Documentation People Actually Read

Why most documentation goes unread, and how to write docs that answer real questions, stay current, and respect the reader’s time.

Maksym Bardakh Ivko6 min read

Designing a Changelog People Actually Read

Most changelogs are ignored because they list commits. How to write one that tells users what changed for them and why.

Mykhailo Boichuk7 min read

Caching Strategies for Responsive Applications

How caching makes applications feel fast, the strategies for keeping cached data fresh, and why invalidation is the hard part.

Maksym Bardakh Ivko6 min read

A Privacy-Respecting Product Feedback Loop

You can understand how a product is used without surveilling users. Consent, minimal data, and direct channels build a feedback loop people trust.

Mykhailo Boichuk7 min read

Why Flowo Is Local-First Without Multi-Device Sync

Flowo keeps plans on one device, with no account and no sync between devices. We explain what leaves the phone and what sync would need first.

Maksym Bardakh Ivko6 min read

The Role of Defaults in Ethical Product Design

Most people never change a default, so defaults are decisions made on their behalf. Setting them in the user’s interest is a core ethical responsibility.

Maksym Bardakh Ivko6 min read

Measuring Readability and Information Scent

Readability depends on more than reading level, and information scent decides whether people follow a path. How to assess both so content keeps readers moving.

Maksym Bardakh Ivko6 min read

Designing for Memory and Recall, Not Only Attention

Interfaces compete for attention but rarely support memory. Recognition over recall, durable cues and working-memory limits make a tool easier to return to.

Maksym Bardakh Ivko7 min read

Designing for Neurodivergent Users Beyond ADHD

How to design software for a range of neurodivergent needs, from autism to dyslexia, by offering flexibility rather than one fixed experience.

Maksym Bardakh Ivko6 min read

Internal Linking Strategy for Topical Authority

Internal links tell search engines and readers how a site’s ideas connect. A deliberate structure builds topical authority and helps every page be found.

Mykhailo Boichuk6 min read

Reducing App Launch Time on Apple Platforms

Launch time is the first impression. How to find what work blocks the first frame and defer or remove it so an app feels instant from the tap.

Maksym Bardakh Ivko6 min read

Designing Trust into Checkout and Payments

Checkout is where doubt is most expensive. Clarity about price, security cues that are real, and recoverable errors decide whether people complete a purchase.

Mykhailo Boichuk6 min read

Reducing Bundle Size in Modern Web Apps

JavaScript is the most expensive resource a page ships. Code splitting, tree shaking, and dependency discipline keep bundles small and pages responsive.

Maksym Bardakh Ivko6 min read

The Case for Fewer Features: Scope Discipline

Why adding features steadily makes a product worse, and how scope discipline keeps software focused and maintainable.

Mykhailo Boichuk7 min read

Migration-Safe Schemas for an On-Device Database

How Flowo changes its on-device Hive schema without losing data, using stub adapters for retired types and a backup before every destructive rewrite.

Maksym Bardakh Ivko6 min read

Designing a Minimal, Durable Design System

How to build a design system that stays useful for years by keeping it minimal, grounding it in tokens and extending it only as real needs appear.

Mykhailo Boichuk7 min read

Keyboard Accessibility and Focus Management

Everything must work from the keyboard. Visible focus, logical order, and disciplined focus management for menus and dialogs make an interface operable by all.

Maksym Bardakh Ivko6 min read

Measuring Perceived Performance, Not Just Metrics

Why how fast software feels matters as much as how fast it is, and how to design for perceived performance alongside raw numbers.

Mykhailo Boichuk6 min read

Typography Systems for Product Interfaces

How to build a typographic system for software using a modular scale, sensible line length and spacing, and a small set of consistent roles.

Maksym Bardakh Ivko6 min read

Designing Dark Mode Without Doubling the Work

Dark mode needs more than an inverted light theme. Semantic color tokens and a few principles let one system serve both modes without maintaining two designs.

Maksym Bardakh Ivko6 min read

Designing Keyboard Shortcuts That Stick

Shortcuts only help if people remember them. Consistency, mnemonic mappings, and discoverability turn shortcuts from a hidden feature into a learned habit.

Mykhailo Boichuk6 min read

Logging and Observability for Small Apps

A small app needs enough logging to answer what happened, without drowning in noise or capturing personal data.

Maksym Bardakh Ivko6 min read

What Interface Density Costs the Reader

How interface density affects cognitive load, and how to decide how much to show on screen based on the kind of mental effort a task demands.

Maksym Bardakh Ivko8 min read

From an Empty Schedule to the First Plan in Flowo

How Flowo turns a short description of the week into a validated draft, a scheduled plan and one task of the person's own before the first screen opens.

Mykhailo Boichuk7 min read

Threat Modeling for Small Software Teams

A practical threat modeling method that a small team can run in an afternoon to find and rank security risks before they ship.

Mykhailo Boichuk6 min read

Data Export Formats Users Can Trust

Export is a promise that users own their data. The format decides whether that promise is real. What makes an export complete, open, and actually usable.

Mykhailo Boichuk6 min read

Image Optimization for Fast, Private Websites

Images dominate page weight. How to serve the right format and size, defer offscreen images, and reserve space so layout stays stable as they load.

Maksym Bardakh Ivko6 min read

Designing Empty States and Error States Well

Why empty and error states deserve as much care as the happy path, and how to turn these moments into guidance instead of dead ends.

Mykhailo Boichuk7 min read

Native macOS Performance: Measurement and Budgets

How to keep a native macOS app fast by protecting the main thread, measuring with the right tools, and working to explicit performance budgets.

Mykhailo Boichuk7 min read

Building a Component Library That Scales

A component library succeeds when it reduces the decisions developers make. Composition, tokens, and clear ownership keep it usable as it grows.

Mykhailo Boichuk6 min read

Keyboard-First Design for Power Users

How to design software that rewards keyboard fluency with shortcuts, command interfaces, and full navigability, without abandoning newcomers.

Maksym Bardakh Ivko8 min read

How Flowo Counts Habit Streaks and Handles a Missed Day

Flowo shows a habit streak. This is how the count is computed, what is treated as a miss, and what the planner does after a session is skipped or missed.

Maksym Bardakh Ivko6 min read

Color and Contrast Systems for Light Interfaces

How to build a light-mode color system that stays legible and calm, using a small palette, deliberate contrast, and color that carries meaning.

Mykhailo Boichuk7 min read

Designing for Slow and Offline Networks

Real connectivity is intermittent. How to build apps that stay usable on slow links and degrade gracefully when the network disappears entirely.

Mykhailo Boichuk7 min read

Battery-Aware Background Scheduling on iOS

How iOS governs background work to protect battery life, and how to schedule deferred tasks that the system will actually run.

Mykhailo Boichuk6 min read

Designing Undo: Forgiveness as a Feature

Reliable undo lets people act without fear. How to design forgiveness through reversible actions, clear scope, and recovery rather than confirmation dialogs.

Maksym Bardakh Ivko6 min read

Writing Error Messages That Help

An error message is a moment of friction that can either rescue or abandon the user. What separates a message that helps from one that blames or confuses.

Mykhailo Boichuk7 min read

Memory-Safe Patterns in Swift

How Swift’s ownership and reference-counting model prevents whole classes of memory bugs, and the patterns that keep retain cycles and leaks away.

Maksym Bardakh Ivko6 min read

Designing Accessible Forms

Forms are where many users succeed or give up. Labels, error handling, focus order, and clear instructions decide whether a form is usable by everyone.

Maksym Bardakh Ivko8 min read

What Flowo's Onboarding Asks For and What We Removed

A step-by-step account of what Flowo's onboarding asks of a new person, what is optional, and which tours, prompts and hints we removed or deferred.

Mykhailo Boichuk7 min read

Why Flowo's Settings Have No Search Yet

Flowo's settings screen has no search field. This is how we group nine rows into three sections across seven languages, and what would make us add search.

Maksym Bardakh Ivko6 min read

The Attention Cost of Notifications, Examined

Every notification has a price. It interrupts working memory, and users who pay that price too often disable the channel entirely.

Maksym Bardakh Ivko6 min read

Designing for One-Handed Mobile Use

Reach, thumb zones, and the realities of holding a large phone in one hand, and how to place primary actions where they can actually be reached.

Mykhailo Boichuk7 min read

How Flowo's Focus Screen Works: One Task and One Timer

How the Flowo focus screen picks the current task from the schedule, what it keeps off the screen, how the timer keeps running and what a session saves.