Problems & solutions · Custom Software

Municipal Software Problems: The 7 That Stall Permits and 311, and How to Avoid Them

Municipality Software workflow illustration showing common problems and fixes.
The short answer

The single most expensive failure in a municipal software project is starting anywhere other than the address and parcel layer. Every module you build afterwards, inspections, code enforcement, 311, utility links, attaches records to an address string instead of an authoritative parcel, and the day someone processes a lot line adjustment the history splits and cannot be reassembled. Retrofitting a parcel master into a live permitting system is typically a larger piece of work than the first release cost, and until it is done nobody can answer what has ever happened at this address without three searches and a guess.

Why does one permit type turn into six departments so often?

A city scopes a first release around building permits. Discovery starts, and within three weeks Fire wants their conditional review in the workflow, Engineering wants creek setback logic, Planning wants entitlement conditions to carry into the permit, Public Works wants encroachment permits in the same system, and the sanitary district asks whether they could get a login too. Nobody in the room is wrong. A commercial tenant improvement really does touch all of them.

What makes this specific to cities is that departments are separate budgets with separate directors, and a software project is the first neutral table they have shared in years. So the project becomes the venue for a reorganisation nobody scheduled. The result is a scope priced like the $150,000 to $400,000 full platform, delivered on the schedule of the slowest department, with the sponsor changing after an election.

The fix is to make the first release one permit type end to end plus 311 intake and status, on top of the address and parcel service, at $60,000 to $130,000 over 12 to 16 weeks. That is deliberately chosen so a cycle time number reaches council inside one budget cycle. Additional departments join as configuration of routing rules rather than as new development, which is only possible if routing was built as data your Building Official edits rather than as code. Say that out loud in the kickoff and hold it.

What goes wrong when you migrate twenty years of permit records?

Extraction is the easy part. The problem is that a meaningful share of your historical records carry addresses that never matched a parcel in the first place, because they were typed at a counter by a contractor in 2007 and nobody validated anything. Some are misspelled, some reference streets that were renamed, some belong to parcels that have since been split or merged, and some are for structures that no longer exist.

Cities discover this at the worst moment, when the migration script runs and reports a large block of records with no parcel match. At that point there is a choice nobody prepared for: guess, or stop. Guessing is how code enforcement history ends up attached to the wrong property, which is a genuine legal exposure the first time a case is challenged.

The second issue is your vendor's extraction terms. Confirm in writing what format you can get, at what cost and on what notice, before you sign anything with a new developer. Some cities find their exit is a fee and a wait they did not budget.

The pattern that works is to treat migration as its own workstream with named staff, not a task inside development. Migrate open and recent records fully, migrate closed history into a read only archive linked to the parcel where a match exists and flagged where it does not, and let your staff adjudicate the exceptions rather than a script. Budget 3 to 5 weeks of a records person's time and say so in the project plan.

Why do the Munis, ArcGIS and Cityworks integrations break after launch?

Each one fails in a different way and all three are predictable. Munis or Naviline is usually the hardest, because on older instances there is no usable interface at all, so the real design is a scheduled file exchange plus a reconciliation report. That works, and it breaks when finance changes an object code and nobody tells the development team, so postings land in suspense and are discovered at month end. The fix is a daily reconciliation that alerts on unmatched postings rather than a nightly job that assumes success.

ArcGIS breaks when the parcel layer is republished. Your GIS analyst updates a feature service, field names shift slightly or a domain value changes, and the address service starts failing matches silently. Consuming a live feature service is the right architecture, and it needs a schema check on every refresh with an alert when the shape changes.

Cityworks breaks around identity. A 311 request creates a work order, but if the work order ID is not written back to the request, the two records drift apart the first time a crew closes the job in the field. Then the resident never hears anything and reports the same pothole again.

The common fix is to require the developer to name the specific system, the specific method and the specific failure alert for each integration in the statement of work. There is a large gap between saying they do interfaces and having reconciled a fee posting into a live general ledger.

What happens when accessibility and records law are treated as a QA pass?

Anything resident facing carries WCAG 2.1 AA and Section 508 obligations, and a VPAT will be asked for. Cities that treat this as a testing activity at the end pay twice, because the failures are structural: custom form controls that no screen reader announces, error messages conveyed only by colour, a map interface with no keyboard path, a payment step that traps focus. Fixing those means rebuilding the interface, not adding attributes.

