Calendar and scheduler implementation in a mobile app

A scheduler breaks down during time transitions, recurring events, and synchronization — and users lose trust in the product. We design and implement a mobile app calendar end to end: event model, reminders, and exchange with external systems. We reduce manual support work and the number of requests caused by lost or duplicated events.

Development and support of all types of mobile applications:

Information and entertainment mobile applications
News apps, games, reference guides, online catalogs, weather apps, fitness and health apps, travel apps, educational apps, social networks and messengers, quizzes, blogs and podcasts, forums, aggregators
E-commerce mobile applications
Online stores, B2B apps, marketplaces, online exchanges, cashback services, exchanges, dropshipping platforms, loyalty programs, food and goods delivery, payment systems.
Business process management mobile applications
CRM systems, ERP systems, project management, sales team tools, financial management, production management, logistics and delivery management, HR management, data monitoring systems
Electronic services mobile applications
Classified ads platforms, online schools, online cinemas, electronic service platforms, cashback platforms, video hosting, thematic portals, online booking and scheduling platforms, online trading platforms

These are just some of the types of mobile applications we work with, and each of them may have its own specific features and functionality, tailored to the specific needs and goals of the client.

Our competencies:

Frequently Asked Questions

Latest works

  • Development of a mobile application for FEEDME
    Development of a mobile application for FEEDME
    971
  • Development of a mobile application for XOOMER
    Development of a mobile application for XOOMER
    869
  • Development of a mobile application for RHL
    Development of a mobile application for RHL
    1289
  • Development of a mobile application for ZIPPY
    Development of a mobile application for ZIPPY
    1143
  • Development of a mobile application for Affhome
    Development of a mobile application for Affhome
    1076
  • Development of a mobile application for the FLAVORS company
    Development of a mobile application for the FLAVORS company
    677

Mobile App Calendar: Where Time Logic Breaks

A mobile app calendar breaks not on grid rendering but on event logic: time storage, recurrence, and synchronization are three independent layers, and an error in any of them is visible to the user as “the app is lying.”

The classic case is storing local time instead of an absolute moment. The device moves to another time zone or switches to daylight saving time, and a meeting saved as “10:00 local” turns into “11:00” or shifts by a day.

The same errors when selecting a date cause a shift at the month and year boundary, when calculation is based on a local date without normalization.

The fix is separating two entities: the start moment is always in a unified basis, while display and reminder rules are calculated for the device’s time zone at the time of display.

Failures of recurring events are a separate class. A series is defined by a rule, but if exceptions and moves of one instance are stored not as separate records but as edits to the template, then the very first cancelled meeting takes down the whole series.

Another scenario is the absence of an instance identifier: during repeated synchronization, the server considers the meeting new, and events get duplicated. A deterministic event key and an explicit exception layer eliminate both cases.

Schedule desync usually grows out of the offline queue. Edits accumulate on the device, and when it goes online they are applied out of order — the last write wins, and some changes are silently lost.

Conflict resolution based on server time with an edit log and correct reconciliation of device response time makes the list identical on all phones.

The cost of these defects is visible in support: complaints like “I have a different schedule” cannot be reproduced without tying them to the time zone and queue state. We’ll break down how each layer is closed.

What a Reliable Scheduler Gives the Product and Support

Unified Event Logic Across All Platforms

A reliable scheduler is built around a single source of truth: recurrence rules, day boundaries, and time zone transitions are calculated by the server model, while the app only displays the result.

Before this, each client calculated the calendar itself, and the single event list diverged — on a phone a meeting was a day earlier than on a tablet, and a reminder arrived in the wrong time zone.

The discrepancy rate on an acceptance set of daylight saving transitions, time zone changes, and long series dropped to zero, because they are now checked by one test scenario rather than by the user.

Fewer Support Requests About Dates

Reducing support requests starts with the fact that state no longer lives only on the device.

Changes are written to a log, so recovery time after a failure is measured in minutes: the app replays missed operations on the next connection instead of reinstalling and manually restoring meetings.

A whole class of failures like “the event is on the phone but not on the tablet” goes away — it is closed architecturally, not by an operator instruction.

The load on first-line support drops several times over: questions about dates and reminders were most often a consequence of desync, not human error. Investigating one case takes a single query to the change history instead of correspondence with the user.

Scheduler Operating Modes: Comparison of Approaches

The scheduler mode determines where the source of truth about events is stored: on the device, in an external system, or on our server. This affects offline operation, conflict resolution, and the scope of work when adding shared reminders.

