FileMaker performanceFileMaker developmentdatabase structurecustom software maintenanceFileMaker and Claris

How to improve the performance and structure of a FileMaker solution

Jeroen·

A practical guide to diagnosing and fixing slow, tangled FileMaker systems — with concrete steps to improve speed, structure, and maintainability.

Your FileMaker solution used to feel instant. Now a layout that opens in half a second on a small dataset takes four or five seconds once a table has 200,000 records. Reports that used to run during a coffee break now run overnight. Every new employee asks "is it just me, or is this always this slow?" — and every developer who has touched the file over the past ten years has added a script, a table, or a plugin without ever removing the ones nobody uses anymore.

This is not a FileMaker problem. It's what happens to almost any custom database system that grows organically for years without a deliberate pass on performance and structure. The good news: FileMaker solutions are unusually fixable, because the platform gives you visibility into scripts, relationships, and layouts that many other systems hide. This article walks through how to actually diagnose and fix it.

Why does a FileMaker solution slow down over time?

Three things almost always compound together:

  1. Data volume grows, but the schema was designed for a smaller dataset. A relationship or a summary field that was fine at 5,000 records becomes a bottleneck at 500,000.
  2. Scripts accumulate "just in case" logic. A script written five years ago still loops through every record to check a condition that could now be handled with a single found set and a fast calculation.
  3. Nobody owns the architecture. Multiple developers, freelancers, or well-meaning power users have each added their own tables, scripts, and layouts, often duplicating logic instead of reusing it.

None of these are dramatic failures. They're small decisions, each reasonable on its own, that add up to a system that feels heavier every year.

How do you know if it's a performance problem or a structure problem?

These are related but different, and the fix is different too.

  • Performance problems show up as: slow layout loads, slow finds, slow scripts, timeouts during import, or a solution that gets noticeably slower as data grows.
  • Structure problems show up as: developers afraid to touch anything because they don't know what will break, duplicate fields that drift out of sync, business logic scattered across scripts instead of centralized, and onboarding a new developer taking weeks instead of days.

In practice, structure problems eventually cause performance problems — a badly normalized schema forces inefficient scripts to compensate for it. So even if the complaint is "it's slow," the real fix is often structural.

Where do FileMaker performance problems actually come from?

Unstored (unindexed) calculations

A calculation field that references related tables, global variables, or Get() functions can't be indexed. If it's used in a find, a sort, or a portal filter, FileMaker has to calculate it for every single record, every time. This is one of the single biggest, most fixable causes of slowness in mature solutions.

Loops that walk every record instead of using a found set

A script that says "go to record 1, check condition, go to next record, repeat" against 100,000 records will always be slower than performing a Find first and then acting only on the matching set. This pattern is extremely common in solutions built incrementally by different people over the years.

Portals and layouts pulling more data than needed

A layout with ten portals, each showing related records, each with summary fields, all loading at once — even if the user only ever looks at two of them. Every extra portal, every extra related field on a layout, is a small tax paid on every single record load.

Poor network layer awareness (hosted vs. local)

In a hosted, multi-user solution, every unnecessary field on a layout and every unindexed find has to travel over the network. A script that feels fine on a local copy can be dramatically slower for real users connecting to a hosted server, especially over VPN or a slower connection.

Plugins and external calls blocking the interface

A script that calls an external API synchronously, on the main thread, freezes the whole interface until it gets a response. If that API is slow or briefly unavailable, every user feels it.

How do you actually diagnose what's slow?

Don't guess — measure. FileMaker gives you the tools to do this properly.

  1. Turn on the Data Viewer and Script Debugger while reproducing the slow action, step by step, to see exactly which line is the bottleneck.
  2. Use the Performance tab / Topcall analysis on FileMaker Server (or a similar monitoring approach) to see which scripts, layouts, or calculations consume the most server time in real usage — not just in your test.
  3. Check the Database Design Report (DDR) to get a full inventory of every table, field, script, and layout, and which calculations are unstored.
  4. Time it deliberately. Add a simple Get(CurrentTimeUTCMilliseconds) before and after suspect script steps during testing, and log the difference. This turns "it feels slow" into an actual number you can compare before and after a fix.
  5. Reproduce with realistic data volume. A script that's fine with 500 test records can behave completely differently at 300,000 real records — always test performance fixes against a copy of production-scale data.

What's the step-by-step approach to fixing it?

Step 1: Inventory before you touch anything