Records law fails more quietly. Your retention schedule is a PDF staff mostly remember, so nobody attaches retention rules to record types at creation. Two years later disposition is a manual project and a records request forces a search across the permitting system, Laserfiche, six inboxes and a shared drive against a short statutory clock. GovQA or NextRequest tracks the request. Neither finds the documents.

The fix is to make both design constraints. Accessibility means keyboard paths and real screen reader testing from the first screen, with a VPAT as a deliverable. Records means retention attached at record creation, an audit log designed for a court rather than for debugging, and an indexed search across the systems you already own with staff approving every redaction before release. Nothing auto releases, ever.

Should you build custom or configure what you already own?

There is a real class of city that should configure and stop. Under roughly 25,000 residents, under about 1,500 permits a year, no full time IT staff, no unusual overlay districts or local amendments: take OpenGov ViewPoint or CityView, adopt their process exactly as written, resist customising, and you will be fine. The mistake at that size is buying an enterprise platform and then paying to make it act like your city.

Even when you do build, keep your systems of record off the shelf. Do not rebuild Munis, ArcGIS, Laserfiche or Granicus. They are good at what they do and rebuilding any of them is how a city project ends up in the newspaper. Keep Accela or Tyler EnerGov too if your process genuinely fits the product and your change orders are rare.

The signals that justify building are concrete. You have spent more on change orders and professional services than on licence in the last two years. A workflow that matters runs on a spreadsheet one planner maintains. Three or more systems require a human to re key between them. Your permit cycle time is a council agenda item. You have missed a statutory records deadline. Or your vendor quoted you to extract your own data. Any two of those and the build is cheaper than the status quo.

How do hidden costs get into the quote?

The first is migration, which almost every quote understates because it is priced as a data load rather than as adjudication of two decades of unmatched addresses. Ask for it as a separate line with named city staff attached.

The second is the number of departments in a single workflow. Each additional reviewer is a stakeholder with their own conditions, their own turnaround expectations and their own opinion about serial versus parallel review, and each one adds discovery time rather than development time. Six departments is not twice the cost of three, it is roughly twice the calendar.

The third is payments. Contain PCI scope by tokenising through a processor you already use such as Point and Pay or Invoice Cloud, so card data never touches your application. Quotes that assume a card form in your own interface are quoting a compliance programme without saying so.

The fourth is hosting posture. If your state, your insurer or your cyber policy expects StateRAMP or SOC 2, that is architecture and evidence work, not a hosting line item. The fifth is multilingual resident facing screens, including transactional email and receipts rather than only the form. The sixth is procurement itself, where the request for proposals cycle, security review and insurance requirements add weeks that have nothing to do with code.

What separates a municipal build that works from one that fails?

The first separator is the data model. Ask the developer to model parcel, address, record, review, condition, fee, inspection and case on a whiteboard before any contract. If they cannot explain how a lot line adjustment splits history, or why a fee needs an effective date and a stored formula version, they will learn on your budget.

The second is whether fees are versioned configuration. Council adopts a fee resolution, someone stages the new version, and it goes live at midnight on the adoption date, with every past calculation storing its inputs and its formula version so a fee assessed in 2024 still recomputes exactly as it did in 2024. That single property ends fee disputes and audit findings, and it is the thing a vendor scripted fee engine cannot give you.

The third is whether routing is data. If adding Fire as a conditional reviewer requires a developer, you have rebuilt the vendor relationship you were escaping. Your Building Official should edit that rule directly.

The fourth is realistic use of AI: completeness screening, 311 deduplication and routing, and proposed redactions, with a staff member approving before anything is issued or released.

The last is ownership and exit, in writing before kickoff: your code in your repository, your data in your cloud account, documented schemas, and a stated cost to hand the whole thing to a different firm. A developer who resists that clause is telling you what the next five years look like.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. Only 22% of firms are 'future ready' having significantly transformed digitally; these companies show average revenue growth 17.3 percentage points and net margins 14.0 percentage points above their industry average. Source: MIT Center for Information Systems Research (MIT Sloan) (2022) →
  2. The Standish Group 1995 CHAOS Report found only 16.2% of software projects fully succeeded; success varied sharply by size, with large-company projects succeeding about 9% of the time versus far higher rates for small projects - best treated as an industry survey, not an audited dataset. Source: Standish Group (1995) →
  3. Qualtrics research (Q3 2023 survey of ~28,400 consumers across 26 countries) estimated bad customer experiences put roughly $3.7 trillion in global revenue at risk annually, a 19% jump from the prior year's $3.1 trillion; 64% of customers say they will switch companies over poor service regardless of how much they like the product. Source: Qualtrics XM Institute (via Forbes) (2024) →
  4. WordPress powers 41.5% of all websites and holds 59.2% of the market among sites running a known content management system, making it by far the most-used CMS on the web. Source: W3Techs (2026) →
