<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Michael Inghilterra</title>
    <description>The latest articles on DEV Community by Michael Inghilterra (@michael_inghilterra).</description>
    <link>https://dev.to/michael_inghilterra</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4080397%2Fba842581-85a2-48d0-b6b4-088b686e99ee.jpg</url>
      <title>DEV Community: Michael Inghilterra</title>
      <link>https://dev.to/michael_inghilterra</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/michael_inghilterra"/>
    <language>en</language>
    <item>
      <title>Activity Is Not the Outcome</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Fri, 25 Sep 2026 16:21:39 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/activity-is-not-the-outcome-4p5i</link>
      <guid>https://dev.to/michael_inghilterra/activity-is-not-the-outcome-4p5i</guid>
      <description>&lt;p&gt;Most sales development teams manage the wrong number. They manage activity, dials, emails, touches, because activity is easy to count and easy to demand. But activity is an input, not an outcome, and confusing the two is how you end up with a team that is very busy and a pipeline that is very thin.&lt;/p&gt;

&lt;p&gt;I led sales development for about seven years, and the trap caught me early. When results are soft, the reflex is to turn up the volume: more calls, more sequences, more activity on the board. Sometimes it works, because you were under the minimum. Usually it does not, because volume was never the constraint. The constraint was that the activity was not the kind that leads anywhere. You cannot fix a quality problem by adding quantity, and a dial count will never tell you which one you have.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why activity became the default metric
&lt;/h2&gt;

&lt;p&gt;Activity metrics win by default for a simple reason: they are the easiest thing in the whole funnel to measure. A dial is a fact. An email sent is a fact. You can put them on a dashboard by lunchtime and hold a standup around them tomorrow.&lt;/p&gt;

&lt;p&gt;Outcomes are harder. A qualified meeting that becomes real pipeline is the thing you actually want, but it lags, it depends on the AE's judgment, and it is messier to attribute. So teams quietly substitute the easy proxy for the hard truth and manage the proxy. The dashboard fills with green, the standups have numbers to discuss, and everyone feels productive, whether or not any of it is producing.&lt;/p&gt;

&lt;p&gt;That is the reporting failure underneath the activity trap. A dashboard that does not change a decision is decoration, and a dashboard full of dial counts usually changes nothing except how guilty a rep feels. It measures effort, not effect.&lt;/p&gt;

&lt;h2&gt;
  
  
  Find the leading indicators that actually predict pipeline
&lt;/h2&gt;

&lt;p&gt;The fix is not to throw activity metrics away. It is to find the specific activities that actually predict qualified pipeline for your motion, and manage those instead of raw volume.&lt;/p&gt;

&lt;p&gt;This is an analysis, not a guess. Look back at the meetings that became real, qualified pipeline, and work backwards. What did the reps who sourced them actually do differently? It is almost never "made more dials." It is usually something more specific: multi-threading into more than one contact at an account, personalizing the first touch off a real trigger, reaching a particular seniority of title, following up a precise number of times before giving up. Those are the leading indicators worth their name, because they have a real relationship to the outcome, not just a place on a spreadsheet.&lt;/p&gt;

&lt;p&gt;Once you know them, you can coach and measure them. "Multi-thread every target account within the first week" is a behavior that predicts pipeline. "Make 60 dials" is a behavior that predicts fatigue. One of those belongs on the scorecard.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build the scorecard around effect, not effort
&lt;/h2&gt;

&lt;p&gt;So the SDR scorecard I want has almost no raw activity on it. It has the handful of leading indicators that actually correlate to qualified pipeline, plus the outcome itself. Activity is still visible underneath, as a diagnostic when something looks off, but it is not the thing the team is managed to.&lt;/p&gt;

&lt;p&gt;That change does two things at once. It points rep effort at the behaviors that work instead of the behaviors that are easy to count, and it makes the reporting honest, because now the top-line number on the board is one that actually moves the business. When a rep is behind, the conversation is about which predictive behavior is missing, not about why their dial count dipped on Tuesday.&lt;/p&gt;

&lt;p&gt;The point is not that effort does not matter. Of course it does. The point is that effort pointed at the wrong activity is just noise you paid for, and the only way to tell the difference is to measure the activities that predict the outcome, not the activities that are easy to see. Manage the outcome, coach the leading indicators, and let the dial count go back to being what it always was: a diagnostic, not a destination.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I led sales development for about seven years, and I write about measuring revenue teams by what actually predicts the number. I also run a productized &lt;a href="https://michaelinghilterra.com/audit" rel="noopener noreferrer"&gt;Revenue Engine Audit&lt;/a&gt; for leaders who want their reporting to drive decisions instead of just displaying activity.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>sdr</category>
      <category>analytics</category>
      <category>data</category>
    </item>
    <item>
      <title>Six Regions, Six Definitions of Pipeline</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Thu, 17 Sep 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/six-regions-six-definitions-of-pipeline-1gaa</link>
      <guid>https://dev.to/michael_inghilterra/six-regions-six-definitions-of-pipeline-1gaa</guid>
      <description>&lt;p&gt;The most expensive meeting in a lot of companies is the one where leadership argues about whose number is right. Not what to do about the number. Whose number is even real. I have sat in that meeting more than once, and it almost always traces back to a single unglamorous cause: the regions are each computing the basics differently, so nobody is comparing the same thing.&lt;/p&gt;

&lt;p&gt;Six regions, six definitions of "pipeline." One counts everything with a dollar amount. One counts only deals past a qualification stage. One includes renewals, one does not. One dates by created, one by expected close. Each definition is defensible on its own. Together they guarantee that when the six roll up, the total means nothing, and everyone in the room can feel it even if they cannot name it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The tell is the argument itself
&lt;/h2&gt;

&lt;p&gt;You know you have this problem when the forecast call runs long and generates heat instead of decisions. People are not really disagreeing about the business. They are silently using different definitions and talking past each other, each certain their own report is the honest one.&lt;/p&gt;

&lt;p&gt;That is the quiet cost. Not just wasted meeting time, though there is plenty of that. It is that leadership stops trusting any of the numbers, because they have learned the numbers do not reconcile. And once the forecast is not trusted, every downstream decision gets slower and more political, because it has to survive a debate about the data before it can even be a debate about the choice.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is upstream of everything
&lt;/h2&gt;

&lt;p&gt;This is what I look for when a team tells me their reporting does not drive action or their forecast is not believed. Usually the reporting is fine and the forecast math is fine. The definitions underneath them are not shared. You cannot build trusted reporting on top of metrics that mean six different things, any more than you can average six currencies without agreeing on an exchange rate.&lt;/p&gt;

&lt;p&gt;It also compounds. Every new dashboard, every new region, every new leader inherits the ambiguity and often adds a seventh definition trying to fix it. The drift is not malicious. It is what happens when definitions live in people's heads instead of in one governed place.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one-page fix
&lt;/h2&gt;

