MWG Advisory · Thesis
A feature set billed monthly is a tool lease, and it gets re-decided every renewal. A service accrues. The difference is a loop — and the loop is what nobody finishes building.
SaaS earned recurring revenue because the software did continuous work on the customer's behalf and held something that got more valuable the longer they stayed. Consumer apps adopted the pricing model and left the state behind.
What most of them ship is a set of features: a library, a generator, an assessment, a tracker. Good features, often excellent ones. But a feature is a tool, and a tool's value lives in the moment you pick it up. Billing monthly for a tool isn't a service — it's a financing arrangement. You're leasing a thing that would otherwise be a one-time purchase, and the user works out the arithmetic eventually.
There's a single question that separates the two, and I now ask it first in every teardown:
For a tool lease the honest answer is nothing. The videos, the generator, the filters — they were never mine, and none of them were doing anything while I wasn't looking. For a service the answer is a list: the record of what I've done, the plan that's mid-flight, the position I've accumulated, the thing it knows about me that took months to learn. That list is the whole difference between churn and renewal, and it's also the only switching cost these products can build, because it is the one asset a competitor can't ship.
Renewal isn't a payment. It's a re-purchase decision, and the question the customer asks depends entirely on which of the two they bought.
Tool lease
“Did I use it enough to justify the fee?”
Answered from the customer's own memory, and it gets harder to answer yes to every month the novelty wears off. Nothing the product holds helps them.
Service
“Is it still working on my behalf?”
Answered with evidence the product generated. It can show the target it set, what changed, and what's next — and the answer improves with tenure instead of decaying.
Every product I've torn down so far is being renewed against the left-hand question, and none of them had to be.
The loop is what converts a feature set into a service. Diagnosis tells me something true I couldn't have known. Assignment turns that into a specific instruction with a number on it, which I accept. Verification checks whether I did it. Progress accumulates what I did into something visible that extends.
Roadmaps are written in nodes. Nodes are what you can demo, price and put on a feature list. But a node is a capability, and capability is not a service — what makes a product feel like a coach rather than a library is whether the nodes are wired to each other. That's the join.
To be fair to these teams, some of the joins do get built. What they don't get is design attention. They arrive late, sit one tab off the main path, or connect to the wrong object — the shape of something added after the feature it connects, rather than the thing the feature was built to serve.
And a join is precisely where the product does work the customer doesn't have to. That's why it's the unit that matters commercially: every broken join hands a job back to the user, and a job the user does is a job they can do somewhere else for free.
So there are two ways to fail, and the category I've studied is doing both. The nodes are only partially fulfilled, and the joins between them are afterthoughts — or, in one case, missing entirely.
The evidence below is from three mobility apps I used for nine days — pliability, GOWOD and Bend. I wrote my predictions before reviewing any tape, so the products could correct me. They did, repeatedly, and mostly in their favor. That matters, because the argument isn't “these apps are bad.” They've built more than I gave them credit for, and it still doesn't close.
“Does this plan have anything to do with what you just found in me?”
Better than I predicted. A camera assessment names the compensation patterns, scores a key area, and builds a reviewable three-week program with the reason carried all the way through. The failure isn't the join — it's that nothing routes anyone to it. The most credible artifact in the category isn't on the path a new member walks.
Job handed back → find the thing that makes this a service
“Am I actually going to do this?”
Also better than I predicted. There's a real commitment object — a goal you pick and a button that says commit — and even a forgiveness layer behind it. The mechanic is right. What you're committing to is time.
Job handed back → decide what counts as success
“Did anything actually change?”
Here it starts to go. One app renders a gauge named after the member's body that is a function of days completed. Another holds a composite mobility score and three named issues, and the meter it shows after every session is attendance. Compliance gets rendered as if it were capability.
Job handed back → work out whether it's working
“Why would I come back and get measured again?”
Nobody has this. One app showed me a mobility score from March 2025 as my current state, after seven years of membership — while its own instructions ask for monthly retesting. For an assessment-led product a stale assessment is worse than none: it prescribes confidently against a body that has changed.
Job handed back → remember to re-measure, and know when
Read the right-hand column on its own and you have the lease. Four jobs the customer performs, in a product they are paying monthly for precisely so they don't have to.
Streaks. Minutes this month. Hours in thirty days. Sessions completed out of seven. Two of the three products compute a composite mobility score, and neither one lets a member set a goal on it. Not one screen offered a target state for the body.
That single fact propagates through everything above. A product can only verify against a declared target, so attendance becomes the only thing verification can grade. The progress meter therefore renders attendance. And once the payoff is a streak, the streak is what you come back for — the reassessment becomes optional, nothing schedules it, and the loop closes on participation instead of returning to diagnosis.
The nodes being partial and the joins being broken turn out to be the same problem seen from two angles. You can't fill the verification node while the only thing it's allowed to measure is whether someone showed up.
The shape generalizes past mobility, and the tell is consistent: an assessment, a content library, and a subscription — in a category where the content has a free substitute. Sleep, nutrition, meditation, language, personal finance, skincare, strength training, dog training. Wherever the library is the product, the loop is the only thing left to charge for, and almost nobody has finished building it.
Duolingo is the counterexample worth studying, and it's instructive that language had an external capability ladder — CEFR — sitting there before the app existed. It could tell a user what a level means. Most categories have no such ladder, which is why their products fall back on counting.
The obvious objection is that participation loops work. They do — the app in my set with no diagnosis at all and nothing verified about the member's body has by far the best engagement trend. I'd be wrong to write that off.
The reconciliation
Participation mechanics move frequency. Verification mechanics move price. A product that proves you showed up can get you to show up more. It can't charge much, because what it proves isn't what you bought. The apps in my set that verify something about the member's body earn fourteen to nineteen times more per member than the one that doesn't.
So this is a pricing-power and renewal argument, not a DAU argument. Which also means the fix is smaller than it sounds. It isn't more content, better filters or a more accurate instrument — those are all more tool. It's a target on a real number and a date the claim gets settled — Back/Core 53, retest October 13 — and then the sentence none of these products can currently write:
That sentence is the last join closing. It is also goal extension, a new chapter opening, and the answer to the renewal question — evidence the product generated that it is still working on the member's behalf. One line of copy, and nothing in the category can produce it.
Finish the loop and the thing you're selling changes category. The features stay the same. What changes is that stopping costs the customer something, and that is the entire basis on which a subscription gets renewed.