Option When it fits Limitations
Events only on device Personal scheduler without a shared database, offline operation matters No shared access, transfer to a new device is manual, reminders live only while the app is installed
Synchronization with external system Calendar is already maintained in a corporate system, data must not be duplicated A ready-made module imposes its own recurrence and permission model; time zones and roles have to be adjusted
Own server model Shared events, roles, notifications, change history Longer to develop: migrations, version merging, background sending
Hybrid Personal and work events together, offline needed Two models side by side: merge rules and priorities are defined in advance

How to Choose a Mode for the User Scenario

Answer three questions: whether shared access is needed, whether the scheduler must work offline, and who owns recurrences. If an event is created in a corporate system and the app only displays it, synchronization is enough. If users create events themselves and share them, a server model is needed.

Applicability Boundaries of Each Option

Local mode runs into app reinstallation and device change. Synchronization runs into external system latency and its permission scheme. A server model requires background sending and clear conflict resolution. A hybrid is justified when personal and work circuits cannot be mixed in one storage.

Implementation Order: From Audit to Handover to Support

Work proceeds in fixed stages: each closes its own class of errors and ends with an artifact that we verify before moving on. This way the calendar does not diverge from the scheduler when clocks change and some users change time zones.

What We Do During the Audit and Schema Design

  1. Date logic audit. We collect all places that work with time: server responses, local reminders, recurring events, cache labels. We mark where a point in time is stored and where local date and time without offset are stored, and where these approaches are mixed.
  2. Event model design. We describe entities: event, recurrence series, exception from a series, participant, access right. Rule: the point in time is in storage; we convert to local only when displaying on screen.
  3. Synchronization and permissions. We define the source of truth, conflict resolution when editing from two devices, behavior on connection loss, and inclusion of other people's events in the selection.
  4. Edge case verification. We run through daylight saving time transition, event in a nonexistent hour, “last day of month” recurrence, time zone change in transit, and cancellation of a series with already modified instances.
  5. Load testing. We look at how selections and reminders behave on a dense schedule and with a large number of participants, and where delays appear.
  6. Handover to support. We provide the data schema, recurrence model description, list of verified edge cases, and instructions for investigating complaints about missing or duplicated reminders.

Settings, Schemas, and Policies That We Hand Over

We hand over not only a working app but also a set of documents your team can use to develop the scheduler and handle requests without us. Below is what exactly remains with you.

Documentation on Event Logic and Permissions

  • Scheduler configuration: recurrence parameters, rules for handling overlapping events, behavior when changing time zone and transitioning to daylight saving time.
  • Event model schema: entities “event”, “participant”, “reminder”, “exception from a series”, required and computed fields, relationships between them.
  • Access rights schema: roles of calendar owner, participant, and observer, what each can read and change, how rights are inherited for shared and external calendars.
  • Synchronization description: which sources are bidirectional, which are read-only, how conflicts of simultaneous edits are resolved, and what the user sees when the connection is lost.

Update and Support Policy

  • Event update policy: procedure for releasing changes in recurrence and reminder rules so that already created records are not lost or duplicated.
  • Support instructions: decision tree for typical requests — event did not appear, reminder fired twice, permissions were not applied.
  • Rollback procedure and control points: which schema version is compatible with the previous build, what to do when data diverges across devices.

The documents are kept in the repository next to the code and checked for relevance with every release. We close the handover with a walkthrough with your team — so that the documentation is used, not just stored.

Case Study: Calendar Synchronization with External Systems

The client is a service booking service: a mobile app and an admin panel, whose calendar lived separately from Google Calendar, where managers entered meetings manually.

The discrepancy rate reached 6% of event volume: a rescheduled meeting remained in the old slot, support received about 40 requests “booking exists, but no specialist,” and investigating one incident took on average 25 minutes — app logs and external system logs did not match by identifiers.

As part of the scheduler implementation case, we moved the exchange to a continuous two-way cycle with a change log.

Each event received a stable identifier and revision label, and the mobile client received a local cache, from which the interface renders instantly, including offline.

Changes go out in a queue and are retried after connection is restored, so a lost packet no longer turns into a lost meeting.

Conflict and Recurring Event Handling

We resolve event edit conflicts not on the principle of “last one wins.” An edit from an external system is compared by revision label: the newer version wins, and the losing one does not disappear — it goes into history and is shown to the administrator as a suggestion.

Recurring events are stored as a series with a list of exceptions and replacements, not as expanded copies: moving one meeting does not break the series, and a time zone change does not shift the entire schedule.