&lt;p&gt;The good news is that the highest-leverage move here is also one of the cheapest in all of revenue operations: a metrics dictionary. One page. One canonical definition per metric. Open pipeline, forecast categories, activity, win rate, conversion, stage meanings, each defined once, owned by someone, and used everywhere.&lt;/p&gt;

&lt;p&gt;It sounds too simple to matter. It matters more than almost anything else you can do in a quarter, because it removes the argument at its source. When everyone computes open pipeline the same way, the forecast call stops being a definitions fight and becomes an actual conversation about the business. The dictionary does not need a platform or a project. It needs a decision and an owner.&lt;/p&gt;

&lt;p&gt;The foundational version, once the dictionary exists, is to push those definitions down into the systems themselves, a governed semantic layer so every report draws from the same source instead of each analyst rebuilding the logic their own way. But that is the upgrade. The dictionary is the fix, and you can start it this week.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changes when the number means one thing
&lt;/h2&gt;

&lt;p&gt;When there is one definition per metric, the reconciliation cycles disappear. The regions roll up to a total that actually means something. Leadership argues about the business instead of the data. And the forecast becomes something people are willing to stand behind, because for the first time they are all standing on the same ground.&lt;/p&gt;

&lt;p&gt;If your forecast meeting is long and hot and never quite lands, listen for the tell. It is probably not a disagreement about strategy. It is six definitions in a room pretending to be one.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I write about making revenue operations legible, and I run a productized &lt;a href="https://michaelinghilterra.com/" rel="noopener noreferrer"&gt;Revenue Engine Audit&lt;/a&gt; that scores single-source-of-truth alongside four other dimensions. A metrics dictionary is usually the first thing I hand a client.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Coach Your SDRs Like Market Detectives</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Tue, 15 Sep 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/coach-your-sdrs-like-market-detectives-6nj</link>
      <guid>https://dev.to/michael_inghilterra/coach-your-sdrs-like-market-detectives-6nj</guid>
      <description>&lt;p&gt;The best sales development rep I ever managed was not the smoothest talker on the team. She was the most curious. Before a call she knew why the account might be in pain, what had changed there recently, and who actually felt it. She did not open with a pitch. She opened with a question that told the prospect she had already been paying attention. Her meetings booked at a rate the polished talkers could not touch, and the meetings she booked were real.&lt;/p&gt;

&lt;p&gt;That is when it clicked for me: the job of an SDR is not to talk. It is to investigate. And if you coach them as dialers, you get dialing. If you coach them as detectives, you get intelligence, and intelligence is what actually moves a deal. Here is what coaching for that looks like.&lt;/p&gt;

&lt;h2&gt;
  
  
  Detectives build a theory before they knock
&lt;/h2&gt;

&lt;p&gt;A dialer starts with a list and a script. A detective starts with a theory of the case: given what I can see about this account, here is why they might have this problem right now, and here is who would feel it.&lt;/p&gt;

&lt;p&gt;Coaching that theory is a specific habit. Before the reps ever touch the phones, I have them answer three questions about an account out loud. What changed here recently that could create the pain we solve. Who in this org lives with that pain day to day. What would I expect to be true if my theory is right. It takes minutes and it transforms the call, because now the rep is testing a hypothesis instead of reciting a pitch, and prospects can feel the difference immediately. One is a stranger reading a script. The other is someone who did their homework.&lt;/p&gt;

&lt;h2&gt;
  
  
  The evidence is in the objection under the objection
&lt;/h2&gt;

&lt;p&gt;Detectives listen for what does not fit. When a prospect says "we're all set" or "not right now," a dialer hears a wall and moves on. A detective hears a clue and gets curious about it, because the stated objection is almost never the real one.&lt;/p&gt;

&lt;p&gt;So I coach reps to treat objections as evidence, not endings. "We're all set" often means "I don't yet see why this is worth my time," which is a completely different problem to solve. The skill is the gentle follow-up that surfaces the objection under the objection, and it is entirely coachable. On call reviews I am not listening for whether the rep overcame the objection. I am listening for whether they got curious about it. The ones who investigate the pushback instead of steamrolling it are the ones who find the real deal hiding behind the reflex.&lt;/p&gt;

&lt;h2&gt;
  
  
  Call review is the crime scene
&lt;/h2&gt;

&lt;p&gt;Coaching detectives happens on the tape. A skill ladder tells a rep what to get good at; call review is where they actually get good at it, because it is specific and it repeats. Generic feedback like "sound more confident" changes nothing. "Right here, she gave you a reason and you moved past it, what do you think she actually meant" changes everything, because it is a concrete moment attached to a concrete skill.&lt;/p&gt;

&lt;p&gt;The discipline is reviewing the same competency repeatedly until it holds, rather than spraying a dozen tips across one call. Pick the one investigative move the rep is missing this week, find three examples of it in their calls, and work only that. Depth beats breadth. A rep who truly internalizes one detective skill a month is transformed in a quarter. A rep who gets a scattershot of tips every week is just being talked at.&lt;/p&gt;

&lt;h2&gt;
  
  
  Intelligence is the real output
&lt;/h2&gt;

&lt;p&gt;Here is why this matters beyond the SDR seat. When you coach reps as detectives, their output is not just meetings. It is intelligence: why this account is in pain, who the economic buyer really is, what the buying process looks like, what the competition is doing. That intelligence rides along into the AE's hands and makes the whole deal better qualified from the first real conversation.&lt;/p&gt;

&lt;p&gt;A dialer hands off a name and a calendar invite. A detective hands off a case file. One of those makes the AE's job harder and one makes it easier, and over a year the difference in what actually closes is enormous. The meetings look similar on a dashboard. What is underneath them is not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Curiosity is a hiring and coaching signal
&lt;/h2&gt;

&lt;p&gt;If investigation is the job, then curiosity is the trait to hire for and the skill to coach. In interviews I care less about polish and more about whether a candidate gets genuinely interested in a problem they cannot immediately solve. On the team, I reward the rep who brings back a sharp insight about an account over the rep who simply hit their dial count, because the insight is the leading indicator of the pipeline I actually want.&lt;/p&gt;

&lt;p&gt;Sales development got a reputation as a volume game because too many teams coached it as one. The teams doing it well have quietly moved on. They are not building dialers. They are building detectives, and the intelligence those reps generate is worth far more than the noise the old model mistook for productivity.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I led sales development for about seven years, and I write about coaching revenue teams that produce intelligence, not just activity. I also run a productized &lt;a href="https://michaelinghilterra.com/" rel="noopener noreferrer"&gt;Revenue Engine Audit&lt;/a&gt; for leaders who want the pipeline those teams feed to be as rigorous as the reps filling it.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>A Dashboard That Doesn't Change a Decision Is Decoration</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Sat, 12 Sep 2026 21:26:02 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/a-dashboard-that-doesnt-change-a-decision-is-decoration-3039</link>
      <guid>https://dev.to/michael_inghilterra/a-dashboard-that-doesnt-change-a-decision-is-decoration-3039</guid>
      <description>&lt;p&gt;Here is the line I keep coming back to after years of building reporting for revenue teams: a dashboard that does not change a decision is decoration. It can be beautiful, real-time, and technically flawless, and still be worthless, because the job of a report is not to display data. It is to change what someone does next.&lt;/p&gt;