Run a Database Design Report and get a plain list of every table, script, layout, and value list. You cannot safely simplify what you haven't mapped. This step alone often reveals unused tables and orphaned scripts nobody remembered existed.

Step 2: Find and fix unstored calculations used in finds or sorts

Go through every calculation field referenced by a Find, a sort, or a portal filter. Where possible, replace it with a stored field updated by a script trigger, or restructure the relationship so the value can be indexed.

Step 3: Replace record-by-record loops with found-set logic

Rewrite scripts so they perform a Find (or use ExecuteSQL) to isolate the relevant records first, then loop only through that found set — never the whole table.

Step 4: Slim down layouts

Remove portals, related fields, and summary calculations that aren't actually used on that specific layout. If users need that data occasionally, put it behind a button or a separate detail view instead of loading it every time.

Step 5: Separate data, business logic, and interface

Move toward a clear separation: one layer of tables and relationships (data), one layer of scripts that enforce business rules (logic), and layouts that are as "dumb" as possible (interface). This is the core idea behind the FileMaker "Separation Model," and it's the single highest-leverage structural change for long-term maintainability.

Step 6: Consolidate duplicate scripts and fields

Where the same logic exists in three slightly different scripts (often because three different developers each wrote their own version), consolidate into one script called with parameters. This reduces the surface area for bugs and makes future changes safer.

Step 7: Move heavy processing off the interface

For long-running imports, integrations, or batch jobs, use server-side scripts (via FileMaker Server's Perform Script on Server) instead of running them on a user's own machine. This keeps the interface responsive for everyone else while the heavy work happens in the background.

Step 8: Re-test with real data volume and real users

Don't just check that it works — check that it's actually faster, using the timing method from Step 4, and get feedback from the people who complained in the first place.

What should you leave alone?

Not everything old is broken. A script that's a little inelegant but runs in under a second and is rarely used isn't worth the risk of touching. Prioritize:

  • Scripts and layouts used constantly, by many users, every day.
  • Anything already reported as slow by actual users.
  • Anything that will be touched anyway because of a new feature request — refactor it while you're already in there.

Rewriting stable, rarely-used code purely for elegance is a common trap that burns budget without improving anything users notice.

How do you prevent this from happening again?

  • Document as you go. Even a simple internal wiki page per major script or module saves hours later.
  • Adopt naming conventions for scripts, tables, and fields, and enforce them for every developer who touches the file.
  • Review new scripts against the same found-set and indexing principles before they ship, not after they've caused a slowdown.
  • Schedule a periodic structural review — even a half-day annual check against the DDR — instead of waiting until performance complaints pile up.
  • Keep a test copy with realistic data volume so performance issues are caught before they reach production.

FAQ

Does upgrading to the latest FileMaker version fix performance on its own? Sometimes it helps at the margins (engine improvements, better indexing under the hood), but it rarely fixes a structural problem. A badly designed schema will still be slow on the newest version.

Is it better to fix the existing file or rebuild from scratch? Almost always fix and refactor incrementally. A full rebuild is expensive, risky, and often recreates the same problems in a new shape unless the underlying process and structure are genuinely rethought. Related considerations are covered in our broader FileMaker and Claris knowledge base.

How much performance improvement is realistic? It varies, but it's common to see slow processes go from minutes to seconds once unstored calculations and record-by-record loops are fixed — because these two issues alone are responsible for a large share of real-world FileMaker slowdowns.

Can a non-developer (business owner, IT manager) spot these problems without deep FileMaker knowledge? Yes, partially. If certain screens are consistently reported as slow, if reports take longer every quarter, or if developers say they're "afraid to change anything," those are all signs worth investigating even before a technical audit.

Quick checklist

  • Run a Database Design Report to inventory everything
  • Identify unstored calculations used in finds, sorts, or portal filters
  • Replace record-by-record loops with found-set-based scripts
  • Remove unused portals and related fields from busy layouts
  • Move heavy jobs to server-side scripts
  • Consolidate duplicate scripts and fields
  • Re-test with production-scale data, not just sample data
  • Document naming conventions and schedule periodic reviews

If your FileMaker solution has quietly grown slower and harder to maintain over the years, you're not alone, and it's rarely a reason to start over. Loggix regularly helps teams audit an existing FileMaker system, pinpoint exactly which scripts, layouts, or relationships are causing the slowdown, and refactor them into a cleaner, faster structure — sometimes alongside adding API integrations or AI-assisted workflows once the foundation is solid again. A short, focused consultancy session is often enough to turn "it feels slow" into a concrete, prioritized action plan.