HomeCase studiesA Field Mobile Application for Property Valuation...

Case study · Montreal, Canada

A Field Mobile Application for Property Valuation Assignment Management

Property valuation services for mortgage lending — the working relationship between valuation management organisations and the independent appraisers who carry out inspections

Property appraisers spend their working day away from a desk, yet the software that runs their workload assumed they were sitting at one. Our team built native Android and iOS applications that move the entire assignment lifecycle — offer, acceptance, scheduling, inspection, messaging and document review — onto the phone the appraiser already carries into the field. Both clients were built against an existing enterprise platform's purpose-built mobile interface, and both render their most business-critical screens dynamically from server-supplied definitions, so the terms and questions governing a professional engagement can change without an app release.

Industry
Property valuation services for mortgage lending — the working relationship between valuation management organisations and the independent appraisers who carry out inspections
Solution
Two native mobile applications, Android and iOS, phone and tablet, delivered as field companions to an established enterprise platform through a purpose-built mobile API.
Platforms
Android · iOS
Stack
SQLite · Java · Swift · Firebase · Alamofire
Location
Montreal, Canada · delivered remotely
Role
Engineering, with the team behind for mobile and QA

Delivered remotely for a business based in Montreal, Canada. Names withheld by agreement.

Project Overview

Industry: Property valuation services for mortgage lending — the working relationship between valuation management organisations and the independent appraisers who carry out inspections.

Type of solution: Two native mobile applications, Android and iOS, phone and tablet, delivered as field companions to an established enterprise platform through a purpose-built mobile API.

Business context: Valuation assignments are distributed by managing organisations to a network of independent, licensed appraisers. Each assignment carries a fee, a due date, property and contact details, and engagement terms that must be formally accepted before work starts. The appraiser then arranges access with a property contact, performs an inspection, and moves the assignment through review and revision to completion — coordinating throughout with the managing organisation. The desktop platform that runs this process was mature and well established. The problem was where the appraiser actually was while the process ran.

General users: Independent field appraisers. Every user is connected to one or more managing organisations, and the applications present all of their work — across all of those organisations — in a single inbox.

General purpose: To let a field professional accept work, schedule it, communicate about it, read the documents attached to it and keep its status accurate, from a phone, in the field, without waiting until they are back at a desk.

The Business Challenge

The work happens where the desk isn't. An appraiser inspects properties. Between inspections they are driving. The system of record was a desktop web portal, which meant the administrative half of the job was compressed into early mornings and late evenings, and everything in between was conducted by telephone and re-keyed afterwards.

Assignment offers are time-sensitive. An offer that sits unanswered gets reassigned. An appraiser who cannot see and respond to offers until the evening loses work to one who can respond within the hour — and the managing organisation loses time chasing an answer.

Acceptance is a formal act, not a button. Accepting an assignment means accepting engagement terms, and accepting with conditions means recording what those conditions are. The paperwork behind that varies by managing organisation and changes for commercial and regulatory reasons. Hard-coding it into two native applications would mean an app store release cycle every time a clause changed.

One professional, several clients. Independent appraisers work for multiple managing organisations. Without a single view, that means several logins, several inboxes and no reliable answer to "what am I actually committed to this week?"

Coordination is conversational. Access arrangements, property condition, revision requests — these are conversations. If the app cannot host them, they happen in email and by phone, outside the assignment record, and the record becomes incomplete.

Documents matter and are not small. Engagement letters, prior reports and supporting documents are PDFs that must be readable in the field, on the device, without exporting them somewhere else.

The platform already existed. This was not a greenfield build. The applications had to fit an established enterprise system, its interface, its data model and its status vocabulary — adding a new channel without asking the business to change how it worked.

Two platforms, one behaviour. Appraisers do not standardise on a phone. Both platforms had to be native, and both had to behave identically, because the managing organisation on the other side of an assignment cannot see which device it came from.

Our Approach

Build to the platform's contract, not around it. The customer already operated the system of record and had defined a mobile interface onto it. We built both clients against that contract as it stood — including its response conventions and its data formats — rather than asking for changes to a live enterprise platform. Where the contract had rough edges, the clients absorbed them defensively so the user never saw one.

Make the acceptance workflow server-driven. Rather than hard-coding acceptance, conditional acceptance and decline forms into two native applications, we built a small rendering engine in each client. The application asks the platform for the form definition appropriate to this assignment and this action; the platform returns an ordered list of typed, captioned, optionally-required controls, including formatted content panels for engagement terms. Each client lays them out, validates them by type, and posts back a generic answer set. New questions, revised terms and changed conditions ship the moment the platform is updated — with no app release on either platform.