&lt;p&gt;Most reporting fails this test quietly. It shows the number, colors it green or red, and stops. The viewer nods, feels informed, and does exactly what they were going to do anyway. That is not reporting. That is a very expensive way to feel busy.&lt;/p&gt;

&lt;h2&gt;
  
  
  The two-question test
&lt;/h2&gt;

&lt;p&gt;I judge every chart, tile, and dashboard by two questions the viewer should be able to answer in one breath: why does this matter, and what do I do about it?&lt;/p&gt;

&lt;p&gt;If a sales leader looks at a tile and cannot say why it matters, the tile is noise. If they can say why it matters but not what to do differently, the tile is trivia. Only when both answers are obvious does the report earn its place, because only then does it have a path to changing behavior.&lt;/p&gt;

&lt;p&gt;Try it on your own dashboard. Walk across the top row of tiles and, for each one, force the two answers out loud. Most people get three or four tiles in before they hit one they cannot justify. That tile has been sitting there for a year, refreshing faithfully, changing nothing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Annotate for the decision, not the data
&lt;/h2&gt;

&lt;p&gt;The cheapest fix is also the one almost nobody does: annotate every executive-facing tile with one line of why-this-matters and one line of do-this.&lt;/p&gt;

&lt;p&gt;A number on its own outsources interpretation to the viewer, and different viewers interpret it differently, which is how a leadership meeting turns into an argument about what a chart means instead of a decision about what to do. A single annotation collapses that. "Win rate down 6 points this quarter, concentrated in deals without an identified economic buyer. Action: inspect commit-stage deals for buyer coverage before the forecast call." Now the chart is not showing data. It is proposing a move.&lt;/p&gt;

&lt;p&gt;This is a habit, not a platform. You can do it in whatever tool you already have. The discipline is refusing to ship a tile without stating the decision it serves.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adoption is the real metric of reporting
&lt;/h2&gt;

&lt;p&gt;The uncomfortable truth about most reporting suites is that a large share of the reports are never opened. Built once for someone who asked, shipped, and then quietly abandoned while they keep running in the background.&lt;/p&gt;

&lt;p&gt;Adoption, not volume, is the honest measure of a reporting function. The most-built, least-opened report in your company is not a feature. It is evidence that the reporting is optimizing for looking comprehensive instead of driving action. Killing a report nobody opens is not a loss. It is a cleanup, and it makes the reports that matter easier to find.&lt;/p&gt;

&lt;p&gt;So the second thing I look at, after the two-question test, is usage. What actually gets opened, by whom, before which meeting? The reports that survive that filter are the spine of the system. The rest is inventory.&lt;/p&gt;

&lt;h2&gt;
  
  
  What good looks like
&lt;/h2&gt;

&lt;p&gt;Reporting that drives action has a specific shape. Every view maps to a decision and a role. Every executive tile carries its why and its do. Thresholds and alerts surface the moments that need a response, instead of asking a human to notice a slow drift on a chart nobody is watching. And the suite is small, because the unused reports have been retired rather than left to rot.&lt;/p&gt;

&lt;p&gt;The payoff is not prettier dashboards. It is meetings that end in decisions instead of interpretation, signals caught while they still matter, and a reporting function people actually rely on because it has earned the trust. The measure of a report was never how much data it shows. It is whether anyone does anything differently because it exists.&lt;/p&gt;

&lt;p&gt;Start with the two questions. They are almost embarrassingly simple, and they will tell you, tile by tile, which of your reporting is working and which of it is decoration.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I write about making revenue operations legible, and I run a productized &lt;a href="https://michaelinghilterra.com/" rel="noopener noreferrer"&gt;Revenue Engine Audit&lt;/a&gt; that scores reporting alongside four other dimensions of a revenue engine. Reporting that changes behavior is one of the five.&lt;/em&gt;&lt;/p&gt;

</description>
    </item>
    <item>
      <title>You Can't Build an SDR Org by Throwing Bodies at It</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Tue, 08 Sep 2026 13:00:00 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/you-cant-build-an-sdr-org-by-throwing-bodies-at-it-365e</link>
      <guid>https://dev.to/michael_inghilterra/you-cant-build-an-sdr-org-by-throwing-bodies-at-it-365e</guid>
      <description>&lt;p&gt;Sales development is getting smaller. In the last year, 36 percent of B2B software companies reduced their SDR and BDR headcount, according to Emergence Capital's Beyond Benchmarks survey of more than 560 companies, reported by SaaStr. Most of that came not from layoffs but from open roles left unfilled. The high-volume, low-touch, throw-more-reps-at-it model is quietly being wound down.&lt;/p&gt;

&lt;p&gt;I spent about seven years leading sales development, and I think the shrinkage is mostly healthy, because the model that is dying deserved to. You could never actually build a durable SDR org by throwing bodies at it. You could inflate activity for a couple of quarters, but the moment hiring slowed the whole thing sagged, because the output was tied to headcount instead of design. What replaces it is smaller, more skilled, and built on purpose. Here is what that actually takes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Headcount was hiding the design problem
&lt;/h2&gt;

&lt;p&gt;When you can always hire another rep, you never have to fix the system. Ramp too slow? Hire ahead of it. Reps burning out at ten months? Backfill. Conversion mediocre? Add volume until the raw number of meetings looks fine. Every structural weakness has a headcount patch, so none of them ever get solved.&lt;/p&gt;

&lt;p&gt;Take the headcount lever away, which is exactly what this market has done, and the design problems surface all at once. Now the only way to grow output is to make each rep more effective, and that forces the questions a growing headcount let you avoid: why does ramp take this long, why do good reps leave at the same point, why does the same coaching not stick. Those were always the real questions. Cheap hiring just let you postpone them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ramp is a system, not an orientation
&lt;/h2&gt;

&lt;p&gt;The first place the design shows is ramp. Most teams treat onboarding as an event: a week of orientation, some certifications, then thrown onto the phones. Then they are surprised that reps take six months to get productive and some never really do.&lt;/p&gt;

&lt;p&gt;Ramp that works is a system, not an event. It is a defined path from day one to full productivity with checkpoints along the way, each one a specific competency a rep has to demonstrate before moving on. Not "attend the training" but "run a live discovery and here is what good looks like." The point of the checkpoints is that they make ramp legible: you can see where a rep is stuck instead of waiting six months to find out they never got past a step three weeks in. When you cannot hire your way around slow ramp, fixing ramp becomes the highest-leverage thing you do.&lt;/p&gt;

