Product-Market Fit Expires Every 90 Days. Here’s What to Do About It.
You can build an MVP in a weekend today. AI tools like Lovable and Replit have turned what once required six months and a six-figure budget into something a founder can prototype in a matter of days. So why do so many startups still struggle?
Because the bottleneck was never building. It was choosing. Choosing which customers to serve, which problems to own, which jobs to compete for.
Across more than 40 product teams, I’ve found that the founders who struggle aren’t the ones who can’t ship. They’re the ones who repeatedly build the wrong product for the wrong audience. Speed only magnifies the mistake when strategy comes first.
Build Your Business. Get Grant Ready.
Take free expert-led courses and unlock access to tools, mentorship, networking, and Verizon grant opportunities for small businesses.
We earn a commission if you make a purchase, at no additional cost to you.
Build Your Business. Get Grant Ready.
Take free expert-led courses and unlock access to tools, mentorship, networking, and Verizon grant opportunities for small businesses.
The One Decision That Matters
Nine out of ten startups fail.
CB Insights analyzed 431 failed VC-backed startups and found that 43% died from poor product-market fit (PMF) — when a product doesn’t solve a real problem for a real audience. Nearly half built something nobody needed.
Most of those founders had roadmaps, sprint plans, and weekly standups. They were executing brilliantly — on the wrong strategy.
Product strategy isn’t a backlog of features. It’s one decision: which customer jobs will you compete for? Product strategist Bob Moesta argues that “people don’t buy products. They hire them to do a job.” In other words, customers aren’t purchasing features. They’re looking for progress on a specific problem they’re trying to solve.
Everything downstream depends on getting this right. Everything else flows from that decision. Your target market determines your customer segments. Those segments shape your value proposition, messaging, customer acquisition, and ultimately your profitability. Get the first decision wrong, and every decision that follows becomes harder.
Three mistakes derail startups more often than almost anything else:
- Building for customer problems that don’t actually exist.
- Targeting a customer segment that isn’t profitable.
- Trying to serve too many audiences at once, creating a product that satisfies no one particularly well.
A dental clinic I worked with hit this wall. They had grown intuitively to solid revenue but plateaued. After 22 customer interviews, they discovered their highest-margin segment: patients who wanted all their dental work completed in a single day. They rebuilt their product, advertising and partnerships around that one job. Revenue jumped 37% in two months.
Understanding the chain is one thing. But here’s where it gets expensive: most founders don’t choose the wrong strategy. They choose the wrong customer job to compete for.
The Wrong Job Trap
Companies serve customers who have many jobs, and the product competes for a small number of them — often not the most profitable ones. A larger, more solvent segment with higher-frequency needs may sit right next door. But the founder doesn’t know it exists because they never looked.
The real danger is what Bob Moesta calls the “bipolar product problem”: trying to serve two conflicting jobs at once. “You end up building a product that tries to do everything for everybody, and it ends up doing nothing for nobody.”
InVideo lived this trap for three years. The video editing startup tried to serve beginners who wanted simplicity and professionals who wanted power. Every feature pleased one half and enraged the other. Revenue flatlined.
Then they did something counterintuitive. InVideo fired half their customers and grew from $0 to $25M in six months. They ran Jobs-to-be-Done interviews, chose beginners, stripped out the pro features and focused the entire product on one job. The difference wasn’t a better product. It was a better decision about whose problem to solve.
Every time you build a feature instead of mapping customer jobs, you pay an opportunity cost you can’t see on any dashboard.
Alright, how do you systematically find a better job to compete for? There are roughly 80 product strategy mechanics. Here are five practical strategies founders can apply.
Five Moves That Change the Game
- Move to the higher-level job. Stop solving a narrow task and own the broader outcome your customer actually cares about. A branding consultant went from selling strategy documents at $1,500/month to full-service personal branding at $4,500/month. Same team. Triple the revenue per client.
- Move upmarket. Serve a more profitable segment with the same core service. Freshworks started as a cheap Zendesk alternative for tiny teams. Then they moved upmarket to enterprise. Customers paying $50K+/year grew 23% year-over-year while total customer count barely moved. The result: their first GAAP-profitable quarter and $840M in annual revenue.
- Own the previous job. Address what your customer worries about before they need your product. A real estate agency built a content channel answering the questions buyers ask before they start apartment hunting. Their return on marketing investment jumped from 800% to 1200%.
- Capture the next job. Once a customer finishes hiring your product, what do they need next? Sell that too. Toast started as restaurant point-of-sale software. Then they noticed restaurants needed payroll, lending, marketing, and insurance — the jobs that come after processing payments. Restaurants using Toast Payroll buy twice as many products and pay $4K–$5K more per year. Toast crossed $2B in annual recurring revenue by owning the full sequence of restaurant jobs.
- Kill the job entirely. Don’t make the task easier — eliminate it. Cursor didn’t improve coding by 10%. It killed entire categories of developer work: boilerplate, multi-file refactoring, bug hunting. The result was one of the fastest growth stories in enterprise software.
JetBrains: When Demographics Lie
These mechanics aren’t theoretical. Here’s what they look like when a real product team applies them.
JetBrains had a problem with Kotlin Multiplatform, their cross-platform mobile development tool. The backlog was drowning in unresolved issues. Traditional demographic segmentation — company size, industry, team composition — told them nothing useful about what to prioritize.
So they segmented by jobs instead. They discovered mobile developers hired their product for two specific jobs: reducing errors in complex business logic through shared code and preserving native UI customization on each platform. Their competitors had all bet on “faster release cycles.” Wrong job.
Team focused on the two jobs developers actually cared about. The result: +11% market share IN ONE YEAR and top-3 in cross-platform technologies with React Native and Flutter as competitors.
#mc_embed_signup{background:#fff; false;clear:left; font:14px Helvetica,Arial,sans-serif; width: 600px;}
/* Add your own Mailchimp form style overrides in your site stylesheet or in this style block.
We recommend moving this block and the preceding CSS link to the HEAD of your HTML file. */
Sign Up for The Start Newsletter
(function($) {window.fnames = new Array(); window.ftypes = new Array();fnames[0]=’EMAIL’;ftypes[0]=’email’;fnames[1]=’FNAME’;ftypes[1]=’text’;fnames[2]=’LNAME’;ftypes[2]=’text’;fnames[3]=’ADDRESS’;ftypes[3]=’address’;fnames[4]=’PHONE’;ftypes[4]=’phone’;fnames[5]=’MMERGE5′;ftypes[5]=’text’;fnames[6]=’MMERGE6′;ftypes[6]=’text’;}(jQuery));var $mcj = jQuery.noConflict(true);
// SMS Phone Multi-Country Functionality
if(!window.MC) {
window.MC = {};
}
window.MC.smsPhoneData = {
defaultCountryCode: ‘US’,
programs: [],
smsProgramDataCountryNames: []
};
function getCountryUnicodeFlag(countryCode) {
return countryCode.toUpperCase().replace(/./g, (char) => String.fromCodePoint(char.charCodeAt(0) + 127397))
};
// HTML sanitization function to prevent XSS
function sanitizeHtml(str) {
if (typeof str !== ‘string’) return ”;
return str
.replace(/&/g, ‘&’)
.replace(//g, ‘>’)
.replace(/”/g, ‘"’)
.replace(/’/g, ‘'’)
.replace(/\//g, ‘/’);
}
// URL sanitization function to prevent javascript: and data: URLs
function sanitizeUrl(url) {
if (typeof url !== ‘string’) return ”;
const trimmedUrl = url.trim().toLowerCase();
if (trimmedUrl.startsWith(‘javascript:’) || trimmedUrl.startsWith(‘data:’) || trimmedUrl.startsWith(‘vbscript:’)) {
return ‘#’;
}
return url;
}
const getBrowserLanguage = () => {
if (!window?.navigator?.language?.split(‘-‘)[1]) {
return window?.navigator?.language?.toUpperCase();
}
return window?.navigator?.language?.split(‘-‘)[1];
};
function getDefaultCountryProgram(defaultCountryCode, smsProgramData) {
if (!smsProgramData || smsProgramData.length === 0) {
return null;
}
const browserLanguage = getBrowserLanguage();
if (browserLanguage) {
const foundProgram = smsProgramData.find(
(program) => program?.countryCode === browserLanguage,
);
if (foundProgram) {
return foundProgram;
}
}
if (defaultCountryCode) {
const foundProgram = smsProgramData.find(
(program) => program?.countryCode === defaultCountryCode,
);
if (foundProgram) {
return foundProgram;
}
}
return smsProgramData[0];
}
function updateSmsLegalText(countryCode, fieldName) {
if (!countryCode || !fieldName) {
return;
}
const programs = window?.MC?.smsPhoneData?.programs;
if (!programs || !Array.isArray(programs)) {
return;
}
const program = programs.find(program => program?.countryCode === countryCode);
if (!program || !program.requiredTemplate) {
return;
}
var smsConsentHtmlRenderingFixEnabled = true;
const legalTextElement = document.querySelector(‘#legal-text-‘ + fieldName);
if (!legalTextElement) {
return;
}
const divRegex = new RegExp(‘?[div][^>]*>’, ‘gi’);
const blockWrapperRegex = new RegExp(‘?(?:div|p)[^>]*>’, ‘gi’);
const fullAnchorRegex = new RegExp(‘<a.*?', 'g');
const anchorRegex = new RegExp('(.*?)‘);
const template = smsConsentHtmlRenderingFixEnabled
? program.requiredTemplate
.replace(/\s*
]*>/gi, ‘ ‘)
.replace(blockWrapperRegex, ”)
: program.requiredTemplate.replace(divRegex, ”);
legalTextElement.textContent=””;
const parts = template.split(/(.*?)/g);
parts.forEach(function(part) {
if (!part) {
return;
}
const anchorMatch = part.match(/(.*?)/);
if (anchorMatch) {
const linkElement = document.createElement(‘a’);
linkElement.href = sanitizeUrl(anchorMatch[1]);
linkElement.target = sanitizeHtml(anchorMatch[2]);
linkElement.textContent = sanitizeHtml(anchorMatch[3]);
legalTextElement.appendChild(linkElement);
} else {
legalTextElement.appendChild(document.createTextNode(part));
}
});
}
function generateDropdownOptions(smsProgramData) {
if (!smsProgramData || smsProgramData.length === 0) {
return ”;
}
var programs = false
? smsProgramData.filter(function(p, i, arr) {
return arr.findIndex(function(q) { return q.countryCode === p.countryCode; }) === i;
})
: smsProgramData;
return programs.map(program => {
const flag = getCountryUnicodeFlag(program.countryCode);
const countryName = getCountryName(program.countryCode);
const callingCode = program.countryCallingCode || ”;
// Sanitize all values to prevent XSS
const sanitizedCountryCode = sanitizeHtml(program.countryCode || ”);
const sanitizedCountryName = sanitizeHtml(countryName || ”);
const sanitizedCallingCode = sanitizeHtml(callingCode || ”);
return ” + sanitizedCountryName + ‘ ‘ + sanitizedCallingCode + ”;
}).join(”);
}
function getCountryName(countryCode) {
if (window.MC?.smsPhoneData?.smsProgramDataCountryNames && Array.isArray(window.MC.smsPhoneData.smsProgramDataCountryNames)) {
for (let i = 0; i < window.MC.smsPhoneData.smsProgramDataCountryNames.length; i++) {
if (window.MC.smsPhoneData.smsProgramDataCountryNames[i].code === countryCode) {
return window.MC.smsPhoneData.smsProgramDataCountryNames[i].name;
}
}
}
return countryCode;
}
function getDefaultPlaceholder(countryCode) {
if (!countryCode || typeof countryCode !== 'string') {
return '+1 000 000 0000'; // Default US placeholder
}
var mockPlaceholders = [
{
countryCode: 'US',
placeholder: '+1 000 000 0000',
helpText: 'Include the US country code +1 before the phone number',
},
{
countryCode: 'GB',
placeholder: '+44 0000 000000',
helpText: 'Include the GB country code +44 before the phone number',
},
{
countryCode: 'CA',
placeholder: '+1 000 000 0000',
helpText: 'Include the CA country code +1 before the phone number',
},
{
countryCode: 'AU',
placeholder: '+61 000 000 000',
helpText: 'Include the AU country code +61 before the phone number',
},
{
countryCode: 'DE',
placeholder: '+49 000 0000000',
helpText: 'Fügen Sie vor der Telefonnummer die DE-Ländervorwahl +49 ein',
},
{
countryCode: 'FR',
placeholder: '+33 0 00 00 00 00',
helpText: 'Incluez le code pays FR +33 avant le numéro de téléphone',
},
{
countryCode: 'ES',
placeholder: '+34 000 000 000',
helpText: 'Incluya el código de país ES +34 antes del número de teléfono',
},
{
countryCode: 'NL',
placeholder: '+31 0 00000000',
helpText: 'Voeg de NL-landcode +31 toe vóór het telefoonnummer',
},
{
countryCode: 'BE',
placeholder: '+32 000 00 00 00',
helpText: 'Incluez le code pays BE +32 avant le numéro de téléphone',
},
{
countryCode: 'CH',
placeholder: '+41 00 000 00 00',
helpText: 'Fügen Sie vor der Telefonnummer die CH-Ländervorwahl +41 ein',
},
{
countryCode: 'AT',
placeholder: '+43 000 000 0000',
helpText: 'Fügen Sie vor der Telefonnummer die AT-Ländervorwahl +43 ein',
},
{
countryCode: 'IE',
placeholder: '+353 00 000 0000',
helpText: 'Include the IE country code +353 before the phone number',
},
{
countryCode: 'IT',
placeholder: '+39 000 000 0000',
helpText: 'Includere il prefisso internazionale IT +39 prima del numero di telefono',
},
];
const selectedPlaceholder = mockPlaceholders.find(function(item) {
return item && item.countryCode === countryCode;
});
return selectedPlaceholder ? selectedPlaceholder.placeholder : mockPlaceholders[0].placeholder;
}
function updatePlaceholder(countryCode, fieldName) {
if (!countryCode || !fieldName) {
return;
}
const phoneInput = document.querySelector('#mce-' + fieldName);
if (!phoneInput) {
return;
}
const placeholder = getDefaultPlaceholder(countryCode);
if (placeholder) {
phoneInput.placeholder = placeholder;
}
}
function updateCountryCodeInstruction(countryCode, fieldName) {
updatePlaceholder(countryCode, fieldName);
}
function getDefaultHelpText(countryCode) {
var mockPlaceholders = [
{
countryCode: 'US',
placeholder: '+1 000 000 0000',
helpText: 'Include the US country code +1 before the phone number',
},
{
countryCode: 'GB',
placeholder: '+44 0000 000000',
helpText: 'Include the GB country code +44 before the phone number',
},
{
countryCode: 'CA',
placeholder: '+1 000 000 0000',
helpText: 'Include the CA country code +1 before the phone number',
},
{
countryCode: 'AU',
placeholder: '+61 000 000 000',
helpText: 'Include the AU country code +61 before the phone number',
},
{
countryCode: 'DE',
placeholder: '+49 000 0000000',
helpText: 'Fügen Sie vor der Telefonnummer die DE-Ländervorwahl +49 ein',
},
{
countryCode: 'FR',
placeholder: '+33 0 00 00 00 00',
helpText: 'Incluez le code pays FR +33 avant le numéro de téléphone',
},
{
countryCode: 'ES',
placeholder: '+34 000 000 000',
helpText: 'Incluya el código de país ES +34 antes del número de teléfono',
},
{
countryCode: 'NL',
placeholder: '+31 0 00000000',
helpText: 'Voeg de NL-landcode +31 toe vóór het telefoonnummer',
},
{
countryCode: 'BE',
placeholder: '+32 000 00 00 00',
helpText: 'Incluez le code pays BE +32 avant le numéro de téléphone',
},
{
countryCode: 'CH',
placeholder: '+41 00 000 00 00',
helpText: 'Fügen Sie vor der Telefonnummer die CH-Ländervorwahl +41 ein',
},
{
countryCode: 'AT',
placeholder: '+43 000 000 0000',
helpText: 'Fügen Sie vor der Telefonnummer die AT-Ländervorwahl +43 ein',
},
{
countryCode: 'IE',
placeholder: '+353 00 000 0000',
helpText: 'Include the IE country code +353 before the phone number',
},
{
countryCode: 'IT',
placeholder: '+39 000 000 0000',
helpText: 'Includere il prefisso internazionale IT +39 prima del numero di telefono',
},
];
if (!countryCode || typeof countryCode !== 'string') {
return mockPlaceholders[0].helpText;
}
const selectedHelpText = mockPlaceholders.find(function(item) {
return item && item.countryCode === countryCode;
});
return selectedHelpText ? selectedHelpText.helpText : mockPlaceholders[0].helpText;
}
function setDefaultHelpText(countryCode) {
const helpTextSpan = document.querySelector('#help-text');
if (!helpTextSpan) {
return;
}
}
function updateHelpTextCountryCode(countryCode, fieldName) {
if (!countryCode || !fieldName) {
return;
}
setDefaultHelpText(countryCode);
}
function initializeSmsPhoneDropdown(fieldName) {
if (!fieldName || typeof fieldName !== 'string') {
return;
}
const dropdown = document.querySelector('#country-select-' + fieldName);
const displayFlag = document.querySelector('#flag-display-' + fieldName);
if (!dropdown || !displayFlag) {
return;
}
const smsPhoneData = window.MC?.smsPhoneData;
if (smsPhoneData && smsPhoneData.programs && Array.isArray(smsPhoneData.programs)) {
dropdown.innerHTML = generateDropdownOptions(smsPhoneData.programs);
}
const defaultProgram = getDefaultCountryProgram(smsPhoneData?.defaultCountryCode, smsPhoneData?.programs);
if (defaultProgram && defaultProgram.countryCode) {
dropdown.value = defaultProgram.countryCode;
const flagSpan = displayFlag?.querySelector('#flag-emoji-' + fieldName);
if (flagSpan) {
flagSpan.textContent = getCountryUnicodeFlag(defaultProgram.countryCode);
flagSpan.setAttribute('aria-label', sanitizeHtml(defaultProgram.countryCode) + ' flag');
}
updateSmsLegalText(defaultProgram.countryCode, fieldName);
updatePlaceholder(defaultProgram.countryCode, fieldName);
updateCountryCodeInstruction(defaultProgram.countryCode, fieldName);
}
var smsNotRequiredRemoveCountryCodeEnabled = true;
var smsField = Object.values({"EMAIL":{"name":"EMAIL","label":"Email Address","helper_text":"","type":"email","required":true,"audience_field_name":"Email Address","merge_id":0,"help_text_enabled":false,"enabled":true,"order":0,"field_type":"merge"},"FNAME":{"name":"FNAME","label":"First Name","helper_text":"","type":"text","required":false,"audience_field_name":"First Name","enabled":false,"order":null,"field_type":"merge","merge_id":1},"LNAME":{"name":"LNAME","label":"Last Name","helper_text":"","type":"text","required":false,"audience_field_name":"Last Name","enabled":false,"order":null,"field_type":"merge","merge_id":2},"ADDRESS":{"name":"ADDRESS","label":"Address","helper_text":"","type":"address","required":false,"audience_field_name":"Address","enabled":false,"order":null,"field_type":"merge","merge_id":3,"countries":{"2":"Albania","3":"Algeria","4":"Andorra","5":"Angola","6":"Argentina","7":"Armenia","8":"Australia","9":"Austria","10":"Azerbaijan","11":"Bahamas","12":"Bahrain","13":"Bangladesh","14":"Barbados","15":"Belarus","16":"Belgium","17":"Belize","18":"Benin","19":"Bermuda","20":"Bhutan","21":"Bolivia","22":"Bosnia and Herzegovina","23":"Botswana","24":"Brazil","25":"Bulgaria","26":"Burkina Faso","27":"Burundi","28":"Cambodia","29":"Cameroon","30":"Canada","31":"Cape Verde","32":"Cayman Islands","33":"Central African Republic","34":"Chad","35":"Chile","36":"China","37":"Colombia","38":"Congo","40":"Croatia","41":"Cyprus","42":"Czech Republic","43":"Denmark","44":"Djibouti","45":"Ecuador","46":"Egypt","47":"El Salvador","48":"Equatorial Guinea","49":"Eritrea","50":"Estonia","51":"Ethiopia","52":"Fiji","53":"Finland","54":"France","56":"Gabon","57":"Gambia","58":"Georgia","59":"Germany","60":"Ghana","61":"Greece","63":"Guinea","64":"Guinea-Bissau","65":"Guyana","66":"Honduras","67":"Hong Kong","68":"Hungary","69":"Iceland","70":"India","71":"Indonesia","74":"Ireland","75":"Israel","76":"Italy","78":"Japan","79":"Jordan","80":"Kazakhstan","81":"Kenya","82":"Kuwait","83":"Kyrgyzstan","84":"Lao People's Democratic Republic","85":"Latvia","86":"Lebanon","87":"Lesotho","88":"Liberia","90":"Liechtenstein","91":"Lithuania","92":"Luxembourg","93":"Macedonia","94":"Madagascar","95":"Malawi","96":"Malaysia","97":"Maldives","98":"Mali","99":"Malta","100":"Mauritania","101":"Mexico","102":"Moldova","103":"Monaco","104":"Mongolia","105":"Morocco","106":"Mozambique","107":"Namibia","108":"Nepal","109":"Netherlands","110":"Netherlands Antilles","111":"New Zealand","112":"Nicaragua","113":"Niger","114":"Nigeria","116":"Norway","117":"Oman","118":"Pakistan","119":"Panama","120":"Paraguay","121":"Peru","122":"Philippines","123":"Poland","124":"Portugal","126":"Qatar","127":"Reunion","128":"Romania","129":"Russia","130":"Rwanda","132":"Samoa (Independent)","133":"Saudi Arabia","134":"Senegal","135":"Seychelles","136":"Sierra Leone","137":"Singapore","138":"Slovakia","139":"Slovenia","140":"Somalia","141":"South Africa","142":"South Korea","143":"Spain","144":"Sri Lanka","146":"Suriname","147":"Swaziland","148":"Sweden","149":"Switzerland","152":"Taiwan","153":"Tanzania","154":"Thailand","155":"Togo","156":"Tunisia","157":"Turkiye","158":"Turkmenistan","159":"Uganda","161":"Ukraine","162":"United Arab Emirates","163":"Uruguay","164":"USA","165":"Uzbekistan","166":"Vatican City State (Holy See)","167":"Venezuela","168":"Vietnam","169":"Virgin Islands (British)","170":"Yemen","173":"Zambia","174":"Zimbabwe","175":"Antigua And Barbuda","176":"Anguilla","179":"Aruba","180":"Brunei Darussalam","181":"Bouvet Island","183":"Cook Islands","185":"Christmas Island","187":"Dominican Republic","188":"Western Sahara","189":"Falkland Islands","191":"Faroe Islands","192":"Grenada","193":"French Guiana","194":"Gibraltar","195":"Greenland","196":"Guadeloupe","198":"Guatemala","200":"Haiti","202":"Jamaica","203":"Kiribati","204":"Comoros","205":"Saint Kitts and Nevis","206":"Saint Lucia","207":"Marshall Islands","208":"Macau","210":"Martinique","212":"Mauritius","213":"New Caledonia","214":"Norfolk Island","215":"Nauru","217":"Niue","219":"Papua New Guinea","221":"Pitcairn","222":"Palau","223":"Solomon Islands","225":"Svalbard and Jan Mayen Islands","227":"San Marino","232":"Tonga","233":"Timor-Leste","234":"Trinidad and Tobago","235":"Tuvalu","237":"Saint Vincent and the Grenadines","239":"Vanuatu","241":"Mayotte","242":"Myanmar","255":"Sao Tome and Principe","257":"South Georgia and the South Sandwich Islands","260":"Tajikistan","262":"United Kingdom","268":"Costa Rica","270":"Guernsey","272":"North Korea","274":"Afghanistan","275":"Cote D'Ivoire","276":"Cuba","277":"French Polynesia","278":"Iran","279":"Iraq","281":"Libya","282":"Palestine","285":"Syria","286":"Aaland Islands","287":"Turks & Caicos Islands","288":"Jersey (Channel Islands)","289":"Dominica","290":"Montenegro","293":"Sudan","294":"Montserrat","298":"Curacao","302":"Sint Maarten","311":"South Sudan","315":"Republic of Kosovo","318":"Congo, Democratic Republic of the","323":"Isle of Man","324":"Saint Martin","325":"Bonaire, Saint Eustatius and Saba","326":"Serbia","327":"Saint Barthelemy"},"defaultcountry":164},"PHONE":{"name":"PHONE","label":"Phone Number","helper_text":"","type":"phone","required":false,"audience_field_name":"Phone Number","phoneformat":"","enabled":false,"order":null,"field_type":"merge","merge_id":4},"MMERGE5":{"name":"MMERGE5","label":"Contributor Pitch","helper_text":"","type":"text","required":false,"audience_field_name":"Contributor Pitch","enabled":false,"order":null,"field_type":"merge","merge_id":5},"MMERGE6":{"name":"MMERGE6","label":"Business Name","helper_text":"","type":"text","required":false,"audience_field_name":"Business Name","enabled":false,"order":null,"field_type":"merge","merge_id":6}}).find(function(f) { return f.name === fieldName && f.type === 'smsphone'; });
var isRequired = smsField ? smsField.required : false;
var shouldAppendCountryCode = smsNotRequiredRemoveCountryCodeEnabled ? isRequired : true;
var phoneInput = document.querySelector('#mce-' + fieldName);
if (phoneInput && defaultProgram.countryCallingCode && shouldAppendCountryCode) {
phoneInput.value = defaultProgram.countryCallingCode;
}
displayFlag?.addEventListener('click', function(e) {
dropdown.focus();
});
dropdown?.addEventListener('change', function() {
const selectedCountry = this.value;
if (!selectedCountry || typeof selectedCountry !== 'string') {
return;
}
const flagSpan = displayFlag?.querySelector('#flag-emoji-' + fieldName);
if (flagSpan) {
flagSpan.textContent = getCountryUnicodeFlag(selectedCountry);
flagSpan.setAttribute('aria-label', sanitizeHtml(selectedCountry) + ' flag');
}
const selectedProgram = window.MC?.smsPhoneData?.programs.find(function(program) {
return program && program.countryCode === selectedCountry;
});
var smsNotRequiredRemoveCountryCodeEnabled = true;
var smsField = Object.values({"EMAIL":{"name":"EMAIL","label":"Email Address","helper_text":"","type":"email","required":true,"audience_field_name":"Email Address","merge_id":0,"help_text_enabled":false,"enabled":true,"order":0,"field_type":"merge"},"FNAME":{"name":"FNAME","label":"First Name","helper_text":"","type":"text","required":false,"audience_field_name":"First Name","enabled":false,"order":null,"field_type":"merge","merge_id":1},"LNAME":{"name":"LNAME","label":"Last Name","helper_text":"","type":"text","required":false,"audience_field_name":"Last Name","enabled":false,"order":null,"field_type":"merge","merge_id":2},"ADDRESS":{"name":"ADDRESS","label":"Address","helper_text":"","type":"address","required":false,"audience_field_name":"Address","enabled":false,"order":null,"field_type":"merge","merge_id":3,"countries":{"2":"Albania","3":"Algeria","4":"Andorra","5":"Angola","6":"Argentina","7":"Armenia","8":"Australia","9":"Austria","10":"Azerbaijan","11":"Bahamas","12":"Bahrain","13":"Bangladesh","14":"Barbados","15":"Belarus","16":"Belgium","17":"Belize","18":"Benin","19":"Bermuda","20":"Bhutan","21":"Bolivia","22":"Bosnia and Herzegovina","23":"Botswana","24":"Brazil","25":"Bulgaria","26":"Burkina Faso","27":"Burundi","28":"Cambodia","29":"Cameroon","30":"Canada","31":"Cape Verde","32":"Cayman Islands","33":"Central African Republic","34":"Chad","35":"Chile","36":"China","37":"Colombia","38":"Congo","40":"Croatia","41":"Cyprus","42":"Czech Republic","43":"Denmark","44":"Djibouti","45":"Ecuador","46":"Egypt","47":"El Salvador","48":"Equatorial Guinea","49":"Eritrea","50":"Estonia","51":"Ethiopia","52":"Fiji","53":"Finland","54":"France","56":"Gabon","57":"Gambia","58":"Georgia","59":"Germany","60":"Ghana","61":"Greece","63":"Guinea","64":"Guinea-Bissau","65":"Guyana","66":"Honduras","67":"Hong Kong","68":"Hungary","69":"Iceland","70":"India","71":"Indonesia","74":"Ireland","75":"Israel","76":"Italy","78":"Japan","79":"Jordan","80":"Kazakhstan","81":"Kenya","82":"Kuwait","83":"Kyrgyzstan","84":"Lao People's Democratic Republic","85":"Latvia","86":"Lebanon","87":"Lesotho","88":"Liberia","90":"Liechtenstein","91":"Lithuania","92":"Luxembourg","93":"Macedonia","94":"Madagascar","95":"Malawi","96":"Malaysia","97":"Maldives","98":"Mali","99":"Malta","100":"Mauritania","101":"Mexico","102":"Moldova","103":"Monaco","104":"Mongolia","105":"Morocco","106":"Mozambique","107":"Namibia","108":"Nepal","109":"Netherlands","110":"Netherlands Antilles","111":"New Zealand","112":"Nicaragua","113":"Niger","114":"Nigeria","116":"Norway","117":"Oman","118":"Pakistan","119":"Panama","120":"Paraguay","121":"Peru","122":"Philippines","123":"Poland","124":"Portugal","126":"Qatar","127":"Reunion","128":"Romania","129":"Russia","130":"Rwanda","132":"Samoa (Independent)","133":"Saudi Arabia","134":"Senegal","135":"Seychelles","136":"Sierra Leone","137":"Singapore","138":"Slovakia","139":"Slovenia","140":"Somalia","141":"South Africa","142":"South Korea","143":"Spain","144":"Sri Lanka","146":"Suriname","147":"Swaziland","148":"Sweden","149":"Switzerland","152":"Taiwan","153":"Tanzania","154":"Thailand","155":"Togo","156":"Tunisia","157":"Turkiye","158":"Turkmenistan","159":"Uganda","161":"Ukraine","162":"United Arab Emirates","163":"Uruguay","164":"USA","165":"Uzbekistan","166":"Vatican City State (Holy See)","167":"Venezuela","168":"Vietnam","169":"Virgin Islands (British)","170":"Yemen","173":"Zambia","174":"Zimbabwe","175":"Antigua And Barbuda","176":"Anguilla","179":"Aruba","180":"Brunei Darussalam","181":"Bouvet Island","183":"Cook Islands","185":"Christmas Island","187":"Dominican Republic","188":"Western Sahara","189":"Falkland Islands","191":"Faroe Islands","192":"Grenada","193":"French Guiana","194":"Gibraltar","195":"Greenland","196":"Guadeloupe","198":"Guatemala","200":"Haiti","202":"Jamaica","203":"Kiribati","204":"Comoros","205":"Saint Kitts and Nevis","206":"Saint Lucia","207":"Marshall Islands","208":"Macau","210":"Martinique","212":"Mauritius","213":"New Caledonia","214":"Norfolk Island","215":"Nauru","217":"Niue","219":"Papua New Guinea","221":"Pitcairn","222":"Palau","223":"Solomon Islands","225":"Svalbard and Jan Mayen Islands","227":"San Marino","232":"Tonga","233":"Timor-Leste","234":"Trinidad and Tobago","235":"Tuvalu","237":"Saint Vincent and the Grenadines","239":"Vanuatu","241":"Mayotte","242":"Myanmar","255":"Sao Tome and Principe","257":"South Georgia and the South Sandwich Islands","260":"Tajikistan","262":"United Kingdom","268":"Costa Rica","270":"Guernsey","272":"North Korea","274":"Afghanistan","275":"Cote D'Ivoire","276":"Cuba","277":"French Polynesia","278":"Iran","279":"Iraq","281":"Libya","282":"Palestine","285":"Syria","286":"Aaland Islands","287":"Turks & Caicos Islands","288":"Jersey (Channel Islands)","289":"Dominica","290":"Montenegro","293":"Sudan","294":"Montserrat","298":"Curacao","302":"Sint Maarten","311":"South Sudan","315":"Republic of Kosovo","318":"Congo, Democratic Republic of the","323":"Isle of Man","324":"Saint Martin","325":"Bonaire, Saint Eustatius and Saba","326":"Serbia","327":"Saint Barthelemy"},"defaultcountry":164},"PHONE":{"name":"PHONE","label":"Phone Number","helper_text":"","type":"phone","required":false,"audience_field_name":"Phone Number","phoneformat":"","enabled":false,"order":null,"field_type":"merge","merge_id":4},"MMERGE5":{"name":"MMERGE5","label":"Contributor Pitch","helper_text":"","type":"text","required":false,"audience_field_name":"Contributor Pitch","enabled":false,"order":null,"field_type":"merge","merge_id":5},"MMERGE6":{"name":"MMERGE6","label":"Business Name","helper_text":"","type":"text","required":false,"audience_field_name":"Business Name","enabled":false,"order":null,"field_type":"merge","merge_id":6}}).find(function(f) { return f.name === fieldName && f.type === 'smsphone'; });
var isRequired = smsField ? smsField.required : false;
var shouldAppendCountryCode = smsNotRequiredRemoveCountryCodeEnabled ? isRequired : true;
var phoneInput = document.querySelector('#mce-' + fieldName);
if (phoneInput && selectedProgram.countryCallingCode && shouldAppendCountryCode) {
phoneInput.value = selectedProgram.countryCallingCode;
}
updateSmsLegalText(selectedCountry, fieldName);
updatePlaceholder(selectedCountry, fieldName);
updateCountryCodeInstruction(selectedCountry, fieldName);
});
}
document.addEventListener('DOMContentLoaded', function() {
const smsPhoneFields = document.querySelectorAll('[id^="country-select-"]');
smsPhoneFields.forEach(function(dropdown) {
const fieldName = dropdown?.id.replace('country-select-', '');
initializeSmsPhoneDropdown(fieldName);
});
});
Product/Market Fit Expires
Product-market fit isn’t something you achieve once and keep forever. In the AI era, it expires roughly every 90 days.
Companies like Lovable illustrate how quickly customer expectations can evolve in the AI era. The app builder crossed $200M in revenue in its first year, yet Elena Verna, who runs growth there, says the team has to win its fit back every single quarter — each new wave of model capability resets what customers expect.
This works when your market shifts gradually and predictably. It breaks down when a technology leap makes your entire category irrelevant overnight — ask Chegg, which went from a $14B market cap to $191M after ChatGPT replaced its core service.
Customer jobs aren’t static. The job your customer hired you for six months ago may not be the job they need solved today. Segment selection isn’t a one-time decision. It’s a continuous sensing process.
So where does this leave you? With a decision to make — ideally before Monday.
Three Questions for Tomorrow Morning
Before you open your project management tool, ask yourself:
- Can you name the specific job your product is hired to do? Not the feature. Not the category. The actual job — the problem your customer is trying to solve when they choose you.
- Is that the highest-value job available to you? Or is it just the one you stumbled into? A more profitable segment with a more urgent job may sit right next door.
- When did you last check whether the answer still holds? If it’s been more than 90 days, your fit may already be expiring.
Get those three answers right, and the roadmap writes itself. Get them wrong, and no amount of execution will save you.
Before your next sprint planning session or roadmap meeting, take time to revisit the customer job you’re solving. Markets evolve, customer expectations change, and product-market fit isn’t permanent. The startups that continue winning aren’t always the ones that build the fastest. They’re the ones that continually make better strategic decisions about who they serve and what problems they’re solving.
Image by pch.vector on Magnific
The post Product-Market Fit Expires Every 90 Days. Here’s What to Do About It. appeared first on StartupNation.
