
In the previous part of this series, I designed the front half of a custom AI-powered maintenance system.
The system could:
-
Receive requests by email or web form
-
Understand what the resident is reporting
-
Identify the property and location
-
Categorize the issue
-
Estimate urgency
-
Check for duplicate incidents
-
Acknowledge the resident
-
Create or update a maintenance case
-
Place that case into a review queue
At that point, the system has done a lot of work.
But it hasn’t actually authorized anything.
And that distinction matters.
If a resident reports water leaking near the elevators, I don’t necessarily want AI autonomously deciding to call a plumber, approve a service visit, incur a cost and commit the property manager to work.
- I want the AI to prepare the decision.
- Then I want a person to make it.
That is where the second half of the system begins.
Step 1: Give the Property Manager One Clear Decision
Imagine the property manager opens the maintenance queue and sees this:
CRITICAL PRIORITY
123 Main Street
Possible active water leak near the P2 elevator lobby.
Six residents have reported the issue in the last 12 minutes.
Two residents mention water appearing to come from the ceiling.
No matching open incident was found.
Recommended contractor: ABC Plumbing
Reason: Approved emergency plumbing contractor for this property
The system has already:
-
Read the incoming messages
-
Grouped the reports
-
Identified the likely problem
-
Assessed the urgency
-
Checked for duplicates
-
Looked up the approved contractor
-
Summarized the incident
The property manager now has several choices:
- Approve Dispatch
- Assign Internally
- Change Contractor
- Request More Information
- Hold
- Merge With Existing Incident
- Close
This is the boundary I would deliberately create around AI.
AI recommends.
Humans authorize.
The value isn’t that AI eliminates the property manager.
The value is that the property manager may now spend ten seconds making a decision that previously required several minutes of reading, searching, forwarding and composing emails.
Multiply that by dozens of requests per day and the operational impact becomes significant.
Step 2: Let AI Draft the Contractor Communication
Once the property manager approves the action, the system already knows most of what the contractor needs.
There is no reason for the property manager to write another email from scratch.
The system could generate something like:
Subject: Urgent Service Request #2847: Water Leak, 123 Main Street
Multiple residents have reported water accumulating near the P2 elevator lobby at 123 Main Street.
Reports began at approximately 2:14 PM and indicate that water may be entering from the ceiling.
Please confirm whether you can attend and provide your estimated arrival time.
Work Order: #2847
The manager reviews it.
Clicks:
Approve & Send
And the message goes out.
That sounds like a small improvement.
Operationally, it isn’t.
The property manager still controls the decision.
But they are no longer responsible for manually assembling all the information required to communicate it.
The system already has:
-
The property
-
The location
-
The issue
-
The priority
-
The incident number
-
The preferred contractor
-
The resident reports
-
The relevant contact information
AI simply turns that structured information into a clean communication.
Step 3: Use Email or SMS Based on the Situation
I wouldn’t send every maintenance message through every possible channel. That creates noise.
Email is useful when detail matters.
SMS is useful when attention matters.
For example:
A normal contractor dispatch may include:
-
address
-
work-order number
-
description
-
photos
-
access instructions
-
contact details
-
requested attendance window
Email is ideal for that.
SMS
An urgent alert could be much shorter:
Urgent work request #2847 at 123 Main Street. Possible active water leak on P2. Review: [secure link]
Or an internal escalation:
CRITICAL: Possible active water leak reported at 123 Main Street P2. Human review required.
The communication method should follow the urgency and purpose of the message.
Not everything needs an SMS.
And not everything should disappear into someone’s inbox.
Step 4: Don’t Force Contractors Into Another App
This is one design decision I feel strongly about.
Contractors already have their own systems:
- The plumber has a dispatch process.
- The elevator company has service software.
- The landscaper has scheduling tools.
The last thing I would want to do is tell every contractor:
Download our app, create another account and remember another password.
Instead, send them an email or SMS containing a secure link tied to that specific work request.
The contractor clicks the link and sees something like:
Work Order #2847
123 Main Street
Possible active water leak near P2 elevators.
Can you attend?
Accept
Unable to Attend
If they accept:
Estimated arrival
-
-
2:30 PM
-
3:00 PM
-
4:00 PM
-
Other
-
The response goes directly back into the maintenance system. No app. No account creation. No password reset six months later.
The contractor interacts with the system only as much as necessary to complete the work.
That reduces friction on both sides.
Step 5: Track the Contractor Response
Once the contractor responds, the maintenance case changes automatically.
Suppose ABC Plumbing selects:
Accepted
ETA: 3:00 PM
The incident now records:
Status: Contractor assigned
Contractor: ABC Plumbing
Accepted: 2:26 PM
Estimated arrival: 3:00 PM
The property manager doesn’t need to receive the contractor’s email, manually update a spreadsheet, forward the response to somebody else and then send another message to the resident.
The system already knows what happened.
That means it can trigger the next communication automatically.
Step 6: Keep Residents Informed Without Creating More Work
This is where the earlier duplicate-detection design becomes particularly valuable.
Suppose seventeen residents reported the broken elevator. The maintenance department needs to arrange one repair. But seventeen people may still want to know what’s happening.
Once the incident is centralized, communication can follow the status.
Contractor assigned
Your reported maintenance issue has been assigned to a contractor.
Contractor scheduled
A technician is expected to attend today between 3:00 PM and 5:00 PM.
Delay
The technician attending this issue has been delayed. The revised estimated arrival time is approximately 5:30 PM.
Resolved
Elevator #2 has been returned to service. Thank you for reporting the issue.
Now all seventeen residents associated with that incident can receive the same status update.
The maintenance department completes one repair.
The communication system closes seventeen loops.
That is a fundamentally different workflow from treating every resident email as an independent ticket.
Step 7: Escalate When the Contractor Doesn’t Respond
Automation becomes even more useful when something doesn’t happen.
Suppose the preferred plumbing contractor receives the request but hasn’t responded within ten minutes.
The system could flag:
NO CONTRACTOR RESPONSE
Then follow a predefined escalation path.
For example:
- 0 minutes: Send request to primary contractor
- 10 minutes: Send SMS reminder
- 15 minutes: Alert property manager
- 20 minutes: Recommend secondary approved contractor
The property manager could then approve the backup contractor.
This is the type of repetitive monitoring software is very good at.
No one has to remember:
Did ABC Plumbing ever reply to that email?
The system knows.
Step 8: Give Every Property Its Own Rules
The system shouldn’t have one global list of contractors.
Each property may operate differently.
For every building I would store information such as:
-
approved plumber
-
elevator contractor
-
electrician
-
landscaper
-
janitorial company
-
security provider
-
superintendent
-
emergency contacts
-
after-hours contacts
-
preferred communication channel
-
spending authorization limits
-
escalation rules
-
building-specific access instructions
Then the system can understand that:
Building A + elevator issue → Contractor X
while:
Building B + elevator issue → Contractor Y
The property manager shouldn’t have to search through old emails to remember who services which building.
The system should already know.
This also gives us a way to introduce spending controls.
For example:
- Routine work under $300: Manager approval required.
- Emergency work: Immediate human escalation.
- Work over $2,500: Senior manager approval required.
You are not taking humans out of the loop, and the exact rules would vary by organization.
The important part is that the workflow follows explicit business rules rather than relying entirely on the language model.
Step 9: Treat Safety Differently From Normal Maintenance
Not every issue belongs in the same automation workflow.
A dead shrub can wait.
Water pouring through a ceiling cannot.
I would create at least three broad categories.
Emergency / Life Safety
Examples might include:
-
suspected fire
-
major active water leak
-
serious electrical hazard
-
trapped elevator occupant
-
suspected gas leak
These should immediately alert a human and trigger predefined emergency procedures.
Urgent
Examples might include:
-
elevator unavailable
-
significant plumbing problems
-
building-access failures
-
major landlord-responsible appliance failures
These move to the top of the queue.
Routine
Examples might include:
-
lighting
-
landscaping
-
cosmetic damage
-
minor repairs
These can follow the normal review workflow.
AI can help classify the request.
But I would not allow probabilistic AI classification to be the only safeguard around a potentially dangerous situation.
If someone writes:
“I smell gas.”
I don’t want a language model debating whether its confidence is 81% or 84%.
I want a predefined safety rule to take over.
That could mean:
-
Immediate alert to designated property staff
-
Prominent emergency status in the queue
-
Predefined instructions
-
Escalation if no one acknowledges the incident
This is where traditional rules and AI should work together.
AI is very good at interpreting messy language.
Rules are very good at saying:
If this condition exists, this must happen.
Use each where it is strongest.
Step 10: Keep a Complete Audit Trail
Every action should be recorded.
Imagine the timeline for our water-leak incident:
- 2:14 PM
Resident report received. - 2:14 PM
AI classified issue as Plumbing / Active Leak. - 2:14 PM
Priority recommended as High. - 2:15 PM
Resident acknowledgement sent. - 2:17 PM
Second resident report linked to incident. - 2:18 PM
Third report mentions water coming from ceiling. - 2:18 PM
Priority escalated to Critical. - 2:19 PM
Property manager notified. - 2:21 PM
Manager approved dispatch to ABC Plumbing. - 2:21 PM
Contractor email and SMS sent. - 2:26 PM
ABC Plumbing accepted. - 2:26 PM
ETA recorded as 3:00 PM. - 2:27 PM
Six affected residents notified. - 3:06 PM
Contractor marked On Site. - 4:12 PM
Contractor marked Work Complete. - 4:13 PM
Residents notified of resolution.
Now if anyone asks:
What happened?
the answer isn’t buried across an Outlook inbox, SMS messages and someone’s handwritten notes.
There is one history.
That becomes valuable for:
-
Resident complaints
-
Contractor performance
-
Management reporting
-
Insurance questions
-
Recurring equipment problems
-
Service-level monitoring
Step 11: Measure the Operation
Once everything passes through the system, the organization starts accumulating operational data.
Now it can measure:
-
Maintenance requests by building
-
Requests by category
-
Requests by time of day
-
Duplicate reports
-
Acknowledgement time
-
Manager approval time
-
Contractor acceptance time
-
Contractor arrival time
-
Resolution time
-
Reopened requests
-
Reesident satisfaction
-
Contractor acceptance rates
-
AI classification accuracy
-
Number of AI recommendations changed by employees
That creates a second use for AI.
The first use was:
What does this resident’s email mean?
The second becomes:
What is happening across my properties?
For example:
Elevator #2 at Building A generated 48 resident reports over the last six months.
Or:
Plumbing Contractor A takes an average of 12 minutes to acknowledge urgent work. Contractor B takes 47 minutes.
Or:
Building C generates three times as many after-hours maintenance incidents as comparable properties.
Now we’re moving from automation into operational intelligence.
And that’s where this relatively narrow maintenance system starts becoming strategically useful.
What Have We Actually Built?
At this point, our proposed system can handle the entire operational loop:
Resident sends request
↓
AI understands and categorizes it
↓
Duplicate incidents are identified
↓
Resident is acknowledged
↓
Maintenance case enters review queue
↓
AI recommends action and contractor
↓
Human approves
↓
Contractor receives email/SMS
↓
Contractor accepts and provides ETA
↓
Residents receive updates
↓
Work is completed
↓
Incident closes
↓
Performance data is retained
That’s a real product. Not a chatbot. Not an AI demo. Not another button labelled Ask AI.
It’s an operational system in which AI removes administrative effort while people retain control over consequential decisions.
And Now We Have to Ask the Uncomfortable Question
We’ve designed something that could be built.
But should it be?
That’s where the economics matter.
Property Meld already offers substantial maintenance functionality for a per-unit subscription.
Entrata, AppFolio, Building Engines and other commercial platforms have years of development behind them.
A custom application means paying for:
-
discovery
-
consulting
-
workflow design
-
development
-
testing
-
implementation
-
training
-
hosting
-
AI usage
-
email and SMS
-
maintenance
-
future enhancements
So the next question isn’t:
Can we build this?
Clearly, we can.
The question is:
Should we build it?
In the next part, I’ll compare the cost of building this system with buying an existing solution, including the consulting and implementation work that often gets left out of custom-development estimates.
That’s where the build-versus-buy decision gets much more interesting.
Resources: Visit PropertyMCL.com to learn more about Property Maintenance Control.