Serve legal and help content the same way. Licence agreement, privacy statement, help content and onboarding explanations are fetched from the platform rather than bundled into the binary, for exactly the same reason.

Design the dashboard around the question the user is actually asking. The platform's own status vocabulary is preserved faithfully, but the applications add derived views computed on the device — what is overdue, what has unread messages, what still needs an appointment, what is outstanding overall. These are the four questions an appraiser asks first thing in the morning, and answering them locally from a single payload avoids extra round trips on a mobile connection while guaranteeing the counts match the lists behind them.

Treat the network as unreliable, because it is. The Android client maintains a local mirror of the assignment record so the dashboard renders immediately on launch rather than waiting on a response. The iOS client uses a timed in-memory cache, a decision documented in the code as sufficient for the refresh window in question. Both check connectivity before issuing a request and fail with a clear message instead of a spinner.

Build for tablet properly. Both applications ship genuine master-detail split layouts for large screens alongside their phone layouts, rather than stretching a phone interface across an iPad.

Put the phone's own capabilities to work. Tap-to-call and tap-to-message on every contact number on an assignment, a street-level photograph of the subject property so an appraiser recognises it on arrival, native calendar-style scheduling, in-app document rendering, and push notifications with deep links straight into the relevant assignment, message or document.

Keep the two clients honest with each other. The same status model, the same derived views, the same form engine, the same notification routing, the same defensive handling of the shared contract — implemented independently and natively on each platform, verified for behavioural parity.

The Solution

Single inbox across multiple managing organisations. An appraiser connects to an organisation using a key that organisation issues, and can connect to or disconnect from as many as they work with. Every assignment carries its organisation with it, and the dashboard spans all of them.

Counted status dashboard. The platform's assignment statuses with live counts, alongside device-computed views for overdue work, unread messages, assignments awaiting an appointment, and everything outstanding.

Search across the caseload. Free-text search across assignments, including numeric references, from the dashboard.

Full assignment detail. Property details, engagement information, dates, fee and all associated contacts on one screen, with a street-level photograph of the subject property fetched by address and a setting to switch that off.

Dynamic acceptance workflow. Accept, accept with conditions, or decline — each presenting a form defined by the platform for that assignment and that action, rendered and validated on the device, including formatted engagement-terms panels.

Inspection scheduling. Set or change an inspection date and time against an assignment, with a month calendar view of everything scheduled and drill-through to a chosen day's work.

Per-assignment messaging. Threaded messages with the managing organisation attached to the assignment they concern, with unread counts on the dashboard and on each assignment, composition, and explicit read acknowledgement.

Document access. Attachment lists per assignment with in-app PDF rendering on both platforms, and export to other applications where appropriate.

Granular push notifications. Six independently controllable notification categories with preferences held on the platform so they follow the user across devices, and deep links that open the exact assignment, message or document the notification refers to.

Self-service account management. Registration with email verification returning the user into the application by deep link, credential recovery by email, user-identifier recovery by SMS, and enforced password rules.

Platform-served content. Licence, privacy, help and onboarding content delivered from the platform, changeable without an app release.

Phone and tablet, both platforms. Native Android and native iOS, each with a dedicated large-screen master-detail layout.

Key Features

Server-driven acceptance forms The most business-critical screen in the product is defined by the platform, not the binary. Typed, captioned, validated controls — including formatted terms panels — are returned per assignment and per action, rendered natively on each platform, and answered generically. Terms and conditional-acceptance questions change without an app store release.

Multi-organisation single inbox Connection-key based enrolment with as many managing organisations as the appraiser works with, and one dashboard across all of them.

Device-computed dashboard views Overdue, unread, appointment-required and all-outstanding are derived on the device from a single payload — fewer round trips, and counts that cannot disagree with the lists behind them.

In-field document rendering PDF attachments open inside the application on both platforms, with export where appropriate, so an appraiser reads an engagement letter at the property rather than back at the office.

Inspection scheduling with calendar view Set an inspection time against an assignment and see the month's scheduled work in a native calendar, with drill-through to any day.

Assignment-scoped messaging Conversations attached to the assignment they concern, with unread state surfaced on the dashboard, so coordination stays inside the record instead of scattering into email.

Deep-linked push notifications Six independently controllable categories, preferences held server-side, and payload routing that opens the specific assignment, message or document rather than the home screen.

Property recognition imagery A street-level photograph of the subject property, fetched by address, so an appraiser recognises where they are meant to be — with a user-controlled switch to disable it.

Platform-served legal and help content Licence, privacy and help content fetched rather than bundled, changeable without a release on either platform.