&lt;h2&gt;
  
  
  A skill ladder beats an activity quota
&lt;/h2&gt;

&lt;p&gt;The second place is how you define the job. The lazy version is an activity number: make the calls, send the emails, book the meetings. Activity quotas are easy to manage and they produce exactly what they measure, which is activity, not necessarily pipeline.&lt;/p&gt;

&lt;p&gt;A skill ladder is harder and far more durable. It defines the role as a progression of capabilities, research and account selection, opening a conversation, running discovery, handling the objection under the objection, qualifying honestly, and it makes advancement about climbing that ladder rather than hitting a dial count. Reps know what they are getting better at and why. It gives coaching something to attach to. And it turns the SDR seat into the start of a career instead of a burnout station people flee at month ten, which is the single biggest fix for the retention problem that quietly wrecks these teams.&lt;/p&gt;

&lt;h2&gt;
  
  
  Smaller teams need better coaching, not less
&lt;/h2&gt;

&lt;p&gt;Here is the trap in a shrinking model. Fewer reps can mean less coaching, because the manager is now covering more ground with less time. That is backwards. A smaller, more skilled team is more coachable and more worth coaching, because each rep matters more and the ceiling on each one is higher.&lt;/p&gt;

&lt;p&gt;The teams that come out of this period strong will be the ones that used a smaller headcount as a reason to coach deeper, not an excuse to coach less. Structured coaching against the skill ladder, real call review, specific and repeated, is what compounds a small team into a good one. You cannot buy that with headcount. You have to build it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Design is the moat now
&lt;/h2&gt;

&lt;p&gt;The companies cutting SDR headcount are not all making the same bet. Some are just cutting cost and hoping. The ones that win will be the ones that treat the smaller team as a forcing function to finally design the role well: a real ramp system, a skill ladder instead of an activity quota, and deeper coaching per rep.&lt;/p&gt;

&lt;p&gt;That was always the better way to build sales development. A hiring boom let a lot of teams skip it. The correction is making it mandatory again, and the teams that internalize it will be far harder to compete with than the ones that just had more bodies. You could never throw bodies at this and win for long. Now you cannot even pretend to.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I led sales development for about seven years, and I write about building revenue teams that hold up under pressure. I also run a productized &lt;a href="https://michaelinghilterra.com/audit" rel="noopener noreferrer"&gt;Revenue Engine Audit&lt;/a&gt; for revenue leaders who want the engine underneath the team to be as well-designed as the team itself.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>salesdevelopment</category>
      <category>data</category>
      <category>leadership</category>
    </item>
    <item>
      <title>The deals in your forecast that are quietly fiction</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Sat, 05 Sep 2026 18:28:17 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/the-deals-in-your-forecast-that-are-quietly-fiction-4j04</link>
      <guid>https://dev.to/michael_inghilterra/the-deals-in-your-forecast-that-are-quietly-fiction-4j04</guid>
      <description>&lt;h1&gt;
  
  
  The deals in your forecast that are quietly fiction
&lt;/h1&gt;

&lt;p&gt;Most forecasts miss for a boring reason. Not because the market turned or a big deal slipped, but because a share of the pipeline underneath the number was never real to begin with. The forecast was a hope with a number attached, and the number inherited every soft deal the hope was built on.&lt;/p&gt;

&lt;p&gt;I have spent my career in revenue operations, and pipeline quality is the dimension I check first, because it is usually the root cause of the two problems leaders complain about most: a forecast nobody trusts and reporting nobody acts on. You cannot report your way out of a pipeline that is not true. So before anyone touches the dashboard, I look at the deals themselves and ask a plain question about each one: is this real, or does it just have a stage and a dollar amount?&lt;/p&gt;

&lt;p&gt;Three kinds of fiction show up over and over. Here is how to spot each.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fiction one: fluff
&lt;/h2&gt;

&lt;p&gt;Fluff is the deal that is technically open and effectively dead. No recent activity. A close date that has already passed and quietly rolled forward again. Stuck in the same stage for a quarter while everyone politely looks away.&lt;/p&gt;

&lt;p&gt;Fluff is easy to find and easy to ignore, which is exactly why it accumulates. Nobody wants to be the one who marks their own deal closed-lost, so it sits, padding the pipeline coverage ratio and making the top of the funnel look healthier than it is. The tell is simple: sort by last-activity date and look at anything untouched in the last few weeks that is still counted as active. Most of it is not a deal. It is a deal-shaped placeholder.&lt;/p&gt;

&lt;p&gt;The fix is not a cleanup project every quarter. It is a rule: no activity in X days moves a deal to a review state automatically, and the rep either revives it with a real next step or lets it go. Clean once and it re-rots. Enforce at the edge and it stays honest.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fiction two: sandbagging
&lt;/h2&gt;

&lt;p&gt;Sandbagging is the opposite problem, and it is sneakier because it hides inside good news. It is the deal that is ready to close now but forecast two quarters out. The rep is protecting themselves, banking a deal they are confident in so next quarter starts with a cushion.&lt;/p&gt;

&lt;p&gt;I understand the human incentive. But treat it as a scheduling quirk and you miss what it actually is: a data-integrity problem and a culture signal. When your best deals are deliberately misdated, your forecast is wrong in both directions at once. This quarter looks light, next quarter looks padded, and neither picture is real. You end up managing to a calendar the reps privately know is fake.&lt;/p&gt;

&lt;p&gt;The tell is a deal with strong qualification, a champion, a paper process underway, and a close date that does not match any of that momentum. When the evidence says now and the date says later, the date is the thing to question. Naming it out loud, without punishing the rep, is usually enough to start straightening the dates out.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fiction three: the unqualified commit
&lt;/h2&gt;

&lt;p&gt;The third kind is the most expensive, because it looks the most legitimate. It is the deal sitting in commit or forecast with a confident number next to it and almost nothing underneath. No identified economic buyer. No understanding of how the customer actually buys. A champion who is really just a friendly contact with no power.&lt;/p&gt;

&lt;p&gt;This is where qualification earns its keep. You do not need a heavy framework to catch it, just the discipline to ask what is actually known. MEDDPICC is the shorthand I use, and the letters that matter most for a commit are the ones people skip: the Economic Buyer, the Decision Process, and the Paper Process. If a deal is forecast to close and nobody can name the person who signs, or describe the steps between a yes and a signature, that is not a commit. It is optimism with a due date.&lt;/p&gt;

&lt;p&gt;The single highest-leverage rule I have seen here is small: you cannot put a deal in commit without an economic buyer. Full stop. It sounds obvious. Watch how many deals fail it the first time you enforce it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this is the root cause, not a side issue
&lt;/h2&gt;

