{"id":21452,"date":"2026-10-05T17:09:11","date_gmt":"2026-10-05T15:09:11","guid":{"rendered":"https:\/\/www.lukaswojcik.com\/blog\/?page_id=21452"},"modified":"2026-10-05T17:09:11","modified_gmt":"2026-10-05T15:09:11","slug":"saas-support-capacity-planner","status":"publish","type":"page","link":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/","title":{"rendered":"SaaS-Support-Kapazit\u00e4tsplaner"},"content":{"rendered":"<style>\n.lw-saas{color:var(--text-primary);min-width:0}\n.lw-saas *{box-sizing:border-box}\n.lw-saas h2,.lw-saas h3,.profile-panel:has(.lw-saas) .profile-name{overflow-wrap:anywhere;hyphens:auto}\n.lw-saas .saas-note{padding:16px;border-left:3px solid var(--accent);background:var(--bg-panel);color:var(--text-secondary)}\n.lw-saas fieldset{border:1px solid var(--border);border-radius:10px;padding:18px;margin:20px 0;min-width:0;background:var(--bg-panel)}\n.lw-saas legend{padding:0 8px;font-weight:700;color:var(--text-primary)}\n.lw-saas .saas-fields{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:16px}\n.lw-saas label{display:block;font-size:.9rem;color:var(--text-secondary)}\n.lw-saas input{display:block;width:100%;padding:11px;margin-top:6px;border:1px solid var(--border);border-radius:6px;background:var(--bg-body);color:var(--text-primary);font:inherit}\n.lw-saas input:focus-visible,.lw-saas button:focus-visible,.lw-saas a:focus-visible{outline:3px solid var(--accent);outline-offset:3px}\n.lw-saas input[aria-invalid=true]{border:2px solid var(--accent)}\n.lw-saas .saas-actions{display:flex;flex-wrap:wrap;gap:10px;margin:18px 0}\n.lw-saas button:disabled{opacity:.45;cursor:default;transform:none}\n.lw-saas [data-status]{color:var(--text-primary);font-weight:600}\n.lw-saas .saas-metrics{display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:12px}\n.lw-saas .saas-metrics div{padding:16px;border:1px solid var(--border);border-radius:8px;background:var(--bg-panel)}\n.lw-saas dt{color:var(--text-secondary);font-size:.85rem}\n.lw-saas dd{margin:8px 0 0;font-size:1.35rem;font-weight:700;overflow-wrap:anywhere;font-variant-numeric:tabular-nums}\n.lw-saas .saas-table-wrap{max-width:100%;overflow-x:auto;margin:20px 0;border:1px solid var(--border);border-radius:8px}\n.lw-saas table{border-collapse:collapse;width:100%;font-size:.86rem}\n.lw-saas table th,.lw-saas table td{width:auto!important;padding:12px;min-width:120px;word-break:normal;overflow-wrap:normal;text-align:right;border-bottom:1px solid var(--border);color:var(--text-primary);white-space:normal}\n.lw-saas table th{background:var(--bg-panel)}\n.lw-saas table th[scope=row],.lw-saas table thead th:first-child{position:sticky;left:0;z-index:1;border-right:1px solid var(--border)}\n.lw-saas caption{text-align:left;padding:12px;font-weight:700;color:var(--text-primary)}\n.lw-saas .saas-chart{margin:20px 0;color:var(--accent)}\n.lw-saas .saas-chart svg{display:block;width:100%;height:auto}\n.lw-saas figcaption{color:var(--text-secondary);font-size:.85rem}\n.lw-saas .saas-related{display:flex;gap:10px;flex-wrap:wrap;list-style:none;padding:0}\n.lw-saas .saas-related li{list-style:none;margin:0}\n.lw-saas .saas-related a{display:block;border:1px solid var(--border);border-radius:6px;padding:8px 12px}\n.site-container main:has(.lw-saas) .profile-panel{flex:1 1 0;max-width:none;min-width:0}\n.site-container main:has(.lw-saas) .info-panel{flex:0 0 220px;max-width:220px}\n@media(max-width:900px){.site-container main:has(.lw-saas) .profile-panel,.site-container main:has(.lw-saas) .info-panel{flex:auto;width:100%;max-width:100%}}\n@media(max-width:540px){.lw-saas .saas-fields,.lw-saas .saas-metrics{grid-template-columns:1fr}.lw-saas fieldset{padding:12px}}\n<\/style>\n<p><script>(function(scope){'use strict';\nconst number=raw=>{const s=String(raw??'').trim().replace(\/\\s\/g,'').replace(',','.');return \/^(?:\\d+(?:\\.\\d*)?|\\.\\d+)$\/.test(s)&&Number.isFinite(Number(s))?Number(s):NaN;};\nfunction acquisition(v){const leads=v.visits*v.signup\/100,activated=leads*v.activation\/100,payers=activated*v.paid\/100,cost=v.spend+v.hours*v.hour,margin=v.price-v.variable,rate=v.signup\/100*v.activation\/100*v.paid\/100,cac=payers>0?cost\/payers:null;\nreturn {summary:{leads,activated,payers,acquisitionCost:cost,cac,payback:cac!==null&&margin>0?cac\/margin:null,requiredVisits:v.target===0?0:rate>0?Math.ceil(v.target\/rate):null},columns:['paidRate','payers','cac','payback','contribution'],rows:[0.5,1,1.5].map(x=>{const pct=Math.min(100,v.paid*x),n=activated*pct\/100,c=n>0?cost\/n:null;return [pct,n,c,c!==null&&margin>0?c\/margin:null,n*margin];})};}\nfunction cashflow(v){let monthly=v.customers,cash=v.cash,first=null;const cohorts=[],rows=[],annualPrice=v.price*12*(1-v.discount\/100);let minimum=v.cash;\nfor(let month=1;month<=v.months;month++){monthly=monthly*(1-v.churn\/100)+v.newCustomers*(1-v.annualShare\/100);let renewed=0;\nfor(const cohort of cohorts){if((month-cohort.start)%12===0){cohort.n*=v.renewal\/100;renewed+=cohort.n;}}\nconst fresh=v.newCustomers*v.annualShare\/100;cohorts.push({start:month,n:fresh});const annual=cohorts.reduce((sum,c)=>sum+c.n,0),annualBills=renewed+fresh;\nconst receipts=monthly*v.price+annualBills*annualPrice,refunds=receipts*v.refunds\/100,fees=receipts*v.fee\/100+(monthly+annualBills)*v.flat;\nconst outflow=fees+(monthly+annual)*v.variable+v.fixed+(month===1?v.setup:0),net=receipts-refunds-outflow;cash+=net;minimum=Math.min(minimum,cash);if(cash<0&#038;&#038;first===null)first=month;\nrows.push([month,monthly,annual,receipts,refunds,outflow,net,cash,monthly*v.price+annual*annualPrice\/12]);}\nreturn {summary:{finalCash:cash,minimumCash:Math.min(...rows.map(r=>r[7])),firstShortfall:first===null?'none':first,finalMRR:rows.at(-1)[8]},columns:['month','monthlyCustomers','annualCustomers','receipts','refunds','outflow','netCash','closingCash','mrr'],rows};}\nfunction aibudget(v){const attempt=(v.inputTokens*((1-v.cached\/100)*v.inputRate+v.cached\/100*v.cacheRate)+v.outputTokens*v.outputRate)\/1e6+v.overhead,request=attempt*(1+v.retries\/100),usable=v.budget*(1-v.reserve\/100);\nreturn {summary:{attemptCost:attempt,requestCost:request,usableBudget:usable,safeRequests:request>0?Math.floor(usable\/request):'unbounded'},columns:['scenario','requests','attemptsTotal','perCustomer','totalCost','remaining'],rows:[1,2,v.spike].map(x=>{const n=v.requests*x,cost=n*request;return [x+'\u00d7',n,n*v.customers*(1+v.retries\/100),cost,cost*v.customers,usable-cost];})};}\nfunction support(v){const perPerson=v.hours*v.utilization\/100;\nconst calc=rate=>{const tickets=v.customers*v.tickets*(1-rate\/100),hours=tickets*v.minutes\/60*(1+v.reopen\/100),staff=Math.ceil(hours\/perPerson);return {tickets,hours,staff};};const main=calc(v.selfserve),capacity=v.staff*perPerson,cost=v.staff*v.hours*v.hour+v.fixed;\nreturn {summary:{tickets:main.tickets,requiredHours:main.hours,capacity,neededStaff:main.staff,spareHours:capacity-main.hours,teamCost:cost,perCustomerSupport:v.customers>0?cost\/v.customers:null},columns:['avoidRate','tickets','requiredHours','neededStaff','requiredStaffCost'],rows:[0,v.selfserve,Math.min(100,v.selfserve+20)].map(rate=>{const r=calc(rate);return [rate,r.tickets,r.hours,r.staff,r.staff*v.hours*v.hour+v.fixed];})};}\nconst api={number,acquisition,cashflow,aibudget,support};if(typeof module!=='undefined'&&module.exports)module.exports=api;else scope.LWSaasMath=api;\n})(typeof window!=='undefined'?window:globalThis);<\/script><\/p>\n<div class=\"lw-saas\" id=\"saas-support\">\n<p>Ticketvolumen, Bearbeitungszeit, verf\u00fcgbare Kapazit\u00e4t und Supportkosten je Kunde gemeinsam planen.<\/p>\n<p class=\"saas-note\">Alle Geldbetr\u00e4ge in derselben W\u00e4hrung, ohne Umsatzsteuer. Beispielwerte sind Annahmen, keine Anbieterpreise. Eingaben und Berechnungen bleiben im Browser.<\/p>\n<p><a href=\"\/blog\/de\/werkzeuge\/#saas\">Alle SaaS-Werkzeuge<\/a><\/p>\n<form novalidate>\n<fieldset>\n<legend>Grundannahmen<\/legend>\n<div class=\"saas-fields\">\n<label for=\"saas-support-customers\">Aktive Kunden<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-customers\" name=\"customers\" value=\"500\"><\/label><br \/>\n<label for=\"saas-support-tickets\">Tickets pro Kunde \/ Monat<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-tickets\" name=\"tickets\" value=\"0.4\"><\/label><br \/>\n<label for=\"saas-support-minutes\">Bearbeitungsminuten pro Ticket<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-minutes\" name=\"minutes\" value=\"15\"><\/label><br \/>\n<label for=\"saas-support-reopen\">Zus\u00e4tzlicher Aufwand f\u00fcr R\u00fcckfragen (%)<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-reopen\" name=\"reopen\" value=\"10\"><\/label><br \/>\n<label for=\"saas-support-selfserve\">Durch Self-Service vermiedene Tickets (%)<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-selfserve\" name=\"selfserve\" value=\"20\"><\/label><br \/>\n<label for=\"saas-support-hours\">Verf\u00fcgbare Arbeitsstunden pro Person \/ Monat<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-hours\" name=\"hours\" value=\"80\"><\/label><br \/>\n<label for=\"saas-support-utilization\">Davon f\u00fcr Tickets planbarer Anteil (%)<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-utilization\" name=\"utilization\" value=\"70\"><\/label><br \/>\n<label for=\"saas-support-staff\">Eingeplante Personen<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-staff\" name=\"staff\" value=\"1\"><\/label><br \/>\n<label for=\"saas-support-hour\">Personalkosten pro bezahlter Arbeitsstunde<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-hour\" name=\"hour\" value=\"30\"><\/label><br \/>\n<label for=\"saas-support-fixed\">Monatliche Supportsoftware-Kosten<input type=\"text\" inputmode=\"decimal\" autocomplete=\"off\" data-rc-private data-mp-mask id=\"saas-support-fixed\" name=\"fixed\" value=\"50\"><\/label>\n<\/div>\n<\/fieldset>\n<div class=\"saas-actions\"><button type=\"submit\">Berechnen<\/button><button type=\"button\" data-reset>Beispielwerte<\/button><\/div>\n<\/form>\n<p role=\"alert\" data-status id=\"saas-support-status\">\n<div data-result data-rc-private data-mp-mask aria-live=\"polite\" aria-atomic=\"false\"><\/div>\n<p><button type=\"button\" data-csv disabled>CSV herunterladen<\/button><\/p>\n<h2>Rechenmodell und Annahmen<\/h2>\n<p>Tickets = Kunden \u00d7 Tickets pro Kunde \u00d7 (1 \u2212 Self-Service-Anteil). Ben\u00f6tigte Bearbeitungsstunden = Tickets \u00d7 Minuten \/ 60 \u00d7 (1 + R\u00fcckfrageaufschlag). Produktive Monatsstunden pro Person = verf\u00fcgbare Arbeitsstunden \u00d7 planbarer Anteil. Personalbedarf wird auf volle Personen aufgerundet. Kosten des vorhandenen Teams = Personen \u00d7 verf\u00fcgbare bezahlte Arbeitsstunden \u00d7 Stundensatz + Softwarekosten. Die Tabelle ver\u00e4ndert den Self-Service-Anteil bei gleichem Kundenvolumen. Freie Bearbeitungsstunden bedeuten keine garantierte Antwortzeit; zeitliche Spitzen und Warteschlangen fehlen im Durchschnittsmodell.<\/p>\n<h2>Weitere SaaS-Werkzeuge<\/h2>\n<ul class=\"saas-related\">\n<li><a href=\"\/blog\/de\/werkzeuge\/saas-profitability-calculator\/\">SaaS-Rentabilit\u00e4tsrechner<\/a><\/li>\n<li><a href=\"\/blog\/de\/werkzeuge\/saas-pricing-model-simulator\/\">SaaS-Preismodell-Simulator<\/a><\/li>\n<li><a href=\"\/blog\/de\/werkzeuge\/automation-cost-comparator\/\">Automatisierungskosten-Vergleich<\/a><\/li>\n<li><a href=\"\/blog\/de\/werkzeuge\/mrr-churn-simulator\/\">MRR- und Churn-Rechner<\/a><\/li>\n<li><a href=\"\/blog\/de\/werkzeuge\/digital-product-profit-calculator\/\">Digitale-Produkte-Rechner<\/a><\/li>\n<li><a href=\"\/blog\/de\/werkzeuge\/saas-customer-acquisition-calculator\/\">SaaS-Kundengewinnungs-Rechner<\/a><\/li>\n<li><a href=\"\/blog\/de\/werkzeuge\/saas-cashflow-runway-simulator\/\">SaaS-Liquidit\u00e4ts- und Runway-Simulator<\/a><\/li>\n<li><a href=\"\/blog\/de\/werkzeuge\/ai-usage-budget-calculator\/\">KI-Verbrauchsbudget-Rechner<\/a><\/li>\n<\/ul>\n<h2>Quellen und Definitionen<\/h2>\n<ul>\n<li><a href=\"https:\/\/docs.stripe.com\/customer-management\" rel=\"noopener\">Stripe: customer portal<\/a><\/li>\n<li><a href=\"https:\/\/www.ycombinator.com\/blog\/balancing-b2b-sales\/\" rel=\"noopener\">Y Combinator: balancing B2B sales<\/a><\/li>\n<\/ul>\n<div class=\"lw-faq\">\n<h2>FAQ<\/h2>\n<h3>Werden Eingaben \u00fcbertragen?<\/h3>\n<p>Die Rechenfunktion verarbeitet Eingaben lokal im Browser. CSV-Dateien entstehen ebenfalls lokal. Die Seite speichert keine Szenarioeingaben auf dem Server.<\/p>\n<h3>Welche Grenzen hat das Modell?<\/h3>\n<p>Self-Service ist ein angenommenes Vermeidungspotenzial, keine gemessene Wirkung. Personalkosten umfassen auch eingeplante Zeiten au\u00dferhalb der Ticketbearbeitung. Einrichtung und Dokumentationspflege sind zus\u00e4tzliche Kosten. Ein SLA erfordert au\u00dferdem eine Planung nach \u00d6ffnungszeiten und Spitzenlast.<\/p>\n<\/div>\n<p><script type=\"application\/json\" data-config>{\"kind\": \"support\", \"slug\": \"saas-support-capacity-planner\", \"title\": \"SaaS-Support-Kapazit\u00e4tsplaner\", \"locale\": \"de-DE\", \"fields\": [{\"key\": \"customers\", \"value\": 500, \"label\": \"Aktive Kunden\", \"min\": 0, \"max\": 1000000000.0, \"integer\": true, \"group\": \"common\"}, {\"key\": \"tickets\", \"value\": 0.4, \"label\": \"Tickets pro Kunde \/ Monat\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"minutes\", \"value\": 15, \"label\": \"Bearbeitungsminuten pro Ticket\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"reopen\", \"value\": 10, \"label\": \"Zus\u00e4tzlicher Aufwand f\u00fcr R\u00fcckfragen (%)\", \"min\": 0, \"max\": 1000, \"integer\": false, \"group\": \"common\"}, {\"key\": \"selfserve\", \"value\": 20, \"label\": \"Durch Self-Service vermiedene Tickets (%)\", \"min\": 0, \"max\": 100, \"integer\": false, \"group\": \"common\"}, {\"key\": \"hours\", \"value\": 80, \"label\": \"Verf\u00fcgbare Arbeitsstunden pro Person \/ Monat\", \"min\": 0.01, \"max\": 1000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"utilization\", \"value\": 70, \"label\": \"Davon f\u00fcr Tickets planbarer Anteil (%)\", \"min\": 0.01, \"max\": 100, \"integer\": false, \"group\": \"common\"}, {\"key\": \"staff\", \"value\": 1, \"label\": \"Eingeplante Personen\", \"min\": 0, \"max\": 10000, \"integer\": true, \"group\": \"common\"}, {\"key\": \"hour\", \"value\": 30, \"label\": \"Personalkosten pro bezahlter Arbeitsstunde\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}, {\"key\": \"fixed\", \"value\": 50, \"label\": \"Monatliche Supportsoftware-Kosten\", \"min\": 0, \"max\": 1000000000.0, \"integer\": false, \"group\": \"common\"}], \"labels\": {\"revenue\": \"Monatsumsatz\", \"cost\": \"Monatskosten\", \"profit\": \"Monatsgewinn\", \"margin\": \"Deckungsbeitrag je Kunde \/ Verkauf\", \"breakEven\": \"Gewinnschwelle: Kunden \/ Verk\u00e4ufe\", \"minimumPrice\": \"Kostendeckender Nettopreis\", \"scenario\": \"Volumen\", \"customers\": \"Kunden\", \"sales\": \"Verk\u00e4ufe\", \"attempts\": \"Versuche pro Monat\", \"outcomes\": \"Erwartete erfolgreiche Ergebnisse\", \"packs\": \"Credit-Pakete pro Monat\", \"model\": \"Preismodell\", \"fees\": \"Zahlungsgeb\u00fchren\", \"operatingCost\": \"Versuchs- und Fixkosten\", \"subscription\": \"Abo\", \"credits\": \"Credit-Pakete\", \"outcome\": \"Ergebnisabrechnung\", \"platform\": \"Plattform\", \"billableUnits\": \"Abrechnungseinheiten\", \"fixedPlanHosting\": \"Plan und Hosting\", \"overage\": \"Mehrverbrauchskosten\", \"maintenance\": \"Wartungskosten\", \"setupMonthly\": \"Einrichtung je Monat\", \"apiCost\": \"Externe API-Kosten\", \"total\": \"Gesamtkosten pro Monat\", \"perRun\": \"Kosten je urspr\u00fcnglichem Lauf\", \"n8n\": \"n8n\", \"make\": \"Make\", \"code\": \"Eigener Code\", \"initialMRR\": \"Anfangs-MRR\", \"finalMRR\": \"MRR am Ende\", \"annualRunRate\": \"ARR am Ende (MRR \u00d7 12)\", \"finalCustomers\": \"Erwartete Kunden am Ende\", \"month\": \"Monat\", \"openingMRR\": \"MRR zu Monatsbeginn\", \"lostMRR\": \"Gek\u00fcndigter MRR\", \"newMRR\": \"Neuer MRR\", \"expansionMRR\": \"MRR-Erweiterung\", \"contractionMRR\": \"MRR-Reduktion\", \"closingMRR\": \"MRR zum Monatsende\", \"customersExpected\": \"Erwartete Kunden\", \"nrr\": \"NRR ohne Neukunden\", \"grossRevenue\": \"Umsatz vor R\u00fcckerstattung\", \"refundValue\": \"R\u00fcckerstattungen\", \"retainedRevenue\": \"Einbehaltener Umsatz\", \"leads\": \"Anmeldungen \/ Demo-Anfragen\", \"activated\": \"Aktivierte Kontakte\", \"payers\": \"Erwartete neue Zahler\", \"acquisitionCost\": \"Akquisitionsaufwand\", \"cac\": \"Kosten pro Neukunde (CAC)\", \"payback\": \"Amortisation in Monaten\", \"requiredVisits\": \"Erforderliche Besuche f\u00fcr das Ziel\", \"paidRate\": \"Zahlungsquote (%)\", \"contribution\": \"Monatlicher Deckungsbeitrag der Neukunden\", \"finalCash\": \"Kontostand am Ende\", \"minimumCash\": \"Niedrigster Monatsendstand\", \"firstShortfall\": \"Erster Monat mit negativem Endstand\", \"none\": \"Kein negativer Monatsendstand\", \"monthlyCustomers\": \"Monatskunden\", \"annualCustomers\": \"Jahreskunden\", \"receipts\": \"Zahlungseing\u00e4nge\", \"refunds\": \"R\u00fcckerstattungen\", \"outflow\": \"Geb\u00fchren und Betriebsausgaben\", \"netCash\": \"Netto-Geldfluss\", \"closingCash\": \"Kontostand zum Monatsende\", \"mrr\": \"Aktiver Vertrags-MRR\", \"attemptCost\": \"Kosten je Versuch\", \"requestCost\": \"Kosten je urspr\u00fcnglicher Anfrage\", \"usableBudget\": \"Nutzbares Budget pro Kunde\", \"safeRequests\": \"Kostenlimit: urspr\u00fcngliche Anfragen \/ Kunde\", \"unbounded\": \"Kein endliches Kostenlimit\", \"requests\": \"Anfragen pro Kunde\", \"attemptsTotal\": \"Versuche insgesamt\", \"perCustomer\": \"KI-Kosten pro Kunde\", \"totalCost\": \"Gesamte KI-Kosten\", \"remaining\": \"Rest zum nutzbaren Budget pro Kunde\", \"tickets\": \"Verbleibende Tickets\", \"requiredHours\": \"Ben\u00f6tigte Bearbeitungsstunden\", \"capacity\": \"Verf\u00fcgbare Bearbeitungsstunden\", \"neededStaff\": \"Erforderliche Personen\", \"spareHours\": \"Freie Stunden \/ negativer Fehlbedarf\", \"teamCost\": \"Monatliche Kosten des eingeplanten Teams\", \"perCustomerSupport\": \"Teamkosten pro Kunde\", \"avoidRate\": \"Self-Service-Anteil (%)\", \"requiredStaffCost\": \"Kosten des erforderlichen Teams\"}, \"ui\": {\"calculate\": \"Berechnen\", \"reset\": \"Beispielwerte\", \"csv\": \"CSV herunterladen\", \"results\": \"Ergebnis\", \"table\": \"Szenarien und Berechnung\", \"unavailable\": \"Nicht berechenbar\", \"invalid\": \"Ung\u00fcltiger Wert. Zul\u00e4ssiger Bereich f\u00fcr\", \"integer\": \"(ganze Zahl)\", \"shares\": \"Die drei Kundenanteile m\u00fcssen zusammen 100 % ergeben.\", \"overflow\": \"Die Eingaben ergeben zu gro\u00dfe Werte.\", \"changed\": \"Eingaben ge\u00e4ndert. Eine neue Berechnung aktualisiert das Ergebnis.\", \"undefinedHelp\": \"Self-Service ist ein angenommenes Vermeidungspotenzial, keine gemessene Wirkung. Personalkosten umfassen auch eingeplante Zeiten au\u00dferhalb der Ticketbearbeitung. Einrichtung und Dokumentationspflege sind zus\u00e4tzliche Kosten. Ein SLA erfordert au\u00dferdem eine Planung nach \u00d6ffnungszeiten und Spitzenlast.\", \"title\": \"Werkzeug\", \"assumptions\": \"Annahmen\", \"chart\": \"Entwicklung des MRR; genaue Werte in der Tabelle\", \"pricingChart\": \"Monatsgewinn je Preismodell; genaue Werte in der Tabelle\", \"method\": \"Rechenmodell und Annahmen\", \"sources\": \"Quellen und Definitionen\", \"faq1\": \"Werden Eingaben \u00fcbertragen?\", \"faq1a\": \"Die Rechenfunktion verarbeitet Eingaben lokal im Browser. CSV-Dateien entstehen ebenfalls lokal. Die Seite speichert keine Szenarioeingaben auf dem Server.\", \"faq2\": \"Welche Grenzen hat das Modell?\", \"related\": \"Weitere SaaS-Werkzeuge\", \"all\": \"Alle SaaS-Werkzeuge\"}}<\/script><\/div>\n<p><script>(function(){\n'use strict';\nconst root=document.currentScript.previousElementSibling;\nconst c=JSON.parse(root.querySelector('[data-config]').textContent);\nif(root.dataset.ready)return;root.dataset.ready='1';\nconst form=root.querySelector('form'), result=root.querySelector('[data-result]'), status=root.querySelector('[data-status]'), download=root.querySelector('[data-csv]');\nlet exportRows=null;\nconst fmt=new Intl.NumberFormat(c.locale,{maximumFractionDigits:2});\nconst countFmt=new Intl.NumberFormat(c.locale,{maximumFractionDigits:2});\nconst preciseFmt=new Intl.NumberFormat(c.locale,{maximumFractionDigits:6});\nconst safeMinimum=value=>Math.ceil(value*100)\/100;\nconst e=(tag,text)=>{const n=document.createElement(tag);if(text!==undefined)n.textContent=text;return n;};\nconst label=k=>c.labels[k]||k;\nfunction display(value,key){\n if(value===null)return c.ui.unavailable;\n if(typeof value==='string')return label(value);\n if(key==='minimumPrice')value=safeMinimum(value);\n if(['attemptCost','requestCost','perRun','margin'].includes(key))return preciseFmt.format(value);\n return (['customers','sales','attempts','outcomes','packs','breakEven','finalCustomers','customersExpected','billableUnits','month'].includes(key)?countFmt:fmt).format(value)+(key==='nrr'?' %':'');\n}\nfunction calculate(){\n status.textContent='';result.replaceChildren();download.disabled=true;exportRows=null;\n root.querySelectorAll('[aria-invalid]').forEach(n=>{n.removeAttribute('aria-invalid');n.removeAttribute('aria-describedby');});\n const v={};let bad=null;\n for(const f of c.fields){\n  const input=form.elements.namedItem(f.key), n=LWSaasMath.number(input.value);\n  if(!Number.isFinite(n)||n<f.min||n>f.max||(f.integer&&!Number.isInteger(n))){\n   input.setAttribute('aria-invalid','true');input.setAttribute('aria-describedby',status.id);\n   if(!bad)bad={input,field:f};\n  }v[f.key]=n;\n }\n if(bad){\n  status.textContent=c.ui.invalid+' '+bad.field.label+': '+bad.field.min+'\u2013'+bad.field.max+(bad.field.integer?' '+c.ui.integer:'');\n  bad.input.focus();return;\n }\n let data;\n try{data=LWSaasMath[c.kind](v);}catch(error){status.textContent=c.ui.shares;return;}\n const values=[...Object.values(data.summary),...data.rows.flat()];\n if(values.some(n=>typeof n==='number'&&!Number.isFinite(n))){status.textContent=c.ui.overflow;return;}\n const h=e('h2',c.ui.results);result.append(h);\n const cards=e('dl');cards.className='saas-metrics';\n for(const [key,value]of Object.entries(data.summary)){\n  const box=e('div');box.append(e('dt',label(key)),e('dd',display(value,key)));cards.append(box);\n }result.append(cards);\n if(c.kind==='mrr'||c.kind==='pricing'){\n  const index=c.kind==='mrr'?6:4;\n  const points=data.rows.map(row=>row[index]);\n  const chart=e('figure');chart.className='saas-chart';\n  const svg=document.createElementNS('http:\/\/www.w3.org\/2000\/svg','svg');\n  svg.setAttribute('viewBox','0 0 600 160');svg.setAttribute('role','img');svg.setAttribute('aria-label',c.ui.chart);\n  const max=Math.max(1,...points.map(Math.abs));\n  if(c.kind==='mrr'){\n   const path=document.createElementNS(svg.namespaceURI,'polyline');\n   path.setAttribute('points',points.map((n,i)=>(20+i*560\/Math.max(1,points.length-1))+','+(140-n\/max*120)).join(' '));\n   path.setAttribute('fill','none');path.setAttribute('stroke','currentColor');path.setAttribute('stroke-width','3');svg.append(path);\n  }else{\n   for(let i=0;i<points.length;i++){\n    const rect=document.createElementNS(svg.namespaceURI,'rect');\n    rect.setAttribute('x',30+i*195);rect.setAttribute('width','140');\n    rect.setAttribute('y',points[i]>=0?80-points[i]\/max*60:80);\n    rect.setAttribute('height',Math.abs(points[i])\/max*60);rect.setAttribute('fill','currentColor');\n    const title=document.createElementNS(svg.namespaceURI,'title');title.textContent=label(data.rows[i][0])+': '+display(points[i],'profit');rect.append(title);svg.append(rect);\n   }\n   const axis=document.createElementNS(svg.namespaceURI,'path');axis.setAttribute('d','M20 80H580');axis.setAttribute('stroke','currentColor');svg.append(axis);\n  }\n  chart.append(svg,e('figcaption',c.ui.chart));result.append(chart);\n }\n const scroll=e('div');scroll.className='saas-table-wrap';scroll.tabIndex=0;\n scroll.setAttribute('role','region');scroll.setAttribute('aria-label',c.ui.table);\n const table=e('table');table.append(e('caption',c.ui.table));\n const head=e('thead'), hr=e('tr');\n data.columns.forEach(k=>{const th=e('th',label(k));th.scope='col';hr.append(th);});head.append(hr);table.append(head);\n const body=e('tbody');\n data.rows.forEach(row=>{const tr=e('tr');row.forEach((value,i)=>{const cell=e(i===0?'th':'td',display(value,data.columns[i]));if(i===0)cell.scope='row';tr.append(cell);});body.append(tr);});\n table.append(body);scroll.append(table);result.append(scroll);\n if(Object.values(data.summary).includes(null)||data.rows.flat().includes(null))result.append(e('p',c.ui.undefinedHelp));\n exportRows=[[c.ui.title,c.title],[c.ui.assumptions]];\n for(const f of c.fields)exportRows.push([f.label,v[f.key]]);\n exportRows.push([],['',c.ui.results]);\n for(const [key,value]of Object.entries(data.summary))exportRows.push([label(key),value===null?c.ui.unavailable:key==='minimumPrice'?safeMinimum(value):value]);\n exportRows.push([],data.columns.map(label),...data.rows.map(row=>row.map(x=>typeof x==='string'?label(x):x===null?c.ui.unavailable:x)));\n download.disabled=false;\n root.dispatchEvent(new CustomEvent('saas-calculated',{detail:data}));\n}\nform.addEventListener('submit',event=>{event.preventDefault();calculate();});\nform.addEventListener('input',()=>{exportRows=null;download.disabled=true;status.textContent=c.ui.changed;result.replaceChildren();});\nroot.querySelector('[data-reset]').addEventListener('click',()=>{form.reset();calculate();});\ndownload.addEventListener('click',()=>{\n if(!exportRows)return;\n const csv='\\uFEFF'+exportRows.map(row=>row.map(x=>'\"'+String(x).replace(\/\"\/g,'\"\"')+'\"').join(';')).join('\\r\\n');\n const url=URL.createObjectURL(new Blob([csv],{type:'text\/csv;charset=utf-8'}));\n const a=e('a');a.href=url;a.download=c.slug+'.csv';root.append(a);a.click();a.remove();setTimeout(()=>URL.revokeObjectURL(url),1000);\n});\nroot._saasCalculate=calculate;\ncalculate();\n})();\n<\/script><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Ticketvolumen, Bearbeitungszeit, verf\u00fcgbare Kapazit\u00e4t und Supportkosten je Kunde gemeinsam planen.<\/p>\n","protected":false},"author":1,"featured_media":0,"parent":9283,"menu_order":9,"comment_status":"closed","ping_status":"closed","template":"template-tool-base.php","meta":{"footnotes":""},"tags":[93053],"class_list":["post-21452","page","type-page","status-publish","hentry","tag-saas-tools-de"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>SaaS-Support-Kapazit\u00e4tsplaner | Lukas Wojcik<\/title>\n<meta name=\"description\" content=\"Ticketvolumen, Bearbeitungszeit, verf\u00fcgbare Kapazit\u00e4t und Supportkosten je Kunde gemeinsam planen.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SaaS-Support-Kapazit\u00e4tsplaner | Lukas Wojcik\" \/>\n<meta property=\"og:description\" content=\"Ticketvolumen, Bearbeitungszeit, verf\u00fcgbare Kapazit\u00e4t und Supportkosten je Kunde gemeinsam planen.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/\" \/>\n<meta property=\"og:site_name\" content=\"Lukas Wojcik - Blog\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"630\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"1 minute\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/saas-support-capacity-planner\\\/\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/saas-support-capacity-planner\\\/\",\"name\":\"SaaS-Support-Kapazit\u00e4tsplaner | Lukas Wojcik\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\"},\"datePublished\":\"2026-10-05T15:09:11+00:00\",\"description\":\"Ticketvolumen, Bearbeitungszeit, verf\u00fcgbare Kapazit\u00e4t und Supportkosten je Kunde gemeinsam planen.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/saas-support-capacity-planner\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/saas-support-capacity-planner\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/de\\\/werkzeuge\\\/saas-support-capacity-planner\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Toolbox\",\"item\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/toolbox-2\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"SaaS-Support-Kapazit\u00e4tsplaner\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/\",\"name\":\"Lukas Wojcik - Blog\",\"description\":\"\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/#\\\/schema\\\/person\\\/895f7604f9b6b71aad9bba33af28d0f9\",\"name\":\"Lukas Wojcik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"url\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"contentUrl\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\",\"width\":424,\"height\":636,\"caption\":\"Lukas Wojcik\"},\"logo\":{\"@id\":\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\\\/wp-content\\\/uploads\\\/2026\\\/07\\\/lw-x2.jpg\"},\"sameAs\":[\"https:\\\/\\\/www.lukaswojcik.com\\\/blog\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"SaaS-Support-Kapazit\u00e4tsplaner | Lukas Wojcik","description":"Ticketvolumen, Bearbeitungszeit, verf\u00fcgbare Kapazit\u00e4t und Supportkosten je Kunde gemeinsam planen.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/","og_locale":"en_US","og_type":"article","og_title":"SaaS-Support-Kapazit\u00e4tsplaner | Lukas Wojcik","og_description":"Ticketvolumen, Bearbeitungszeit, verf\u00fcgbare Kapazit\u00e4t und Supportkosten je Kunde gemeinsam planen.","og_url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/","og_site_name":"Lukas Wojcik - Blog","og_image":[{"width":1200,"height":630,"url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/08\/og-default.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"1 minute"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/","url":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/","name":"SaaS-Support-Kapazit\u00e4tsplaner | Lukas Wojcik","isPartOf":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#website"},"datePublished":"2026-10-05T15:09:11+00:00","description":"Ticketvolumen, Bearbeitungszeit, verf\u00fcgbare Kapazit\u00e4t und Supportkosten je Kunde gemeinsam planen.","breadcrumb":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.lukaswojcik.com\/blog\/de\/werkzeuge\/saas-support-capacity-planner\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.lukaswojcik.com\/blog\/"},{"@type":"ListItem","position":2,"name":"Toolbox","item":"https:\/\/www.lukaswojcik.com\/blog\/toolbox-2\/"},{"@type":"ListItem","position":3,"name":"SaaS-Support-Kapazit\u00e4tsplaner"}]},{"@type":"WebSite","@id":"https:\/\/www.lukaswojcik.com\/blog\/#website","url":"https:\/\/www.lukaswojcik.com\/blog\/","name":"Lukas Wojcik - Blog","description":"","publisher":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.lukaswojcik.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/www.lukaswojcik.com\/blog\/#\/schema\/person\/895f7604f9b6b71aad9bba33af28d0f9","name":"Lukas Wojcik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","url":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","contentUrl":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg","width":424,"height":636,"caption":"Lukas Wojcik"},"logo":{"@id":"https:\/\/www.lukaswojcik.com\/blog\/wp-content\/uploads\/2026\/07\/lw-x2.jpg"},"sameAs":["https:\/\/www.lukaswojcik.com\/blog"]}]}},"_links":{"self":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/21452","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/comments?post=21452"}],"version-history":[{"count":1,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/21452\/revisions"}],"predecessor-version":[{"id":21464,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/21452\/revisions\/21464"}],"up":[{"embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/pages\/9283"}],"wp:attachment":[{"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/media?parent=21452"}],"wp:term":[{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.lukaswojcik.com\/blog\/wp-json\/wp\/v2\/tags?post=21452"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}