Genuine tablet layouts Master-detail split views on large screens on both platforms, not stretched phone interfaces.

Technical Architecture

Two native clients, one contract. Independent native applications on Android and iOS, built to the same purpose-built mobile interface exposed by the customer's existing enterprise platform, and verified for behavioural parity rather than sharing code.

Networking layer. Each client isolates the platform interface behind a single networking layer that centralises authentication, request construction, connectivity checking, response-envelope interpretation and error surfacing — so every screen consumes a uniform result and no screen knows how the platform's conventions work. On Android this takes the form of a small class per endpoint over a shared request base; on iOS, a single interface factory of closure-based calls.

Dynamic presentation layer. A rendering engine on each platform turns a server-supplied ordered control definition into a laid-out, validated, keyboard-aware native form, and turns the completed form back into a generic answer set. This is what makes the acceptance workflow releasable from the server side.

Local persistence. The Android client maintains a local relational mirror of the assignment record behind a small data-access layer, so the dashboard is available before the network responds. The iOS client uses a timed in-memory cache sized to the refresh window. Session state and user preferences are held in each platform's standard preference store.

Notification layer. Cloud messaging registration with a server-side token registry and re-registration on refresh, six independently controllable categories with preferences held on the platform, and payload-driven deep-link routing into specific records.

Document layer. In-application PDF rendering on both platforms, with retrieval through the platform interface rather than direct file access, and export through the operating system's own sharing mechanism.

Presentation layer. Native screen composition on each platform over shared base classes handling keyboard avoidance, scroll behaviour and navigation styling, with separate large-screen master-detail layouts.

Flow: Native client (phone or tablet) → Authenticated mobile API → Customer's existing enterprise valuation platform → Cloud push notifications back to the device → Deep-linked directly into the assignment, message or document concerned

Technology Stack

Category Technology
Android application Java, native Android SDK
Android networking Hand-built REST layer over the platform HTTP client, with a per-endpoint abstraction
Android data handling Gson JSON serialisation
Android local storage SQLite via the platform's database helper, with a hand-written schema contract
Android UI Native activities and fragments, XML layouts, a dedicated large-screen resource set, third-party calendar component
Android documents Vendored native PDF rendering engine
iOS application Swift, storyboards and XIB-based reusable cell views
iOS networking Alamofire
iOS data handling Lightweight JSON decoding library
iOS imaging Kingfisher for remote image loading and caching
iOS UI Native view controllers over shared base classes, split-view layouts for tablet, third-party calendar component
iOS documents In-application PDF rendering with system share-sheet export
Push notifications Firebase Cloud Messaging on both platforms, with server-side preference storage
Crash reporting Crash reporting SDK on both platforms
External data Mapping provider's static street-level imagery API
Device capabilities Telephony and messaging intents, custom URL scheme deep linking, system share sheet
Backend Customer-owned enterprise platform with a purpose-built mobile API (outside the scope of this engagement)

Technical Challenges & Solutions

Challenge Our Approach
Engagement terms and acceptance questions change for commercial and regulatory reasons, but shipping a change to two native applications means two app review cycles We made the acceptance workflow server-driven. The client requests a form definition for the assignment and the chosen action; the platform returns an ordered list of typed, captioned, optionally-required controls including formatted content panels. Each client renders and validates them natively and posts back a generic answer set. Terms change on the server, not in a release.
Two independent native codebases had to behave identically against one contract A single isolated networking layer per client centralising authentication, envelope interpretation and error handling; the same derived dashboard model, the same form engine and the same notification routing implemented natively on each side; parity verified behaviourally rather than assumed from shared code.
The platform was live, established and could not be reshaped to suit a new client The clients were built to the contract as it stood, absorbing its response conventions and data-format quirks defensively inside the networking layer so that no screen — and no user — was exposed to them.
Field users work on unreliable connections and cannot wait on a cold start A local relational mirror of the assignment record on Android renders the dashboard before the network answers; a timed in-memory cache on iOS covers the refresh window, a decision documented in the code rather than left implicit. Both check connectivity before issuing a request and fail with a clear, actionable message.
An appraiser working for several managing organisations otherwise faces several inboxes Connection-key enrolment with any number of organisations, organisation scoping carried through every record, and one dashboard spanning all of them.
Answering "what needs me today?" without four more network round trips Overdue, unread, appointment-required and all-outstanding views are derived on the device from a single assignment payload — one request, and derived counts that cannot drift from the lists they summarise.
Reading engagement documents in the field, on the device, without exporting them In-application PDF rendering on both platforms, retrieved through the platform interface, with system share-sheet export where the user genuinely needs the file elsewhere.
Notifications that open the app but not the thing the notification was about Payload-driven deep-link routing into the specific assignment, message or document, with six independently controllable notification categories whose preferences live on the platform and follow the user across devices.
Tablet users being handed a stretched phone interface Dedicated master-detail split layouts and a separate large-screen resource set on Android, with layout branching by device class throughout on iOS.