&lt;p&gt;Here is the part that makes pipeline quality worth fixing before anything else. The two problems everyone wants solved, a trusted forecast and reporting that drives decisions, both sit downstream of this. If the deals are fiction, the forecast built on them is fiction, and the dashboard on top is a very clean picture of something untrue. You can rebuild the reporting layer beautifully and still be wrong, because the error was underneath it the whole time.&lt;/p&gt;

&lt;p&gt;Fixing it is not glamorous. It is evidence gates on stage entry, so moving a deal forward requires something you can point to instead of a rep's feeling. It is honest dates. It is a weekly pipeline inspection that treats these three fictions as things to catch, not things to be polite about. Do that, and the forecast stops being a hope with a number attached and starts being a read on reality. Everything downstream gets easier, because it is finally standing on something true.&lt;/p&gt;

&lt;p&gt;The uncomfortable first step is admitting how much of the current number is one of these three. Most teams are surprised. The good news is that once you can see it, it is fixable, and the fix compounds.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I write about the systems that make revenue legible, and I run a productized &lt;a href="https://michaelinghilterra.com/audit" rel="noopener noreferrer"&gt;Revenue Engine Audit&lt;/a&gt; that scores this and four other dimensions of a revenue operation. If your forecast is not trusted, this is usually where it starts.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>revenue</category>
      <category>crm</category>
      <category>data</category>
    </item>
    <item>
      <title>What Tracking Every Job Application Actually Taught Me</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Tue, 01 Sep 2026 13:44:00 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/what-tracking-every-job-application-actually-taught-me-4841</link>
      <guid>https://dev.to/michael_inghilterra/what-tracking-every-job-application-actually-taught-me-4841</guid>
      <description>&lt;p&gt;Everyone has opinions about job searching. Apply to more. Apply to fewer. Follow up. Do not be annoying. Network harder. The advice cancels itself out, because almost none of it comes with numbers attached.&lt;/p&gt;

&lt;p&gt;I decided to keep the numbers. When I started my search, I tracked every role through real stages: scored for fit, applied, followed up, and whatever came back. A few weeks in, the data had opinions of its own, and some of them were not what I expected. Here is what it actually told me.&lt;/p&gt;

&lt;p&gt;A note before the numbers: I am keeping the raw figures private, partly because a single person's search is a small sample, and partly because the exact count matters less than the direction. What follows is honest about the direction and careful not to dress up a sample of one as a law of nature.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fewer applications, more responses
&lt;/h2&gt;

&lt;p&gt;The headline surprised me. &lt;strong&gt;I applied to about half as many roles as I used to, and I heard back more.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That runs against the loudest advice in job searching, which is essentially "apply to everything, it is a numbers game." For me, treating it as a pure numbers game was the problem. When I scored roles for fit and only put real effort into the strong matches, two things happened at once. I sent fewer applications, and a higher share of them turned into a response.&lt;/p&gt;

&lt;p&gt;Put those together and the improvement was not small. My reply rate roughly doubled once I cut the volume and raised the quality. Same person, same resume underneath, far less scattershot. The effort I used to spread across twenty mediocre-fit roles went into eight good ones, and the good ones answered.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow-ups were not optional
&lt;/h2&gt;

&lt;p&gt;The second lesson I would have argued with a few months ago.&lt;/p&gt;

&lt;p&gt;A meaningful share of my responses came only after a follow-up, not the first touch. Not a majority, but enough that if I had skipped following up, I would have simply never heard from those companies. Those responses would not have arrived later on their own. They would not have arrived at all.&lt;/p&gt;

&lt;p&gt;This is the part that is easy to talk yourself out of, because following up feels like nagging. The data did not care about my feelings. It just showed a stack of real conversations that started on the second contact, and none of them would exist if I had left it at "well, I applied."&lt;/p&gt;

&lt;p&gt;The catch is that follow-ups only work if they actually happen, and human memory is a terrible scheduler. Mine were reliable only once they were scheduled instead of remembered. That is a systems fix, not a willpower fix.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the responses actually came from
&lt;/h2&gt;

&lt;p&gt;The last lesson is the one I would tell every job seeker to check for themselves, because it changes where you spend your time.&lt;/p&gt;

&lt;p&gt;I tracked where each response originated: a warm intro or a referral on one side, a cold application into a portal on the other.&lt;/p&gt;

&lt;p&gt;Here is what I found: my warm reply rate ran about 2.8 times my cold reply rate. A referral or a real introduction was almost three times more likely to turn into a response than the same kind of role applied to cold, through a portal. And warm intros were the smaller share of what I sent, which makes the gap starker. The smaller pile produced the larger share of real conversations.&lt;/p&gt;

&lt;p&gt;Whatever the exact split, the lesson generalizes: the channel matters as much as the effort. An hour spent turning a cold application into a warm one, finding a real person to talk to, was worth more than an hour spent sending three more applications into the void. Once the data made that visible, I stopped treating all applications as equal work for equal reward, because they were not.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I would tell someone starting today
&lt;/h2&gt;

&lt;p&gt;None of this is a formula, and I want to be careful not to sell it as one. It is a sample of one person, in one field, over a stretch of weeks. But the direction was consistent enough that I trust it more than the generic advice it contradicts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Apply to fewer roles, chosen better. Volume is not the lever you think it is.&lt;/li&gt;
&lt;li&gt;Follow up, and schedule it so it actually happens. A real share of your responses is hiding behind a second contact you have not sent yet.&lt;/li&gt;
&lt;li&gt;Spend your time on the channel that answers. Turning cold into warm beats sending more cold.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The reason I could see any of this is that I tracked it. The search stopped being a fog of tabs and became something I could actually read. That, more than any single number, is the thing I would hand to anyone starting out: make your own search legible to yourself, and let your data argue with the advice.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;I built the tool I used to track all of this. It is called &lt;a href="https://michaelinghilterra.com/Trajecktory" rel="noopener noreferrer"&gt;trajecktory&lt;/a&gt;, it is open source, and the code is on &lt;a href="https://github.com/michaelinghilterra-creator/trajecktory" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;. I write about building it, and running my search with it, as I go.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>data</category>
      <category>productivity</category>
      <category>opensource</category>
    </item>
    <item>
      <title>I Built a System to Run My Job Search Like a Pipeline</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Sat, 29 Aug 2026 20:38:58 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/i-built-a-system-to-run-my-job-search-like-a-pipeline-54k6</link>
      <guid>https://dev.to/michael_inghilterra/i-built-a-system-to-run-my-job-search-like-a-pipeline-54k6</guid>
      <description>&lt;p&gt;Most job searches look the same from the inside: a dozen open browser tabs, a spreadsheet that was accurate for about four days, and a nagging feeling that something is slipping. Applications leak out the bottom. Follow-ups get forgotten. And after a few weeks of it, you have done a lot of work and learned almost nothing about what is actually working.&lt;/p&gt;

&lt;p&gt;I ran mine that way for a while. Then I stopped treating it as a to-do list and started treating it as a pipeline: named stages, a scoring step at the front, and a follow-up cadence that did not depend on my memory. That one shift changed how the whole search felt. Here is the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why a list fails you
&lt;/h2&gt;