Two months later, discrepancies dropped from 6% to 0.3%, calendar-related requests from 40 to 5 per month, and incident investigation from 25 to 7 minutes thanks to the end-to-end event identifier.

“The main result is not in the numbers,” says our engineer, “but in the fact that manual reconciliation of two calendars is gone: if something diverges, the system itself shows where and when.”

Ready-Made Scheduling Module or Your Own Event Model?

A ready-made module covers the basic case: an event is a point in time with a title, participants, and a reminder. It provides month and week views, simple recurrence rules, notifications, and reading of the device's system calendar.

As soon as domain logic appears — shifts, booking windows, dependencies between tasks — working around its limitations begins.

Applicability boundaries are determined by one feature: who owns the event model. If the schedule is described by a start–end pair and one record type, the module pays off quickly — less code, predictable behavior when changing time zone and transitioning to daylight saving time.

If the event type determines available actions and allowable duration, you need your own model, and the module remains a rendering layer.

The main limitation is that event types do not extend. Extra attributes are put into a single notes field, and filtering by them turns into manual text selection.

Your own event layer defines the type, field set, and rules for combining them: the calendar remains an interface, and your model, not the component, becomes the source of truth.

If part of the schedule is already deployed on different logic, half-measures cost more.

It is wiser to lock in the current types and rules, leave them working, and place the new interface on top through a transformation layer: old records are read, new ones are written directly to the target model. The transition is gradual, without downtime for users.

The choice is made by the number of entities, not by taste. If standard fields and one recurrence rule are enough, we take the ready-made module. If there are more than two types or the rules conflict with each other, your own event model is cheaper to maintain. Next we'll look at how this fits a specific schedule.

Common Technical Implementation Questions

Questions at acceptance usually concern not month grid rendering but behavior at boundaries: crossing midnight, changing time zone while traveling, long recurrence series, simultaneous editing from two devices. Below are short answers from engineers on how these concerns are addressed in code and in process.

How do events survive a time zone change?

The point in time is stored in UTC, and the offset is applied only when displaying — during a flight, the grid is rebuilt in the device's time zone rather than shifting by several hours.

The time zone database is updated separately from the app code, so a change in daylight saving time rules does not require releasing a new version.

How are recurring events structured?

A series is stored as a rule, not as a set of dates: “every second Tuesday”, “last business day of the month”. Exceptions and moves of a single occurrence are kept as separate records — editing one day does not rewrite the entire series, and long rules have an expansion limit.

What happens when two devices edit at the same time?

An event has a revision, and when there is a divergence, the server merges changes by fields rather than overwriting data with the last request.

The device receives the current version after synchronization, so editing the title on a phone does not destroy a time change on a tablet.

Can the scheduler logic be changed without releasing a version to the app stores?

Part of the behavior — series length limits, reminder formats, set of available rules — is moved to server configuration. Such changes reach users immediately, and only logic that must work offline remains in the app.

How do you test the calendar before release?

With a separate run through edge cases: an event at 23:59 crossing to the next day, a series without an end date, February 29, a time zone changing during an active recurrence, and moving the device clock forward and backward.

Calendar acceptance checklist: “Edge cases break the scheduler more often than the main flow — that is why every release is run through them separately, before checking ordinary scenarios.”

Let's Discuss the Task and Come Back with an Estimate and Plan

Before giving timelines, we fix the task boundaries: both the estimate and which mobile app calendar scenarios go into the first version and which go into the second depend on this.

Below is what we clarify with you during the review and what we attach to the implementation work plan.

  • Usage scenarios: personal schedule, team calendar, resource booking — which are mandatory for launch and which can be postponed.
  • Roles and permissions: who creates events, who sees other people's schedules, whether participation confirmation and change notifications are needed.
  • External systems: which services need synchronization, in which direction the exchange goes, how we resolve record conflicts and connection loss.
  • Schedule volume: how many events per user, whether recurring records, multiple time zones, and linked resources are needed.
  • Offline operation and reminders: how the app behaves offline, what it synchronizes when connection returns, and which notifications are critical for the user.
  • Timelines and constraints: the date by which launch is needed, dependency on releases, and expected load during peak periods.
  • Constraints on your side: access and environments, data storage requirements, readiness of the backend for exchange.

In response, you receive an implementation work plan: stage composition, timeline estimate for each, responsibility areas of our team and your side, and acceptance procedure with readiness criteria. Describe the task — we will come back with an estimate and plan.