Security & Reliability

Authenticated device sessions. Authentication issues a session credential bound to the device at login, presented on every subsequent call and cleared on logout, with the enterprise platform remaining the sole authority on what any user may see or do.

Server-side authorisation. The clients hold no authorisation logic. Every assignment, message and document request is scoped by organisation and evaluated by the platform, so the mobile channel cannot widen access beyond what the system of record already grants.

Explicit connection consent. An appraiser sees an organisation's work only after enrolling with a key that organisation issued, and can disconnect. Visibility is an explicit, revocable act on both sides.

Self-service credential recovery over separate channels. Password recovery runs through email with a temporary credential and a forced reset; user-identifier recovery runs through SMS to the registered mobile number. Two channels, deliberately.

Registration verification. Account creation requires email verification, returning the user into the application by deep link rather than leaving them at a web page.

Connectivity-aware failure. Both clients check reachability before issuing a request and present a specific, actionable message rather than an indefinite spinner — the difference, in the field, between a user who retries and a user who calls support.

Defensive response handling. Null-tolerant decoding throughout, sentinel-value filtering on dates, and layered fallbacks for error messaging, so an unexpected payload degrades into a clear message rather than a crash.

Crash reporting in production. Both clients report crashes from the field, where reproduction is otherwise close to impossible.

Content governance from the platform. Licence and privacy content is served rather than bundled, so the terms a user is shown are always the current ones.

Scalability & Performance

One request, four answers. The derived dashboard views are computed on the device from a single assignment payload rather than requested separately — fewer round trips on a mobile connection, and counts that always agree with their lists.

Cache windows tuned to real refresh behaviour. A timed cache suppresses redundant full fetches within the window a user is realistically working in, with pull-to-refresh available whenever they want to override it.

Local mirror for cold start. The Android client's local database renders a usable dashboard before the network responds, which on a poor connection is the difference between a usable app and an unusable one.

Efficient imagery. Property photographs load asynchronously through weak-referenced tasks on Android and a caching image component on iOS, so scrolling a list of assignments does not stall on network images.

Push rather than polling. New assignments, messages, documents and status changes arrive by push notification, so the application is not waking to poll and the device is not paying for it in battery.

Stateless clients. All authority and all durable state sit on the enterprise platform; the clients hold a session credential, a cache and user preferences, so a reinstall costs nothing but a login.

Native on both platforms. Native rendering, native navigation and native device integration, chosen deliberately for an application whose users are outdoors, on cellular connections, on devices spanning a wide range of ages.

Business Outcomes

  • The administrative half of an appraiser's job moved into the field, rather than into the hours before and after it.
  • Assignment offers can be answered immediately, with acceptance, conditional acceptance and decline all completed properly on a phone.
  • Engagement terms and acceptance questions became a server-side change, not an app release on two platforms.
  • Multi-organisation appraisers gained one inbox, with every assignment scoped to the organisation it came from.
  • Coordination stayed attached to the assignment, through in-app messaging with unread state surfaced on the dashboard, instead of scattering into email and phone calls.
  • Documents became readable at the property, not back at the desk.
  • Scheduling became a native, calendar-driven action, with the month's inspections visible at a glance.
  • Time-sensitive events reach the user directly, through granular push notifications that open the exact record concerned.
  • The existing enterprise platform gained a mobile channel without being reshaped to accommodate one.

Why it worked

Most mobile projects are not greenfield. The system of record already exists, it works, and the business depends on it — which means the interesting question is not "what would we build?" but "what can we add without asking the business to change?" That is a harder discipline than it sounds, because the honest answer usually involves absorbing someone else's conventions, quirks and vocabulary into your own code so that the user never encounters them.

Our team builds for that reality. We took an established platform's interface as given, wrapped its conventions inside a single isolated layer in each client, and let every screen above that layer stay clean. We built the most business-critical workflow in the product — formal acceptance of a professional engagement — as a server-driven form engine, because we recognised that the content of that workflow changes for reasons outside anyone's development schedule, and that two native applications behind an app review cycle is exactly the wrong place to hard-code it. We built genuine tablet layouts, genuine offline tolerance where it earned its cost, and we documented in the code the one place where we decided it did not.