&lt;p&gt;A to-do list is good at exactly one thing: telling you what to do next. That is also its limit.&lt;/p&gt;

&lt;p&gt;A list cannot tell you what is working. It has no stages, so you cannot see where things stall. Are you not getting responses because your applications are weak, or because you are aiming at the wrong roles, or because you never follow up? A list shrugs. It just shows you the next unchecked box.&lt;/p&gt;

&lt;p&gt;And because a list rewards volume, it quietly pushes you to apply more without ever asking whether applying more is the problem. You end up repeating the same misses faster.&lt;/p&gt;

&lt;p&gt;The reframe is simple. A job search is not a list of chores. It has stages, the same way a sales pipeline does. Naming those stages is the first thing that changes, because you cannot improve a step you cannot see.&lt;/p&gt;

&lt;h2&gt;
  
  
  The stages
&lt;/h2&gt;

&lt;p&gt;Here is the pipeline I settled on, in plain terms:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sourced.&lt;/strong&gt; A role you found and might go after, but have not evaluated yet.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Evaluated.&lt;/strong&gt; You have looked at it seriously and decided it is worth pursuing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Applied.&lt;/strong&gt; You are in.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Follow-up.&lt;/strong&gt; You have applied and the clock is running on a nudge.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Interview.&lt;/strong&gt; A human is talking to you.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offer.&lt;/strong&gt; The point of the whole thing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And then the ways a role ends, which matter more than people think:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;No response.&lt;/strong&gt; You applied and heard nothing back. Ghosted.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Closed.&lt;/strong&gt; The posting closed before you got a real shot at it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Discarded.&lt;/strong&gt; You decided it was not for you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here is the part that took me a while to appreciate. Not every dead end is the same, and if you lump them together you lie to yourself about your own numbers. A role that ghosted you is a very different signal than one that closed before you could act, which is different again from one you walked away from on purpose. When you separate them, you can finally see where you are actually losing, and fix that stage, instead of just applying harder at the top and hoping.&lt;/p&gt;

&lt;h2&gt;
  
  
  Scoring: spend your effort where it counts
&lt;/h2&gt;

&lt;p&gt;You cannot give forty roles your best cover letter. Anyone who tells you to "just customize every application" has never tried to do it forty times in a week. You have to choose, and the choosing is where a lot of searches quietly fall apart, because the loudest role (the one that just got posted, the one a friend mentioned) is not always the best fit.&lt;/p&gt;

&lt;p&gt;So I put a scoring step at the front. Each role gets a fit number based on what actually matters to me: the kind of work, the level, the things I will and will not compromise on. The strong matches get my real effort. The weak ones get a fast, guilt-free no.&lt;/p&gt;

&lt;p&gt;One nuance is worth calling out, because it is easy to get wrong. A single dealbreaker should cap the score no matter how good everything else looks. A role that is a 90 percent match on the work but requires relocating somewhere you cannot go is not a 90 percent match. It is a no with a nice paint job. Letting a hard constraint override the rest keeps the score honest, and keeps you from talking yourself into the wrong roles because the description was exciting.&lt;/p&gt;

&lt;p&gt;The payoff is not really about efficiency. It is about spending less time agonizing over where to put your energy, and more time actually putting it there.&lt;/p&gt;

&lt;h2&gt;
  
  
  Follow-ups: timing beats volume
&lt;/h2&gt;

&lt;p&gt;Most people handle follow-ups one of two ways. They never do it, or they do it too much. Both lose.&lt;/p&gt;

&lt;p&gt;The fix is to stop treating follow-ups as something you remember and start treating them as something that is scheduled. In my system, applying starts a clock. A little while later (for me, about a week of business days), the role surfaces itself and asks for a nudge. I do not have to hold it in my head, which is good, because the human head is where follow-ups go to die.&lt;/p&gt;

&lt;p&gt;The other thing that helped was drawing a clear line between warm and cold. A warm follow-up has a real person on the other end, someone you can actually reach. A cold one is a portal, a black hole, an address that will never write back. Those deserve different energy, and pretending a black-hole portal is a warm lead just wastes yours.&lt;/p&gt;

&lt;p&gt;And when something is not dead but not active either, I can mute it indefinitely without deleting it. "Done for now." That keeps the active list honest, which matters, because an active list full of zombies is just a to-do list again.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one number that told me the truth
&lt;/h2&gt;

&lt;p&gt;If I had to keep a single metric, it would be reply rate, but defined carefully.&lt;/p&gt;

&lt;p&gt;I count reply rate as the furthest stage a search ever reached, not wherever the role happens to sit today. A role that got to an interview and then went quiet still counts as a reply, because it was one. If I only looked at current status, that interview would eventually decay into "no response" and I would erase my own best signal.&lt;/p&gt;

&lt;p&gt;The honest denominator matters just as much. It is tempting to quietly drop the roles that ghosted you, because your numbers look better without them. But those are exactly the data points that teach you something. Count them. A reply rate that flatters you is worse than useless, because it tells you to keep doing the thing that is not working.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;I would love to tell you the system got me ten offers in a week. It did not, and that is not the point. What it did was less dramatic and more valuable: far less slipped through the cracks, I actually learned from the misses instead of repeating them, and the search got better over time because for the first time I could see it.&lt;/p&gt;

&lt;p&gt;A job search is stressful enough without also being invisible to the person running it. Giving it stages, a scoring step, and a cadence did not make the market easier. It made me a lot harder to knock off course.&lt;/p&gt;

&lt;p&gt;I built this into a tool called &lt;a href="https://github.com/michaelinghilterra-creator/trajecktory" rel="noopener noreferrer"&gt;trajecktory&lt;/a&gt; because I wanted it for myself. It is open source, and I write about building it as I go. If any of this sounds like the mess you are currently living in, the code is there to look at, or just steal the idea and run it in a spreadsheet. The system is the part that matters, not the software.&lt;/p&gt;

</description>
      <category>career</category>
      <category>productivity</category>
      <category>opensource</category>
      <category>buildinpublic</category>
    </item>
    <item>
      <title>Relaunching my career by building the tool I needed</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Fri, 21 Aug 2026 20:22:06 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/relaunching-my-career-by-building-the-tool-i-needed-455h</link>
      <guid>https://dev.to/michael_inghilterra/relaunching-my-career-by-building-the-tool-i-needed-455h</guid>
      <description>&lt;p&gt;There is a particular kind of quiet that comes with a career relaunch. The calendar empties out. The feedback loop you were used to, the one where work tells you every day whether you are doing well, goes silent. And you are left with a search that feels less like a plan and more like shouting into a well.&lt;/p&gt;