Vikram R. · VP Engineering · Delhi

Vikram runs the engineering function at Digital Heroes, from how teams are structured to how code gets reviewed and released. He writes about the trade offs behind build decisions: what to buy, what to build, and where technical debt is worth taking on deliberately.

View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

Where should a city start if it can only fund one release this budget year?
Start with the address and parcel service against your authoritative ArcGIS layer, then one permit type end to end with fees, routing, payment and issuance, plus 311 intake and status. That is the $60,000 to $130,000 shape that ships in 12 to 16 weeks in Digital Heroes delivery experience, and it is chosen deliberately so you can put a cycle time number in front of council inside one budget cycle. Every later module is cheap once the parcel layer is the master and expensive to retrofit if it is not.
How bad is permit data migration really?
Worse than the quote usually assumes, because the problem is not extraction, it is that a meaningful share of historical records carry addresses that never matched a parcel. Guessing at those matches attaches code enforcement history to the wrong property, which is a real exposure the first time a case is challenged. Migrate open and recent records fully, put closed history into a read only archive linked to the parcel where a match exists, flag the rest, and have named staff adjudicate exceptions over 3 to 5 weeks.
Our finance system has no API. Does that kill the project?
No, it makes the finance integration a real engineering line item rather than a small task. The working pattern with older Munis or Naviline instances is a scheduled file exchange plus a daily reconciliation report that alerts on unmatched postings, so a changed object code surfaces the next morning rather than at month end. Budget it explicitly and ask the developer to describe the alerting, because the failure mode is silent success rather than an obvious error.
Why does the ArcGIS integration stop matching addresses a few months after launch?
Almost always because the parcel feature service was republished with a slightly different schema or domain values, and the address service began failing matches without erroring. Consuming a live feature service is still the right architecture, since your GIS analyst maintains the authoritative layer, but it needs a schema check on every refresh and an alert when the shape changes. Also plan explicitly for splits and merges so history follows the parcel rather than the address string.
Do we have to meet WCAG 2.1 AA on a custom permitting portal?
Yes for anything resident facing, and treating it as a QA pass at the end is what makes it expensive. The failures that matter are structural: custom controls no screen reader announces, errors conveyed only by colour, a map with no keyboard path, a payment step that traps focus. Build keyboard paths and real screen reader testing in from the first screen, and ask for a VPAT as a named deliverable rather than an assurance.
How do we keep PCI scope small on permit fee payments?
Never let card data touch your application. Route payments through a processor your city already uses, such as Point and Pay or Invoice Cloud, using hosted fields or a redirect so you store only a token and a receipt reference while your system still owns the fee, the balance and the ledger posting. Ask any developer to state your resulting PCI scope in writing before design starts, because reducing scope after the interface is built is considerably more expensive.
Should a small city build at all?
Usually not. Under roughly 25,000 residents, under about 1,500 permits a year, with no full time IT staff and no unusual overlay districts, take OpenGov ViewPoint or CityView, adopt their process as written and resist customising. The genuine mistake at that scale is buying an enterprise platform and then funding change orders to make it behave like your city. Building becomes rational when change orders and professional services have exceeded your licence spend for two years running.
How do we stop 311 requests and Cityworks work orders drifting apart?
Write the work order identifier back onto the request when it is created, and treat the request as a lifecycle object with received, triaged, assigned, scheduled and closed states rather than as a message. Without the write back, a crew closing a job in the field never updates the resident facing record, so the resident hears nothing and reports the same pothole again. Add duplicate detection on category, geocode and a recent time window so four reports become one thread with four subscribers.
How small can the first version of my software be and still be worth building?
One workflow, end to end, for one type of user: the single process that currently burns the most hours or loses the most money. In Digital Heroes delivery experience, first versions scoped to 6 to 10 weeks of build time ship, get used, and generate the feedback that makes version two obviously right, while 9-month first versions routinely launch with features nobody touches. Everything you cut from v1 gets cheaper to build later, because real usage reorders the roadmap for you.
We run everything on Airtable and spreadsheets. When is it time to go custom?
The switch usually makes sense when you hit one of two walls: Airtable's record caps (125,000 records per base on the Business plan) or logic the tool cannot express, like multi-step approvals with conditional pricing. There is also a simple cost signal: 25 people on Business at roughly $45 per seat per month is about $13,500 a year, forever, for a tool you are already fighting. Custom is worth it when the workflow is core to how you make money; for peripheral processes, staying on Airtable is the right call.
Who owns the code when an agency builds my software?
You should, completely, through a written intellectual property assignment that transfers everything on final payment; without that clause, copyright stays with whoever wrote the code by default. Insist that the repository lives in your own GitHub organization from day one and that hosting, domains, and third-party accounts are registered to you. Also check for licenses to the agency's proprietary frameworks buried in the contract, because those can make switching vendors practically impossible even when you own your own code.
How many SaaS seats do we need before building custom becomes cheaper?
The crossover usually shows up between 20 and 50 seats on premium tiers. Salesforce Enterprise lists at $165 per user per month, so 40 users cost about $79,000 a year in subscriptions, which is real money against a custom system you would own outright. Run the comparison over three years: if subscription spend beats the build cost plus 15-20% annual maintenance, custom wins on price before you even count workflow fit.
What does a $50,000 custom software budget actually buy?
One core workflow done properly: 10 to 15 screens, two or three user roles, a couple of integrations, an admin panel, and automated tests, delivered in roughly 12 to 14 weeks. What it does not buy is that workflow plus a mobile app plus AI features plus five more integrations. The discipline of picking the one workflow that matters is what separates $50,000 projects that ship from $50,000 projects that stall at 70% complete.
Is a solo freelancer enough for my project, or do I really need an agency?
A solo freelancer is a fine choice for a well-defined build under roughly $15,000 to $20,000 with a limited lifespan: an internal calculator, a scripted integration, a prototype. Above $50,000, or for any system your business will depend on for years, you are buying continuity as much as code: enforced code review, cover when someone is ill, and support that outlasts one person's career plans. Price the risk of a single point of failure, not just the hourly rate.
What should I prepare before contacting a software development agency?
A one-page brief beats a 40-page requirements document: the business problem in plain words, who will use the system, the 5 to 10 workflows it must handle, the tools it must connect to, and your budget range and deadline driver. You do not need wireframes, a specification, or technical vocabulary; producing those is the agency's job during discovery. Stating a budget range up front is the single best move, because it gets you honest scoping instead of a quote engineered to win the meeting.
Should we build an MVP first or go straight to the full system?
MVP first, for almost everyone: ship the single workflow that carries the business value in 10 to 16 weeks, learn from real users, then fund phase two from evidence instead of guesses. The caveat is that an MVP is a small version of a well-built system, not a badly built version of a big one; the data model must already support what comes next. An agency that cannot tell you what they deliberately left out of your MVP has not designed one.
Does the tech stack matter, and which one should I ask for?
It matters less than agencies imply, provided it is boring. A mainstream stack, something like React or Next.js on the front end, Node.js or Python behind it, and PostgreSQL for data, means thousands of developers can maintain your system if you ever change vendors. Apply one test: ask how hard it would be to hire a replacement developer for the proposed stack, and walk away from anything built on an agency's in-house framework.
Will custom software work with the tools we already use, like QuickBooks and Stripe?
Yes, and this is one of custom software's genuine advantages: QuickBooks, Stripe, Shopify, and most mainstream business tools publish documented APIs built for exactly this. Expect each standard integration to add one to two weeks of build time, and be suspicious of any quote that lists five integrations without asking what data flows in which direction. The hard cases are legacy systems with no API, which is a question to raise in discovery, not in week nine.
How do I calculate whether custom software will pay for itself?
Divide the build cost by the monthly benefit, where benefit is hours saved times loaded hourly cost, plus subscription fees replaced, plus any revenue the software unlocks. Three staff saving 10 hours a week each at a $40 loaded rate is about $62,000 a year, which pays back a $60,000 build in roughly 12 months. Across Digital Heroes internal-tool projects, 12 to 24 months is the normal payback range, and anything projecting under 6 months usually means the spreadsheet is hiding costs.
Who can build a custom software system?

Digital Heroes builds custom software systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.

Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.

What makes Digital Heroes different from other software companies?

Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.

Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.

How can I check Digital Heroes is legitimate before getting in touch?

Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.

Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.

Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?