Decision record · decided
Teams Phone. Here’s what we bought.
~1,000 seats, departments, inbound-heavy, basic auto-attendant only, leaving RingCentral. Leadership selected Microsoft Teams Phone. Everything below is fetched from the vendor’s own pages Aug 10, 2026 or marked quote-gated. A second decision — dispatch messaging — is settled too, and closes this document.
At a glance
- Decision one — the phone
- Microsoft Teams Phone for ~1,000 seats. Budget $17 a seat, not the advertised $10.
- Decision two — dispatch
- Peak builds its own platform. $40,000 to build, $6,000 a month to run.
Both are closed. Everything below is the evidence, the real costs, and what still has to be settled before signing.
Teams Phone is the cheapest platform on the board. The $10 is not the price.
The decision
Teams Phone, ~1,000 seats. Up to ~$180k/yr under RingCentral's list — the largest saving of any option, and one less platform to run.
The real number
$10 buys a PBX with no dial tone. $17 adds the number and 3,000 pooled outbound minutes, taxes included. Inbound minutes are unlimited and free.
What sits outside it
Teams Premium at $10/seat for supervisors, toll-free inbound billed per minute, and ~1,000 desk phones that must be signed in by hand.
What we’re actually buying
Microsoft prices the phone in pieces. This is every piece, at list, from Microsoft’s own pages.
| Line item | Published price | Who needs it | What it actually is |
|---|---|---|---|
| Teams Phone Standard | $10.00 /user/mo | Every seat | PBX only — no dial tone. Attendants, queues, voicemail, call park included. |
| Teams Phone with Calling Plan | $17.00 /user/mo | Every seat placing outbound calls | Adds a number + 3,000 pooled outbound domestic minutes. Taxes and fees included. Inbound minutes unlimited. |
| Microsoft 365 E5 seats | already included | Anyone on E5 ($60) | E5 carries Teams Phone Standard — those seats buy PSTN only. E3 ($39) does not. |
| Teams Phone Resource Account | $0.00 | One per attendant + per queue | Free, but must still be bought. Microsoft advises acquiring at least five up front. |
| Teams Premium | $10.00 /user/mo | Supervisors + department leads | Required for the Queues app, real-time queue metrics, historical reporting, monitor/whisper/barge, and most queue delegation. |
| Toll-free inbound | per minute · not published | The published main number | Billed against Communication Credits. If the balance reaches zero, toll-free stops working. |
| Operator Connect / Direct Routing | no Microsoft price | Alternative to Calling Plan | Carrier quote. The only lever that can beat $17 — Microsoft never quotes it. |
| Existing desk phones | $0 extra licence | Kept handsets | SIP Gateway supports Poly, Yealink, Cisco MPP, AudioCodes. No presence routing, no firmware management, per-desk manual sign-in. |
List prices, annual commitment, before EA or CSP discount — 1,000 seats negotiates down. Outbound minutes pool tenant-wide: 1,000 identical US plans share 3,000,000 minutes a month.
Five things to settle before signing
01
Price Operator Connect against $17
Microsoft publishes a price for exactly one of the three PSTN paths. Operator Connect and Direct Routing are carrier-quoted, and they are the only lever left on the per-seat number.
02
Count the supervisors
Teams Premium at $10/seat is the one thing RingCentral bundled that Teams does not. Every lead who needs a live queue wallboard, historical reporting, or monitor/whisper/barge needs it. Size the headcount now, not after cutover.
03
Pull 12 months of toll-free inbound minutes
Toll-free is metered and sits outside every per-seat price. Multiply real RingCentral volume by Microsoft's rate, and confirm the billing account type — MCA tenants cannot buy Communication Credits at all.
04
Inventory the desk fleet
SIP Gateway keeps Poly, Yealink, Cisco MPP and AudioCodes handsets at no extra licence — but each personal phone needs a physical, per-desk sign-in, and kept phones publish no presence and get no firmware management.
05
File the port and the emergency addresses early
Over 1,000 numbers bypasses the admin-center wizard and goes to Microsoft's TNS Service Desk manually. RingCentral owns the date, not Microsoft; orders on one account run strictly in series; and emergency addresses must be built before the port lands. Do not disconnect early — both bills run through the cutover.
The record — what Teams beat
Cost
| Teams PhoneDecidedRedmond WA · USD | Zoom PhoneSan Jose CA · USD | RingCentralincumbent · USD | CloudTalkSlovakia · EUR | NextivaScottsdale AZ · USD | 8x8Campbell CA · USD | |
|---|---|---|---|---|---|---|
| List $/seat/mo | $10–17 | $16 | $25 † | €49 top tier | capped ≤100 emp. | unpublished |
| Annual · 1,000 seats | $120–204k | $192k | $ quote | $ quote | $ quote | $ quote |
| Savings vs. incumbent list † | up to ~$180k/yr | ~$108k/yr | — | $ quote | $ quote | $ quote |
Fit — our six requirements, nothing more
| Teams PhoneDecidedRedmond WA · USD | Zoom PhoneSan Jose CA · USD | RingCentralincumbent · USD | CloudTalkSlovakia · EUR | NextivaScottsdale AZ · USD | 8x8Campbell CA · USD | |
|---|---|---|---|---|---|---|
| Carries 1,000 seats long-term | ✓ | ✓ | ◐ | ✗ | ✗ | ◐ |
| Departments · delegated admin | ◐ + Premium | ◐ | ◐ upper tier | ◐ | ✓ | ✓ |
| Inbound: queues + reporting | ◐ + Premium | ✓ | ◐ upper tier | ✓ | ◐ add-on | ✓ |
| Basic attendant · AI optional | ✓ | ✓ | ✓ | ✓ | ✓ | ◐ |
| Desk phones + SSO | ◐ keep, unmanaged | ✓ | ◐ | ✗ | ◐ | ✓ |
| A price you can see today | ✓ | ✓ | ✗ | ◐ | ✗ | ✗ |
| Pay only for what we need | ◐ $17 is the real base | ✓ flat, all-in | ◐ tier upsell | ◐ CC extras | ◐ | $ unknown |
✓ included · ◐ partial / upper tier / verify · ✗ gap · $ quote-gated. Teams’ ◐ marks are deliberate: queue reporting and departmental queue admin both require Teams Premium. † RingCentral publishes $25 only for ≤100 users and hides all pricing at 100+ — savings are measured against that printed list, the only number they ever showed. List prices are ceilings; 1,000-seat deals negotiate down.
Why Teams won — and what saying no to Zoom costs
Teams Phone — decided
The lowest published cost of anything that can carry 1,000 seats, and on E5 seats the platform is already owned — only PSTN is incremental. Attendants and queues are in the base licence, their resource accounts cost nothing, and the AI answering product stays opt-in. One identity, one admin plane, one vendor.
Zoom Phone — the runner-up
$16 flat, all-in, no add-on to reach supervisor reporting or queue admin — the two places Teams charges Premium. It was the simpler buy and the more predictable bill; it was not the cheaper one, and it would have meant running a second platform beside Microsoft 365.
The rest of the field, one line each: RingCentral hides its price at the office’s size — that is the incumbent. Cisco Webex publishes $17, but call queues and recording sit in its quote-only Enterprise tier. Google Voice publishes $20 with no seat cap, but the Google Workspace layer it requires is contact-sales at 1,000 seats. Vonage’s published prices legally cap at 99 lines; Nextiva’s at 100-employee companies. CloudTalk is a call-center desk tool (top published tier €49, largest named customer 200 agents, argues against desk phones). GoTo and 8x8 publish no prices at all.
And for Peak itself
Nine stations becoming sixteen — the same decision scales down cleanly.
Teams Phone costs the same $10 per seat at twenty seats as at a thousand, so the stations standardize on one platform instead of two. The Premium question mostly disappears at this size — a handful of dispatch supervisors, not hundreds. The one thing worth keeping on the table is a dedicated dispatch desk (CloudTalk Essential €29 vs. Nextiva Engage ~$25 at 8–20 seats, fetched Aug 6); anything else, run it on Teams.
Sign-off
Teams Phone. The savings are real — the $10 isn’t.
Budget $17 a seat, add Teams Premium for the supervisor bench, and treat toll-free minutes and the desk-phone cutover as the two numbers nobody has quoted yet. Get real volume pricing, the Operator Connect comparison, and a firm port date in writing before signature. Everything above is verified on the linked vendor pages; everything a sales call still has to answer is marked.
Fetched Aug 10, 2026 · microsoft.com · learn.microsoft.com · zoom.com · ringcentral.com · cloudtalk.io · nextiva.com · 8x8.com · webex.com · workspace.google.com · vonage.com · goto.com · Path B fetched Aug 6, 2026
Decision two · decided
Dispatch messaging: we’re building it.
The phone is settled. So is this: Peak builds its own dispatch platform — a free app any permitted driver, owner-operator or carrier can install on any phone, the way Telegram already works for them, with every message filed under the load it belongs to.
Why not put drivers in Teams
Every owner-operator would need a Microsoft identity — licences to buy or reimburse, expenses to track, guest accounts that take up to 12 hours and cannot be phoned, and a training programme to move people off the group chats they already use. Permanent administrative drag, and no asset at the end of it.
What we're building
One app, free to install, iOS and Android and web. Peak controls who gets in and revokes it the day a carrier relationship ends. SMS stays as the fallback so nobody is ever unreachable, and internal conversation stays in Teams.
What it buys
Freedom to build exactly what dispatch needs instead of waiting on someone's roadmap, no per-seat toll for anyone outside the company, and a record Peak owns outright rather than rents.
To be clear about scope: this is not a Teams replacement. Internal conversation stays where it is. What Peak is building is the driver and carrier surface, plus the thing no vendor sells — every message, inbound and outbound, written to Peak’s own store against the shipment it belongs to. Load 4471 gets one complete, timestamped thread: the instruction, the driver’s reply, the photo of the broken pallet, the ETA change. Six months later a claim on 4471 is one thread, not an archaeology project. The app is how people talk. The index is why owning it pays.
All
512 groupsLoad PK-4471
MEM → DFW · Acme
Pinned
Pallet damage 13:58 · OS&D filed 14:06
Tuesday 12 August
- DRDawn R. · dispatchTeams04:02✓✓
4471 tendered. MEM ramp, 0600 pickup.
indexed → tender · 04:02
- MOM. Ortiz · driverSMS05:47
Here. Dock 12, waiting on paperwork.
indexed → arrived · 05:47
- MOM. Ortiz · driverSMS07:15
Rolling. DFW by 14:30.
indexed → dwell 1h 28m · ETA 14:30
- MOM. Ortiz · driverSMS13:58JPGpallet-4471.jpg1.2 MB
Held at the dock. One pallet’s crushed.
indexed → exception opened · 13:58
- RDR. Dunn · opsTeams14:06✓✓
Got it. Told Acme, OS&D filed.
indexed → notified · 14:06
- ACAcme · shipperEmail14:31
Any update on 4471?
indexed → they asked 25 min later
- MOM. Ortiz · driverSMS15:41
Delivered. Weeks signed for it.
indexed → POD signed · 15:41
Live load metrics
Computed from the thread’s timestamps — nothing typed in.
- Dwell, MEM
- 1h 28m
- ETA slip
- +71 min
- First reply
- 1h 45m
- Ahead of Acme
- 25 min
- POD
- 15:41 signed
Claim packet ready
Loads
- PK-4471MEM → DFW · Acme · exception open
- PK-4468MEM → BNA · delivered 12 Aug
People
- M. OrtizDriver · 3 open loads · last message 15:41
- Dawn R.Dispatch, MEM · tendered 4471
Orders
- SO-88214Acme · 2 pallets · riding on PK-4471
Messages
- “Held at the dock. One pallet’s crushed.”M. Ortiz · 13:58 · PK-4471
What it was weighed against
| Build our platformDecidedfree app · we own all of it | All-in on Teamsbuy · record stays in the tenant | Slackbuy · record stays in the tenant | Stay on Telegramstatus quo | |
|---|---|---|---|---|
| Cost to add one driver | ✓ $0, free download | ✗ licence or guest account | ✗ a paid seat | ✓ $0 |
| Onboarding a driver | ✓ install and permission | ✗ identity, up to 12h, training | ◐ invite and account | ✓ instant |
| Where the record lives | ✓ our database | ✓ Microsoft tenant | ✓ Slack tenant | ✗ dispatcher's account |
| Export on demand, no permission | ✓ our database, $0 | ✓ standing right, $0 | ◐ Business+ $15/user, then apply | ✗ per-user only |
| Legal hold · eDiscovery | ✓ we set policy | ✓ included at E3 | ◐ tier-gated | ✗ none |
| Tamper-proof record | ✓ server-side copy | ✓ | ✓ | ✗ delete-for-all, no trace |
| Freedom to build what dispatch needs | ✓ total | ✗ their roadmap | ✗ their roadmap | ✗ none |
| Exit window | ✓ n/a — already ours | ◐ 90 days + 90 | ◐ 30 days | ✗ none |
| What Peak builds and runs | ◐ the app and the index | ✓ nothing | ✓ nothing | ✓ nothing |
Ownership was never the deciding row — Microsoft and Slack both put the content in Peak’s name. Reach was. Every path that runs through a vendor charges, licenses or trains the one group Peak least controls: the drivers.
A thread attached to a shipment, not to a person.
That is what we’re building — and unlike everything it beat, we will actually own it.
What the build costs
Peak Connect, quoted by Hariom. Until this arrived the decision above argued for building without saying what building costs.
$40,000
One-time setup
Build and launch
$6,000
Per month
Hosting, support, updates
$72,000
Year two onward
The steady-state number
Included
- ✓Peak-branded web, desktop, iOS and Android apps
- ✓Channels, direct messages, files, images, reactions
- ✓Group voice, video and screen sharing
- ✓Private data, high availability, backups, monitoring
- ✓Up to 1,200 users · 12 TB pooled · 150 concurrent on a call
- ✓24–48 hour support response
Scales by band, not by seat: 1,500 users at $7,000/mo, 2,000 at $8,500/mo. No second setup fee.
Annual cost at 1,200 users
| Platform | Year 1 | Year 2+ |
|---|---|---|
| Peak ConnectOwned, white-labelled | $112,000 | $72,000 |
| Slack Business+$15 /user/mo | $216,000 | $216,000 |
| Teams Enterprise$8.55 /user/mo † | $123,120 | $123,120 |
† The Teams line assumes Peak buys Teams standalone. On Microsoft 365 it is already owned and the marginal cost is nearer zero — and it still cannot onboard a driver.
Two numbers have to be read together. Adding a driver costs nothing — that is a marginal cost, and it is genuinely $0. The platform underneath is a fixed cost of $6,000 a month whether twenty drivers use it or twelve hundred. Which is the whole case: per-seat platforms punish Peak for growing, and this one does not. At 1,200 users the steady-state works out near $5 a user a month, against $15 for Slack.
This is a real commitment and worth saying plainly: an app means clients, push notifications, uptime, support and release cycles, permanently. Three things keep it sane. Build on managed infrastructure rather than from scratch — Azure chat runs $0.0008 a message with no per-seat and no per-user fee, and toll-free SMS about a cent a segment. Scope the first release to one load thread, photos, proof of delivery and the index, and nothing else. And keep SMS underneath the whole time, so a driver who never installs anything is still reachable and still on the record.
Build it, or assemble it?
Before commissioning a build from scratch, the obvious question: can an existing white-label platform already do this? Three were checked against one hard requirement — a Peak-named, Peak-iconed app that a driver installs free from the App Store.
| Platform | Peak-branded mobile app | Price at 1,200 | The catch |
|---|---|---|---|
| Mattermost | ✓ from the free tier | $ quote — Pro caps at 250 users | Fork it, and run your own push proxy |
| Rocket.Chat | ✓ MIT server and mobile | $ quote — free caps at 50 | Same shape as Mattermost |
| Element | ✗ icon and name stay Element | $ per seat, per month | Prices the drivers we want free |
The surprise is that the rights are not the obstacle. Mattermost documents “Distribute a custom mobile app” as available even on its free tier, ships the mobile client under Apache 2.0, and says plainly that you may submit your build to the public app stores. Its trademark policy is the inverse of the usual trap: it does not forbid Peak’s branding, it requiresMattermost’s to be removed. Rocket.Chat reaches the same place by licence — server and mobile client both MIT.
Element fails the brief for the opposite reason. Its included branding is a server-pushed accent colour, and its own launch note concedes the app “remains Element Pro” on the home screen. It then bills per seat per active month — pricing precisely the driver population Peak wants to add for nothing.
What none of them publish is a price at 1,200 users. Mattermost caps its self-serve tier at 250 and sends everything above it to sales; Rocket.Chat’s free editions stop at 50. So “buy the engine” lands in the same quote-gated place as the phone field in part one. And the real cost was never the licence: both routes require forking the client, maintaining that fork against upstream, and running Peak’s own push notification service, because a custom-branded binary cannot use the vendor’s.
Which makes one question worth asking before the quote is signed: is the $40,000 a build from scratch, or a Mattermost or Rocket.Chat deployment with Peak’s branding on it? Both are legitimate and the second is often the better engineering answer — but they carry different risks, different maintenance obligations and different prices. The answer also decides who owns the fork in three years.
What happens next
01
Scope release one
One load thread, photo attachments, proof of delivery, and the load-keyed index behind it. Every other idea waits for release two.
02
Set the permission model
Who can invite a driver, what they can see, and how access is revoked the day a carrier relationship ends. Decide this before the first invite, not after.
03
Pick the transport underneath
Managed chat infrastructure plus SMS fallback, so adoption never blocks dispatch and nobody is unreachable on day one.
04
Write the retention policy
We set it ourselves now — how long threads live, what a legal hold looks like, who can export. The thing no vendor was going to hand us is also the thing we now have to author.
Fetched Aug 10, 2026 · learn.microsoft.com · azure.microsoft.com · core.telegram.org · slack.com · salesforce.com · contract language quoted from the Microsoft Products and Services DPA and the Salesforce Main Services Agreement