Our teams work across native Android and native iOS, integration with established enterprise systems, mobile API contract design, server-driven interface patterns, push notification architecture, offline-tolerant client design and field-workforce applications — with the judgement to know which parts of an existing business process should be modelled faithfully, which should be simplified for a small screen, and which should be moved to the server so nobody has to ship an app to change them.

Final Summary

An appraiser's job is to be at properties. The software running their workload assumed they were at a desk — so the offers, the acceptances, the scheduling, the messages and the documents all queued up for early mornings and late evenings, and everything in between happened by telephone and got re-keyed afterwards.

Our team built native Android and iOS applications that move that entire loop into the field. Assignments arrive by push notification and open directly to the record concerned. Acceptance, conditional acceptance and decline are completed properly on the phone, through forms the enterprise platform defines per assignment and per action — so engagement terms and conditional questions change on the server rather than through two app store release cycles. Inspections are scheduled against a native calendar. Messages stay attached to the assignment they concern. Documents open on the device at the property. And an appraiser working for several managing organisations sees all of it in one inbox, scoped correctly to each.

Underneath, both clients were built to an existing enterprise platform's mobile interface exactly as it stood, with that interface's conventions absorbed into a single isolated layer so no screen above it was ever exposed to them. The dashboard answers the four questions a field professional actually asks each morning, derived on the device from one payload. The Android client keeps a local mirror so it is useful before the network responds. Both ship real tablet layouts. Two independent native codebases, one contract, one behaviour — and a mature enterprise platform that gained a mobile channel without having to change how it worked.

01 — Questions

asked about this kind of project

How do you add a mobile application to an enterprise platform that already exists?

By treating the existing platform's interface as fixed and absorbing its conventions inside a single isolated layer in the client. Every response convention, date quirk and error format is handled once, in one place, so the screens above it stay clean. The alternative — asking a live enterprise system to reshape itself around a new client — is slower, riskier and usually unnecessary.

Why build native applications rather than cross-platform?

For a field-workforce application, device integration is the product: telephony, messaging, calendar, camera-adjacent capabilities, in-app document rendering, deep-linked push and platform-standard navigation. When a substantial share of the value comes from those integrations, and users span a wide range of device ages and cellular conditions, native is the safer choice. Cross-platform is the right answer for a different shape of application.

What is server-driven UI, and when is it worth it?

It is when the server returns a definition of what to display — a list of typed, captioned, validated controls — and the client renders it natively rather than having the screen hard-coded. It is worth it when the content of a screen changes for business or regulatory reasons on a different schedule than your development cycle, and when you have two native clients behind an app review process. It is not worth it for screens that are stable, because it costs you design control. The test is simple: how often does this screen change for reasons that have nothing to do with engineering?

How much offline capability does a field application actually need?

Less than teams usually assume, and it should be decided per application rather than by policy. Full offline write support means conflict resolution, which is expensive and often unnecessary. Frequently what is needed is a fast cold start — the user opens the app on a poor connection and sees their work immediately — which a read cache delivers. In this project one client maintained a local database mirror and the other used a timed in-memory cache; both decisions were correct for their context, and the reasoning was recorded in the code.

How do you keep two native codebases behaving the same way?

By making the contract the source of truth, not either codebase. The same status model, the same derived views, the same form engine, the same notification routing, implemented independently on each platform and verified behaviourally. Attempting to share code between native clients usually produces a lowest-common-denominator layer that fights both platforms; verifying behaviour instead of sharing implementation is generally the better trade.

How should push notifications be designed for field workers?

With granular categories the user controls, preferences stored server-side so they follow the user across devices, and payload-driven deep links that open the specific record the notification concerns. A notification that opens the home screen and leaves the user to find what it was about will be switched off within a week — and then the time-sensitive events it existed to deliver stop arriving at all.

What should be considered before extending an existing platform to mobile?

Which parts of the desktop workflow genuinely need to be mobile. The temptation is to port the whole interface; the right answer is usually a small subset performed under time pressure away from a desk, done extremely well. Everything else can stay where it is. A focused mobile client that does six things properly will be used; a faithful reproduction of a desktop portal will not.

How do you handle documents in a field application?

Render them in the application. A field user asked to leave your app, wait for a download, open another application and then find their way back will do it once. In-application rendering with an explicit export path for the cases that genuinely need the file elsewhere is the pattern that survives contact with real use.

03 — Similar project?

describe what is different about yours

Build yours.

Tell me what exists, what you need and the deadline. Fixed price for a defined scope, or hourly from $10 with a written estimate first.

Ahmedabad, India · IST (UTC+5:30) · --:-- IST · Mon–Fri 09:00–18:00 IST · US & EU overlap daily

No newsletter, no CRM. Just a reply.