End-of-life planning is the most universally relevant, most universally avoided category in software.
Deathwishes sits in a high-intent, high-avoidance category. People understand that legacy planning matters. They avoid it because it feels morbid, legalistic, asset-coded, and too far away. The product can be excellent and the funnel will still collapse at the door.
That collapse is the brief. Not a positioning brief — an activation brief. The work isn't to acquire more skeptics into the same flow; it's to lower the emotional cost of starting, give the first session a meaning it didn't have before, and instrument the system carefully enough to know which moments actually moved someone from installed to committed.
Three forces compound the avoidance, and each shaped a different part of the operating system that follows.
Emotional friction is the dominant cost.
Most categories trade in money, time, or status. This one trades in mortality. Standard onboarding patterns — feature tours, checkbox progress, gamified streaks — read as wrong when the underlying task is imagine attending your own funeral. The product needs softer entry points and a tone that earns the next tap.
The trigger is unpredictable.
There is no monthly buying window. People arrive after a diagnosis, a death in the family, a milestone birthday, a re-read of a will. Acquisition can't be optimized around a calendar; it needs to be optimized around readiness. Lifecycle has to hold the relationship between visits that may be months apart.
Trust is the unit of conversion.
The product asks for medical directives, financial logins, the names of children, the wording of an obituary. If the welcome email, the first prompt, or the paywall tone breaks faith even slightly, the user leaves and does not come back. Every system below — onboarding, lifecycle, paywall, instrumentation — is calibrated to that fragility.
The job wasn't to convince anyone to plan their death. It was to make the first five minutes feel like something other people had survived.
Operating thesisFrom end-of-life checklist to personal archive.
The competitive set sells legal completeness. Trust & Will, FreeWill, Cake — all framed as a task to finish. That framing inherits the avoidance: the headline reads as homework, the CTA reads as obligation, the abandonment is structural.
The reframe is small but load-bearing. Deathwishes is a personal archive — a place to leave the playlist, the toast, the recipe, the apology, the password — that happens to also organize the legal and logistical work. The legal stuff is what you do because you opened the app. The legacy stuff is why you opened the app.
That move did three things at once: it unlocked a different content surface (prompts about life, not just about death), a different lifecycle (return for meaning, not just for compliance), and a different price point — habit, not transaction.
Category default
An estate-planning task you owe your family.
- Anchored to wills, directives, beneficiaries.
- Sold as a finite task; success = "done."
- Lifecycle is a renewal nag.
- Asset-coded — implicit audience skews older & wealthier.
- Trust earned through credentials, not voice.
Deathwishes frame
A personal archive that says what you meant.
- Anchored to messages, music, instructions, memory.
- Sold as an ongoing practice; success = return.
- Lifecycle is meaning, not maintenance.
- Life-coded — relevant to anyone with people.
- Trust earned through tone on every screen.
The voice exhibit below — the first email a new subscriber receives — is the smallest visible artifact of that reframe. It is not a welcome to a planning tool. It is a welcome to a practice. Notice what it asks for (nothing) and what it gives (permission to start small).
Subject: You're In. Let's Make It Count.
You're In. Let's Make It Count.
You made a choice. A bold, borderline-responsible choice. And now you're here, officially subscribed to Deathwishes.
Start small. Work on Deathwishes with your coffee, before bed, during a quiet moment — or in between doomscrolls. You don't have to do it perfectly. You just have to do it.
Because one day someone's going to need to open this app. Let's make sure it says what you meant.
You've already done the hard part: getting started. Now let's keep going.
Open the App →Voice notes — what this email is doing
- "Borderline-responsible" — disarms the obligation framing; signals self-aware tone before the user has to feel earnest.
- "Start small" — explicit permission to not complete the product. Reduces the activation cliff in the first session.
- "You don't have to do it perfectly" — anti-checklist. The product is a practice, not a finish line.
- "Says what you meant" — restates the reframe in one phrase, in the user's interest, not the company's.
- No feature mentions, no upsell. The CTA opens the app. Lifecycle does the rest.
Lifecycle event · email_verified → "Welcome to Deathwishes"
Customer psychology, translated into the content surface.
The content system has two surfaces: Plans (the prompts a user fills in) and Lifetime (the artifacts they accumulate — playlists, bucket list, "My Story" micro-journals, vault items). Plans is the activation surface; Lifetime is the retention surface.
Plans is sequenced into three tiers — The Basics, Beyond the Basics, and My Legacy — and every prompt carries scaffolding copy that does the emotional work the question itself can't. The scaffolding isn't decoration. It is the product. It tells you that other people have answered this. It explains why an option exists. It makes a strange question feel routine.
Below are real prompts from the live content system, exactly as they ship in the app. The structure repeats: a question, a set of choices that lower the activation cost, and a paragraph of warm explanation that says here is what other people have done.
What should happen to your body?
Deciding what happens to your body after you pass is a deeply personal choice. Reflect on your beliefs, values, and how you want to be remembered as you make this decision.
What can people do more of, to best honor your life?
Think about the actions or values you'd love to see reflected in the world as a tribute to your life. It could be simple gestures — being kind to strangers, picking up trash, acts of generosity.
What advice do you want future generations to carry with them?
This is your moment to pass the mic to the future. Heartfelt wisdom, a simple reminder to wear sunscreen, or something you wish someone had told you sooner — your words will matter.
Any drink preferences for your service or celebration?
Drinks can set the tone — comforting, celebratory, or both. Coffee & Tea Bar, Signature Cocktail, Full Bar, Champagne Toast, Favorite Local Drink, No Preference.
Do you have an Advance Directive?
An Advance Directive is a legal document outlining what medical care you want if you can't speak for yourself. It's not about predicting every scenario — it's about giving your loved ones peace of mind.
If you could leave just one piece of practical advice, what would it be?
Think of this as a compass for your people — your "if you remember nothing else, remember this" note. Logistics, or just a meaningful reminder.
The Basics opens with What should happen to your body? — concrete, optionable, finite. It is the question every user assumes a death-planning app will ask, so answering it confirms the product is the product.
My Legacy arrives after the user has invested. By the time we ask What are you most proud of?, the user has already trusted the product with body and service decisions. The hard, meaningful question is now safe.
Beyond the Basics — healthcare, financial, legal — is intentionally last. These are the questions a legal product would lead with. They are the questions that, asked too early, cause users to close the app and never reopen it. The product earns the right to ask them.
Sequencing prompts in psychological difficulty — not legal priority — is the single biggest activation lever in this category. Most competitors lead with the will. The will is the last thing the user is ready for.
From the content architecture briefTrust-first onboarding and the activation contract.
The onboarding instrument has three events — onboarding_step, onboarding_complete, and the first complete_category1_subcategory1 ("My Body" finished). Each is wired to a different post-event consequence, and the gaps between them are where retention is won or lost.
The activation contract — articulated in the welcome email, repeated by lifecycle, reinforced by the home feed — is small enough to keep: one answer. One moment. You can come back. The product is explicit that it does not need to be finished. That single permission is the largest behavioral change vs. the category default.
Activation event chain
The first-launch QA pass treated every onboarding screen as a trust contract: persistence on refresh, no skipped state, no silent failures on the verification email, no orphan accounts after deletion. From the live Q3 backlog: account deletion process does not work — can still log in with same credentials after deleting an account. Marked High priority. Shipped to staging within the sprint.
That same backlog includes "improve the quality of the email confirmation email (to avoid going to spam)" — a marketing-domain ticket living inside the product roadmap. The line between PMM and product engineering is not maintained, because the user can't see the line and neither can the funnel.
End-to-end lifecycle, wired across four systems.
The lifecycle architecture maps every meaningful state — installed, account, trial, paid, renewed, expired, canceled — to a specific event, a system of record, and a campaign. The map below is the working version that shipped: which event fires, which system originates it, and what the user receives downstream.
The non-obvious work is the identity bridge. RevenueCat issues an anonymous app_user_id on install. Customer.io expects an email. The backend produces a user_id only after registration. Without a deliberate plan, those three IDs never reconcile and the lifecycle silently breaks at the account-created handoff. The architecture below resolves it: app calls Purchases.identify(user_id) and Purchases.setAttributes({ email, $customerioId }), so RevenueCat syncs the email to Customer.io against a shared identifier and the same person carries through every subsequent event.
Lifecycle event ledger
| Lifecycle event | Event name | Data flow | Campaign trigger | Status |
|---|---|---|---|---|
| App Installed | install | Branch → Ad Platforms | Acquisition attribution | Next |
| First Open | first_open | Firebase → Branch | Activation cohort | Next |
| Account Created | email_verified | Backend → Customer.io | "Welcome to Deathwishes" | Live |
| Trial Started | trial_started | RevenueCat → Customer.io | "Trial activated" | Live |
| Trial Expired | trial_expired | RevenueCat → Customer.io | "Trial ended — 25% off" | Live |
| Initial Purchase | initial_purchase | RevenueCat → Customer.io | Subscriber onboarding series | Live |
| Renewal Success | renewal | RevenueCat → Customer.io | "Thanks for renewing" | Live |
| Subscription Expired | expiration | RevenueCat → Customer.io | Winback sequence | Live |
| Subscription Canceled | cancellation | RevenueCat → Customer.io | Feedback or pause plan offer | Live |
The four-system architecture
01 · Branch
Attribution & deep links
Tracks install + click, associates campaign metadata, owns the deep link surface for paid social and referral. Hybrid with Facebook SDK considered, then deprioritized: redundant with Branch.
02 · Firebase + GA4
Behavior & funnel
90+ instrumented events across install, onboarding, plans, friends, profile, settings. Conversion event ladder maps to activation moments, not vanity actions.
03 · RevenueCat
Subscriptions & trial
Owns trial start/expire, initial purchase, renewal, expiration, cancellation. Pushes every subscription event into Customer.io against the shared identifier.
04 · Customer.io
Lifecycle & voice
Owns the relationship across silent stretches. Welcome, trial-activation, trial-end, renewal, winback, feedback. The only system the user notices by name.
An event taxonomy designed around activation, not analytics.
The Firebase taxonomy ships with 90+ events across 12 app sections. Of those, only a small set are flagged as conversion events — the ones GA4, RevenueCat, and the media plan use to score channels and cohorts. Another small set are flagged as in-app feed events — the ones that surface back into the activity feed and create the "I see myself in the product" moment that drives return.
The discipline is what the taxonomy doesn't tag. view_inspiration is not a conversion. profile_color_updated is not a feed event. The line between "we track it" and "we optimize against it" is enforced by a column, and that column is what makes the funnel readable to a non-analyst.
view → start → complete.
Conversion event ladder (excerpt)
| Section | Event | Trigger | Tags |
|---|---|---|---|
| Install | app_install | iOS install via App Store | Conv |
| Install | first_open | User opens app for the first time | Conv |
| Behavior | sign_up | User completes account creation | Conv |
| Onboarding | onboarding_complete | User finishes onboarding (params: steps_completed, time_spent) | Conv |
| Friends | invite_contact | User invites a contact | Conv |
| Friends | contact_accepts | Invited contact accepts | Feed |
| The Basics | complete_category1_subcategory1 | User completes Plans → The Basics → My Body | Conv Feed |
| Bucket List | create_wish | User creates a new bucket-list wish | Conv Feed |
| Things | create_thing | User creates a "thing" (sentimental item to gift) | Conv Feed |
| Purchase | free_trial_start | User starts 7-day free trial | Conv |
| Purchase | subscribe | User subscribes (params: plan_type, payment_method) | Conv |
| Account | delete_account | User deletes account (param: reason) | Listen |
Monetization priced as a habit, not a transaction.
The pricing decision is downstream of the positioning. If the product is a legal task, price scales with the document — $99 for a will, $200 for a trust. If the product is a personal archive, price scales with the habit — coffee money, paid once a year, no decision fatigue.
The trial does the heavy lifting. The user starts 7 days free, RevenueCat fires trial_started, Customer.io sends the trial activation message, and the user has a week to see whether the practice fits their life. If they convert, initial_purchase fires and the subscriber-onboarding series begins. If they don't, trial_expired fires and a discounted winback runs at day 1, day 7, day 30.
Every monetization signal is owned by RevenueCat and forwarded to Customer.io. Payment failures, refunds, cancellations — they all flow through the same pipe. The operator does not need a separate billing dashboard to know the state of the business.
Paywall surface
In-app, behavioral
Triggered after onboarding completion + first Plan answer, not on cold open. The user sees the paywall only after they have felt the value once.
Trial
7 days, no card friction
Standard iOS/Android trial flow via RevenueCat. trial_started immediately triggers an activation series; trial_expired triggers a 25% winback.
Recovery
Cancellation as signal
Cancellation event captures reason. Feedback campaign + "pause plan" offer surface before churn is final. The cancel screen is a research instrument.
Three attribution surfaces, one truth about acquisition.
Branch is the deep-link and click-attribution layer. AppsFlyer was integrated at Ticket Timeline as the MMP of record; the same playbook informs Deathwishes' channel measurement and gives the team a clean view of which campaigns actually drove installs vs. which ones merely correlated with them. Firebase + GA4 own the post-install funnel.
The discipline is not the tools — it is the signal model. CPI is measured on Branch installs. CAC is measured on registered users, not installs. ROAS is measured on RevenueCat revenue, not in-app event proxies. Each channel is judged on the metric it actually controls, which is the difference between a media plan that learns and one that just spends.
Click & deep link
BRANCH
Owns install attribution, deferred deep links, and the bridge between paid social creatives and post-install events. Considered Facebook SDK hybrid — chose Branch alone to reduce redundancy.
Mobile measurement
APPSFLYER
MMP literacy carried over from Ticket Timeline. Gives the operating model a fluency in fraud filtering, view-through windows, and cross-channel reconciliation that one-tool stacks miss.
Behavior & revenue
FIREBASE · GA4
In-app funnel, audience definitions, conversion event ladder. RevenueCat layers subscription revenue on top so ROAS is computed on cash, not on proxy events.
A quarterly paid-launch model, built around what the unit economics can absorb.
The launch plan is small on purpose. The point of the first paid quarter is not volume — it is calibration: which channel actually clears the trust bar, which audience converts post-install, which week's cohort retains into renewal. The numbers below are the live model; each row is judged on its own CAC and download-to-user conversion.
Direct & organic show the floor. Search ads carry the volume. App store ads carry the efficiency (CPI $3.08, CAC $12.31). Paid social is the most expensive on a per-user basis ($13.51) but earns its place by retargeting site visitors who already self-selected. Offline (launch party, networking) is intentionally inefficient on CPI because it pays back in seed-stage signal, not installs.
Channel-level allocation
| Channel | Audience | Spend | App-store traffic | Downloads | Reg. users | CPI | CAC |
|---|---|---|---|---|---|---|---|
| Unpaid · $0 | |||||||
| Direct | Type-in traffic | $0 | 350 | 70 | 28 | — | — |
| Organic search | Google / Bing / App Store | $0 | 200 | 30 | 11 | — | — |
| Referral | Inbound links | $0 | 75 | 8 | 2 | — | — |
| Search ads · $2,750 | |||||||
| Google paid search | Top 100 web keywords | $2,500 | 3,000 | 300 | 180 | $8.33 | $13.89 |
| Bing paid search | Top 100 web keywords | $250 | 300 | 30 | 18 | $8.33 | $13.89 |
| App-store ads · $1,000 | |||||||
| Google install ads | Top 100 app keywords | $500 | 700 | 175 | 44 | $2.86 | $11.43 |
| App Search Ads | Top 25 app keywords | $500 | 500 | 150 | 38 | $3.33 | $13.33 |
| Paid social · $500 | |||||||
| Site retargeting | $300 | 100 | 50 | 25 | $6.00 | $12.00 | |
| Site retargeting | $200 | 75 | 30 | 12 | $6.67 | $16.67 | |
| Offline · $1,000 | |||||||
| Launch event | ATX launch party | $1,000 | 100 | 80 | 24 | $12.50 | $41.67 |
| Networking | Personal networks | $0 | 100 | 80 | 24 | — | — |
The model is modest by design. Year-1 net revenue projects at $4,123, ROAS of 0.79 — underwater on a single-cycle basis. Year-2 LTV ($13.26) clears CAC. The model says: only spend if you trust the lifecycle to do the second-year work. The architecture above is what makes that trust earnable.
Launch operations and the discipline of small visible work.
The launch timeline is not a marketing schedule with a product side. It is a single operating cadence: feature work, instrumentation, paywall integration, and lifecycle copy live in the same backlog, sequenced so each piece unblocks the next. Marketing soft launch begins only after the activation event chain is wired; paid full launch begins only after RevenueCat is in production.
The QA backlog is the second discipline. The Q3 production board ran 16 high-priority items in parallel — paywall integration, activity-log eventing, Branch SDK install, Customer.io SDK install, GA4 data-stream config, account-deletion fixes, friend/legacy-contact privacy defaults — each tracked with an estimation in hours and a release tag. That backlog is the operating system. PMM lives in it.
Four-month launch trajectory
Production backlog — high-priority excerpt
| Section | Task | Status | Est. (h) |
|---|---|---|---|
| General | In-app purchase paywall integration (RevenueCat, SDK) | Staging QA | 40 |
| General | Activity-log eventing — drive Firebase events | Released | 80 |
| Home | Activity feed on home page + dedicated feed page | Staging QA | 40 |
| General | iOS + Android SDK config for GA4 data streams | Released | — |
| Account | Account-deletion process correctness | Staging QA | 2 |
| Settings | Death & memorialization functionality | Staging QA | 6 |
| Friends | Legacy Contact section separation + permission clarity | Released | 2 |
| Friends | Legacy Contact accept/decline flow | Staging QA | 16 |
| Account | Email confirmation deliverability (avoid spam folder) | In progress | — |
| General | HubSpot integration — sync users + marketing permissions | Released | 8 |
| General | Branch SDK install (attribution + deep links) | Queued | 12 |
| General | Customer.io SDK install | Queued | 12 |
The PMM job, in practice, is to sit between the account-deletion bug and the renewal email, and make sure neither one breaks the other.
Cross-functional operating modelAI-native execution as a force multiplier, not a novelty.
The reason a single operator can take a sensitive consumer subscription from concept to App Store in three months — and then maintain a 90-event taxonomy, a four-system lifecycle, a quarterly media model, and a production QA backlog — is not unusual hours. It is the compression of the loop between noticing and shipping.
Customer-research synthesis through Claude. Spec-drafting through Codex and Cursor. Flutter implementation against the live RevenueCat / Customer.io / Branch APIs, with the operator reading the code that ships. Email copy iterated against tone references, not templates. The lifecycle copy in this case study, the event taxonomy, the prompt scaffolds — none of it left the operator's hands to get drafted, reviewed, and shipped.
The result is not a faster PMM. It is a different shape of PMM — one who shows up to a design review with the spec already written, the events already named, the welcome email already in Customer.io, and the question on the table being whether the activation moment lands.
Research
Customer-psychology synthesis
Compressed interview review and category mapping. Faster pattern recognition without losing the verbatim.
Strategy
Positioning & spec
From narrative brief to implementation spec in one sitting. The operator owns the through-line.
Build
Flutter + APIs
Direct work against RevenueCat, Customer.io, Branch, Firebase. PMM reads the diff.
Iterate
Copy & lifecycle
Email, prompt scaffolds, paywall copy — versioned and shipped without handoff cost.
What this artifact demonstrates.
A map of the operating capabilities visible in the work above. Each box names a discrete competency and what, specifically, it shows up as in this case study.
Customer psychology depth
Reframed the category from checklist to archive; sequenced prompts in psychological order; designed scaffolding that does the activation work.
Positioning & narrative
Built the personal-archive positioning and translated it into voice — welcome email, prompt copy, paywall tone, lifecycle messages.
Activation & onboarding
Designed the onboarding event chain; defined the activation contract; wired the post-event consequences across four systems.
Lifecycle architecture
9-state lifecycle from install to cancellation, each state mapped to a Customer.io campaign, fed by the right system of record.
Instrumentation literacy
90+ event taxonomy across 12 app sections, with conversion vs. feed-event discipline that makes the funnel readable.
Attribution maturity
Branch + AppsFlyer + Firebase composed deliberately; each metric judged on the system that actually controls it.
Monetization design
7-day trial + $12/yr subscription, RevenueCat-led, with cancellation captured as a research instrument.
GTM planning
Weekly-modeled quarterly media plan, channel-by-channel CAC + CPI, ROAS-aware against year-2 LTV.
Launch operations
Four-month rolling backlog across product, instrumentation, and marketing — one operating cadence, one queue.
Product fluency
Flutter builds against live APIs, paywall integration scoped and shipped, QA owned alongside engineering.
Cross-functional leverage
No handoff between research, copy, spec, instrumentation, and ship. PMM sits inside the production roadmap.
AI-native operating model
Claude, Codex, Cursor in the loop end-to-end. One operator holds the through-line from insight to deployed event.
Andrew Germer
Product Marketing & Growth Operator · Portland, OR
Product marketer and growth operator with 15+ years across consumer, marketplace, and subscription companies — from Sightbox (acquired by Johnson & Johnson) and Lensabl (acquired by Visibly) to PWCC (acquired by Fanatics) and most recently Revant Optics as Director of Marketing.
Firsthand marketer empathy paired with real product fluency. I ship consumer apps end-to-end — writing specs, integrating APIs, instrumenting behavior — so customer insight translates into positioning, onboarding, and adoption the way modern PLG teams expect.
andrewgermer@gmail.com · linkedin.com/in/germer · andrewgermer.com
-
Deathwishes2024 — Present
Product & Build Lead — concept to App Store; lifecycle, monetization, instrumentation -
Ticket Timeline2024 — Present
Founder & Builder — live on App Store; AppsFlyer, PostHog, GA, full instrumentation -
Revant Optics2024
Director of Marketing — GTM, positioning, lifecycle; 4-person team -
PWCC Marketplace → Fanatics2021 — 2023
Sr. Manager, Product & User Research; Manager, Digital Marketing -
Lensabl → Visibly2018 — 2021
VP, Marketing — first commercial hire; 0→1 GTM through acquisition -
Sightbox → Johnson & Johnson2015 — 2018
Director, Marketing — first commercial hire; 0→1 through acquisition