&lt;p&gt;I know that quiet. On the last day of 2025 I left one of the largest cybersecurity software companies in the world, having owned reporting for the better part of a billion dollars in revenue, and woke up on January 1 with none of it. No title, no team, no dashboard to hide behind. Those first weeks felt less like a job search and more like re-learning who I was without a title in front of my name.&lt;/p&gt;

&lt;p&gt;What I want to write about is not the hard part. It is what I did with it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The search itself felt broken
&lt;/h2&gt;

&lt;p&gt;The first thing I noticed, once I actually started applying, was how bad the tools were. Not the job boards. The part where you, one person, try to run a serious search across dozens of roles, keep track of who said what, remember to follow up, and learn anything at all from the whole exercise.&lt;/p&gt;

&lt;p&gt;That part is a spreadsheet and a prayer. And the spreadsheet loses.&lt;/p&gt;

&lt;p&gt;I have spent my career in revenue operations and analytics. Making messy, high-stakes processes legible is the actual job: take something people are running on instinct and memory, and give it stages, numbers, and a follow-up cadence so nothing important falls through. So it bothered me, more than it should have, that the most important process I had ever run for myself was the least organized.&lt;/p&gt;

&lt;h2&gt;
  
  
  I decided to build instead of just apply
&lt;/h2&gt;

&lt;p&gt;At some point the frustration turned into a question I could not put down: what would it look like to run my job search the way I would run a real pipeline?&lt;/p&gt;

&lt;p&gt;So I started building it. A way to score roles for fit so I spent my best effort where it counted. A way to track every application through real stages instead of a color-coded mess. A follow-up system that did not depend on me remembering. The tool I wished someone had handed me on day one.&lt;/p&gt;

&lt;p&gt;I called it &lt;a href="https://michaelinghilterra.com/Trajecktory" rel="noopener noreferrer"&gt;trajecktory&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I will be honest about why this helped, because it is not only the obvious reason. Yes, it made the search more organized. But the bigger thing was this: building it gave me back the feedback loop I had lost. On the days when no recruiter wrote back, when the search gave me nothing, the work still gave me something. A problem to solve. A thing that was a little better at the end of the day than it was at the start. That mattered more than I expected.&lt;/p&gt;

&lt;h2&gt;
  
  
  What building it taught me that applying alone would not have
&lt;/h2&gt;

&lt;p&gt;A job search can make you feel like a candidate, a line in someone else's inbox, a yes or a no. Building something pushed back on that. It reminded me, daily, that I am a person who makes things, not just a person waiting to be chosen.&lt;/p&gt;

&lt;p&gt;It also turned out to be the best interview material I have. When someone asks what I have been working on, I do not have to reach for a careful non-answer. I built a tool, I open-sourced it, I use it every day, and I can walk you through exactly why I made the choices I made. That is a very different conversation than explaining a gap. It is a demonstration instead of an explanation.&lt;/p&gt;

&lt;p&gt;And there is a quieter lesson underneath all of it. The instinct that made me good at my work, taking something chaotic and giving it structure, was still there the whole time. The relaunch did not take it away. I just had to point it at my own situation for once.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where it stands
&lt;/h2&gt;

&lt;p&gt;trajecktory is open source and still evolving. So am I: still searching, still adding to it, still learning from what works and what does not. This is not written from the far side of the story with everything figured out. It comes from the middle, which is where most of us actually are.&lt;/p&gt;

&lt;p&gt;If you are in your own version of that quiet right now, here is the one thing I would pass along: find the piece of the problem where your instincts still work, and start there. It will not fix the market. It will not make the search short. But it will remind you who you are while you wait for the market to catch up, and some days that is the whole game.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;If any of this resonates, I would genuinely like to hear from you. You can connect with me on &lt;a href="https://www.linkedin.com/in/michaelinghilterra" rel="noopener noreferrer"&gt;LinkedIn&lt;/a&gt;, follow the build as it goes, or look at the code on &lt;a href="https://github.com/michaelinghilterra-creator/trajecktory" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>career</category>
      <category>buildinpublic</category>
      <category>jobsearch</category>
      <category>productivity</category>
    </item>
    <item>
      <title>The invisible characters hiding in your AI-written text</title>
      <dc:creator>Michael Inghilterra</dc:creator>
      <pubDate>Sun, 16 Aug 2026 17:44:45 +0000</pubDate>
      <link>https://dev.to/michael_inghilterra/the-invisible-characters-hiding-in-your-ai-written-text-4kae</link>
      <guid>https://dev.to/michael_inghilterra/the-invisible-characters-hiding-in-your-ai-written-text-4kae</guid>
      <description>&lt;p&gt;You paste a paragraph from an AI chat into a job application. It looks clean. You submit it.&lt;/p&gt;

&lt;p&gt;What you cannot see is that a handful of characters came along for the ride: a zero-width space wedged between two words, a non-breaking space where a normal space should be, curly quotes instead of straight ones, and a dash that is technically a different character than the one on your keyboard. None of them show up on screen. All of them are really there.&lt;/p&gt;

&lt;p&gt;Most of the time this is harmless. Sometimes it quietly breaks things: a search that will not match, a copy-paste that renders a little box instead of a letter, a form that rejects your input for no reason you can see, or an applicant tracking system that parses your resume into nonsense. And lately it has a second life in the news, because those same invisible characters are showing up in conversations about AI watermarking and hidden text.&lt;/p&gt;

&lt;p&gt;I hit this problem enough while building my own job-search tool that I built a cleaner for it. Here is what is actually going on, and what I do about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part everyone should know
&lt;/h2&gt;

&lt;p&gt;Text on a computer is not just the letters you see. It is a stream of characters, and plenty of characters are designed to be invisible or nearly so. They exist for good reasons: to hold words together, to control spacing, to support languages that need them. The trouble starts when they get into your text without you knowing.&lt;/p&gt;

&lt;p&gt;A few common ways that happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copy and paste.&lt;/strong&gt; Copying from a web page, a PDF, or a chat window often brings along formatting characters that were never meant to leave that page.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart formatting.&lt;/strong&gt; Many tools "helpfully" turn straight quotes into curly ones and two hyphens into a long dash. Nice on a printed page. Not always welcome in a form field or a code box.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI writing tools.&lt;/strong&gt; Text generated by an AI assistant tends to carry its own house style: certain spacing, certain punctuation, the occasional invisible spacer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why should a normal person care? Because the places where your words matter most are often the pickiest:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Applicant tracking systems&lt;/strong&gt; read resumes as plain text. A stray invisible character can split a word, hide a keyword, or garble a line, and you never find out why you did not hear back.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Search and forms&lt;/strong&gt; match on exact characters. A curly quote is not the same character as a straight quote, so a search for your name or a title can silently miss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rendering.&lt;/strong&gt; Send text with an odd character into an app that does not support it and your reader sees a little box or a question mark where a letter should be.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is not exotic. It is the digital equivalent of showing up to an interview with a price tag still on your sleeve. Small, invisible to you, and worth removing before anyone else notices.&lt;/p&gt;

&lt;h2&gt;
  
  
  The news angle, and where I draw the line
&lt;/h2&gt;

&lt;p&gt;If you follow AI news at all, you have probably seen two related stories.&lt;/p&gt;

&lt;p&gt;One is &lt;strong&gt;watermarking&lt;/strong&gt;: the idea that AI-generated text can carry hidden signals, sometimes as invisible characters, so it can be identified later. The other is &lt;strong&gt;hidden text used to smuggle instructions&lt;/strong&gt;, where invisible characters are tucked into a document or a web page to quietly influence an AI system that reads it. Both are real, and both are worth understanding.&lt;/p&gt;

&lt;p&gt;I want to be clear about what this article is not. It is not a guide to defeating watermarks or dodging AI detectors. I think that is the wrong goal and, honestly, a losing game. My argument is simpler and older than any of this: &lt;strong&gt;you should be able to see everything that is in your own writing, and you should be able to ship it clean.&lt;/strong&gt; Clean text is portable, professional, and predictable. Whether an invisible character came from a chat tool, a copy-paste, or a watermark, the fix is the same, and the reason is the same. You are the author. You get to decide what is in the file.&lt;/p&gt;

&lt;p&gt;Stripping invisible characters does not defeat a real watermark either. What actually reads as machine-written is cadence, every sentence the same shape and length, and no character cleanup fixes that. This is about clean, honest text, not disguise.&lt;/p&gt;

&lt;p&gt;Call it text hygiene. Same spirit as spell-check, just for the characters you cannot see.&lt;/p&gt;




&lt;h2&gt;
  
  
  For the technically curious
&lt;/h2&gt;

&lt;p&gt;Everything above is the whole point for most readers. If you want the mechanics, here they are.&lt;/p&gt;

&lt;p&gt;The characters worth watching fall into a few buckets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Zero-width characters.&lt;/strong&gt; Zero-width space (&lt;code&gt;U+200B&lt;/code&gt;), zero-width non-joiner (&lt;code&gt;U+200C&lt;/code&gt;), zero-width joiner (&lt;code&gt;U+200D&lt;/code&gt;), and the word joiner (&lt;code&gt;U+2060&lt;/code&gt;). These take up no visible space at all, which is exactly what makes them easy to miss.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The byte order mark / zero-width no-break space&lt;/strong&gt; (&lt;code&gt;U+FEFF&lt;/code&gt;). Frequently hitchhikes at the start of copied text.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Non-breaking and exotic spaces.&lt;/strong&gt; The non-breaking space (&lt;code&gt;U+00A0&lt;/code&gt;) is the common one. There is also a whole family of unusual spaces (thin, hair, figure, and so on) in the &lt;code&gt;U+2000&lt;/code&gt; to &lt;code&gt;U+200A&lt;/code&gt; range.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Smart punctuation.&lt;/strong&gt; Curly single and double quotes (&lt;code&gt;U+2018&lt;/code&gt;, &lt;code&gt;U+2019&lt;/code&gt;, &lt;code&gt;U+201C&lt;/code&gt;, &lt;code&gt;U+201D&lt;/code&gt;), plus the en dash (&lt;code&gt;U+2013&lt;/code&gt;) and em dash (&lt;code&gt;U+2014&lt;/code&gt;) that autoformatters love to insert.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tag characters&lt;/strong&gt; (&lt;code&gt;U+E0000&lt;/code&gt; to &lt;code&gt;U+E007F&lt;/code&gt;). An obscure block that has become the vehicle for so-called ASCII smuggling, where readable-looking text hides an invisible payload.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The cleaning logic is not complicated in spirit: strip the characters that should never be in plain text, normalize the ones that have an obvious plain equivalent, and leave everything legitimate untouched. The library exposes a few tiers so you can match how aggressive the cleaning is to where the text is going. Install it with &lt;code&gt;npm install ai-text-hygiene&lt;/code&gt;, then:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="k"&gt;import&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="nx"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;stripInvisible&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;cleanConservative&lt;/span&gt; &lt;span class="p"&gt;}&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ai-text-hygiene&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Full house-style clean for prose: strips invisibles, folds curly&lt;/span&gt;
&lt;span class="c1"&gt;// quotes to straight, em dash to a comma, ellipsis to three dots.&lt;/span&gt;
&lt;span class="nf"&gt;clean&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;We "delivered" results — on time…&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// =&amp;gt; 'We "delivered" results, on time...'&lt;/span&gt;

&lt;span class="c1"&gt;// Strip-only tier, safe for any language (no punctuation changes).&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;zwsp&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;String&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;fromCharCode&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mh"&gt;0x200B&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; &lt;span class="c1"&gt;// a zero-width space, invisible in input&lt;/span&gt;
&lt;span class="nf"&gt;stripInvisible&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;in&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;zwsp&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;visible&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="c1"&gt;// =&amp;gt; 'invisible'&lt;/span&gt;

&lt;span class="c1"&gt;// Length-stable tier for capped fields: 1:1 swaps, no growth.&lt;/span&gt;
&lt;span class="nf"&gt;cleanConservative&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;curly "quotes" to straight&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The important design choice is what you do &lt;em&gt;not&lt;/em&gt; strip. Normalizing is a judgment call: turning a curly quote into a straight one is safe and almost always what you want in a form field, but you would not want to flatten legitimate content in a language that depends on characters an overeager filter might catch. That is why the strip-only tier is the one that is safe for any language, while the full clean targets English house style. The real work is in choosing the right set to remove versus the right set to normalize, and in doing it predictably every time.&lt;/p&gt;

&lt;p&gt;In my project this lives in a single module (&lt;code&gt;text-hygiene-core&lt;/code&gt;) so the same rules apply everywhere text leaves the app, and it is published on its own as an open-source library under the MIT license. If you want to read the actual code or drop it into your own tools, the repo is here:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/michaelinghilterra-creator/ai-text-hygiene" rel="noopener noreferrer"&gt;ai-text-hygiene on GitHub&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I built this
&lt;/h2&gt;

&lt;p&gt;I did not set out to write a Unicode cleaner. I built &lt;a href="https://michaelinghilterra.com/Trajecktory" rel="noopener noreferrer"&gt;trajecktory&lt;/a&gt;, a tool to run my own job search like a pipeline, and text hygiene turned out to be one of those small, unglamorous problems that quietly matters. Every resume, every cover letter, every message that leaves the app should be clean, plain, and exactly what I wrote. Nothing hidden, nothing I cannot see.&lt;/p&gt;

&lt;p&gt;If you have ever wondered why a form rejected text that looked perfectly fine, this is often the reason. Now you can see it, and clean it.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;trajecktory is open source and still evolving. If this was useful, the code is on &lt;a href="https://github.com/michaelinghilterra-creator/trajecktory" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt; and I write about building it as I go.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>career</category>
      <category>writing</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
