On September 24 a company told me I was not moving forward for a role called Senior Software Engineer, AI. On October 8, fourteen days later, a talent acquisition specialist from the same company messaged me on LinkedIn. My profile, she wrote, looked like a strong match for their Senior Software Engineer, AI role. Could I please send an English CV?
I had accepted another offer 23 days before that message arrived.
It is a funny story, and I will be fair to it further down, because there are boring explanations that fit it. But it is also the most compact summary I have of what looking for a senior engineering job felt like in 2026. The systems and the people on the hiring side were often not working from the same information, and they were trying to hire for roles that did not have settled names yet.
I wrote about why I started looking in the promotion that was always one year away, and promised a separate post about the search itself. This is that post. Once the search was over, I reconstructed every application from my LinkedIn data export and my email, so most of what follows is counted, not remembered.
How I counted
The search ran on two channels that barely overlapped. LinkedIn’s export holds 74 application records for 2026. My email holds 38 positions I can tie to an application: confirmations from applicant tracking systems, submissions through intermediaries, and CVs I sent directly. Only three roles appear in both. Reconstructed from my inbox alone, the search would have looked like 38 applications. From LinkedIn alone, 71 after removing duplicate postings. Neither is close.
My unit is a distinct role, not a click. Where the same vacancy showed up under two posting IDs, I counted it once. That gives 106 distinct roles applied to. Six more processes were recruiter-led from the start, with no application of mine behind them, and adding those gives 112 opportunity tracks. Recruiter messages that never became a process are catalogued separately and left out of every denominator, because a message is not an application.
One caveat about the opening story: that rejection reached me through a channel outside both exports, so it is not in the 106. Counting it makes 107. I use the audited 106 throughout.
The numbers
Here is the whole search in one table:
| Measure | 2026 |
|---|---|
| Distinct roles applied to | 106 |
| Opportunity tracks, including recruiter-led | 112 |
| Active window, June 9 to September 13 | 96 days |
| Tracks that reached an assessment, screening call, or interview | 16 |
| Explicit rejections | 3 |
| Processes I withdrew from | 4 |
| Offers | 1 |
| Tracks with no conclusive outcome | 104 |
106 roles over 96 days averages out to about 1.1 applications a day, and that average hides almost everything. My LinkedIn applications happened on only 25 of those 96 days, roughly three per active day. On September 2, September 4, and September 13 I sent eight each. July was nearly empty, with 7 roles all month. September alone accounts for 48 of the 106 roles, and for 44 of the 74 LinkedIn records (59.5%).

The monthly picture, split by whether the title had AI in it (more on that split in the next section):

The outcomes are where it gets uncomfortable. One offer from 106 applications is a hit rate under 1%. Three explicit rejections means 2.8% of my applications ever got a clear no. And 104 of the 112 tracks, 92.9%, have no conclusive outcome in anything I can see:

I want to be careful with that 92.9%. It is missing data, not a measured ghosting rate. Some of those companies may have rejected me inside a portal I never logged back into. Some applications went out two days before I accepted an offer and never had a fair chance to be answered. Some may still be technically open. But from the candidate’s side of the table, missing data and silence feel exactly the same, and you make your decisions inside that silence.
Of the 16 tracks that reached an assessment, a screening call, or an interview, ten started from one of my applications. That is 10 of 106, about one application in ten. The other six were recruiter-led, which by their nature start with a person.
A market renaming itself
The job titles tell their own story. I ran the titles of the 106 roles through a filter for anything AI-flavored: AI, ML, machine learning, LLM, agentic, AI-native, forward deployed. 30 of the 106 matched, about 28%. Seven of the roles never had their position named in any email I received, so measured against the 99 roles with a known title, it is just over 30%.
A sample of what matched: AI-Native Software Engineering Director. Technical Lead, AI Native. Senior Flutter Engineer (AI-Native). Forward Deployed Engineer. AI Solution Architect, at three different companies, plus a fourth through a recruiter. Lead Agentic AI Consultant. Principal AI Engineer, LLM and Prompt Engineering. HCI AI and Automation Technical Architect.

Next to those sat the classic titles, unchanged: 33 of the roles were Principal or Staff, and ten were Flutter or mobile roles. The AI share rose through the summer, from 4 of 26 in June to 10 of 25 in August, then 15 of 48 in September.
This needs a scope statement. It is the set of jobs I chose to apply to, not a census of the market, and I chose plenty of AI roles on purpose. I have spent most of this year building with coding agents, so many of those postings were a real fit. The confusion also ran in both directions: in late June an intermediary submitted me to five different roles at a single company within three days, from Staff Software Engineer to Principal Machine Learning Engineer to Staff Research Engineer. I was not entirely sure what to call myself either. But I chose from what was posted, and what was posted increasingly had AI in the name.
My read, and it is a read rather than a measurement: many companies know they need something AI-shaped and have not yet decided what it is. A title like AI-Native Software Engineer can mean an engineer who works well with coding agents, an engineer who builds LLM features into a product, or both, and the postings rarely said which. A Forward Deployed Engineer is a real role with a real history, but seeing it next to Solution Architect and Agentic AI Consultant postings for what looked like overlapping work tells me the vocabulary is still being negotiated.
What that produced, from where I sat, was a hiring process that was cautious and hectic at the same time. Cautious, because the first response to an application was often a test rather than a person. Hectic, because the same jobs were posted twice, sourced and applied to in parallel, and rejected and recruited for inside two weeks. The next sections are the evidence for both halves.
The funnel nobody sees
The cautious half first. For the AI-native director role, the first thing that came back, eight days after I applied, was a reasoning assessment and a screening assessment, which I completed before speaking to anyone there. Another application went straight to a CCAT, a timed cognitive aptitude test, tied to the application by a candidate ID. A third sent a personality assessment, followed by a separate email confirming I had finished it. One technical interview ran on a third-party coding interview platform that forwarded the results to the hiring company. None of these is unreasonable on its own. Stacked up, they mean a senior candidate can spend hours inside a process before a single conversation with the people who would be their colleagues.
Then the silence after the receipt. Most acknowledgments were automatic, and for most roles they were the last thing I heard. Several did not even name the position I had applied for.

Duplicates were the next layer. The AI-native director role was posted both by the company and by a job aggregator, and I applied to both listings three minutes apart before I noticed they were the same job. A recruiting agency posted the same Senior AI Engineer title twice on the same day; I applied to both, 34 minutes apart. A fintech’s platform engineering role appeared under two posting IDs, on August 20 and September 6, and I applied both times. LinkedIn’s export lists 62 distinct company names across my 74 applications, and a fair share of them are recruiters and aggregators rather than the employer who would actually do the hiring.
Intermediaries added one more. In late June an intermediary platform submitted me to eleven roles at five companies, in two emails. It was convenient: one profile, eleven submissions. But a confirmation from an intermediary is not a receipt from the company’s own applicant tracking system, and none of those eleven produced an outcome I can see. From the outside, I had no way to tell which of these channels a given company actually read.
Time is not linear
Both of these applications went out on June 22. A fintech declined me for an identity engineering role the same day, in 0 days. The other one became my offer, accepted on September 15, 85 days later. Almost three months, for the only one that worked.
There are six cases where I can date both the application and the first meaningful milestone after it: 0, 3, 7, 8, 15, and 21 days. That is a mean of 9 days and a median of 7.5. The endpoints are not the same kind of event (a rejection, a recruiter call, an interview arrangement, an assessment, an interview invitation, a manager screening), and six is a small sample, so treat it as a shape rather than a benchmark. The shape is clear enough, though. The companies that were going to move fast did it within about three weeks.
The long tail was long. One process sent an interview invitation 15 days after I applied, then the interview was rescheduled, and the confirmed date landed 46 days after the application. In another, I was talking to a recruiter about an AI architect role, and on September 15 I mentioned that an earlier application to the same end client had gone over a month without even an acknowledgment. The recruiter’s answer was candid: the client was already interviewing another candidate, and yes, large companies can be slow.
And the activity came in bursts. Of the processes I have records for, four moved at all during July and August. In the nine days from September 7 to September 15, eleven did: first-round interviews, a take-home coding task, an HR interview, a pre-screening call for a contract role, the CCAT, the personality assessment, intro and technical stages for a senior AI engineering role, a position overview call, and the offer. One more ended in a rejection on September 14. Part of that burst I caused myself, by applying heavily in early September. The offer, though, came from an application I had sent in June.
People and systems disagree
On September 11 I applied to a Solutions Architect posting. On September 14 the company’s HR manager messaged me on LinkedIn to pitch me that same posting, the very same job link. We booked a conversation, and I withdrew the next day after accepting my offer. The fair reading is that outbound sourcing runs in parallel with inbound applications, which does not mean anyone ignored mine. It is still a strange experience to be recruited for a job you applied to three days earlier.
The rejection in my opening paragraph deserves the same fairness. Applicant tracking status and recruiter sourcing are often separate tools run by separate people. The headcount may have been reopened, a second requisition may have been opened under the same public title, or the hiring criteria may have changed in two weeks. I cannot verify that it was the same requisition; I only know that the company and the title matched. Any of those explanations is more likely than anyone acting in bad faith. From the candidate’s side, all of them look identical. It is a strong match, apparently. It was not one fourteen days earlier.
Some of the disagreement was with my own CV. A recruiter for a remote senior .NET role asked whether I had recent hands-on C# and .NET experience, because my CV read as C++, cloud, and platform engineering. C# and .NET have been an ongoing core technology for me, and I explained that in detail. The question was fair, though. My CV led with the C++ and cloud work, and a reader skimming it for the stack named in a job spec would not find .NET near the top. That one is on me.
Geography ended another. A senior full-stack role with backend and AI work I was genuinely interested in required three days a week in the office. With my commute, three days was impractical; two would have been reasonable. The conversation ended there, before an application. I would rather find that out on the first call than in the fourth round, and so would they.
And one rejection only ever answers one role. The fintech that declined me on June 22 later had two more roles I applied to: a clearing role, and the platform role that was posted twice. None of those produced an answer either way.
Offer day and after
I accepted the offer on September 15, for a Principal Software Engineer role. The same day I withdrew from five live processes: a senior AI engineering role with intro and technical stages arranged, a role where I had already submitted the take-home task, a recruiter-led AI Solution Architect process for an undisclosed client, where my CV had just been tailored for submission, the Solutions Architect posting from above, and a senior C++ role where a phone call was being set up. A scheduled interview at another company was cancelled that day as well. Five short messages closed five processes. The C++ recruiter congratulated me the next day and told me to get in touch if the new job did not work out. The Solutions Architect company acknowledged my withdrawal on September 21 and wished me luck.
Then the other direction started. On September 24 came the rejection from the opening story, nine days after I had accepted. On October 1 the founder of a stealth AI startup proposed a remote freelance TypeScript and Node contract. On October 7 a recruiter asked about my availability for a remote six-month C++ contract-to-hire. On October 8 came the strong-match message. On October 9 a large IT consultancy pitched me a Senior Full-stack .NET role, and after I explained what I was looking for, Lead and Chief .NET roles. That same consultancy had acknowledged my application for a Senior AI Engineer role in early September, and I never heard more about that one.
Four new approaches in the 24 days after I accepted, landing on average 21 days after the acceptance, and none of them required anything from me except a reply.
The fair objection
The obvious objection is that 106 applications is spray-and-pray, and a low hit rate is exactly what spray-and-pray gets you. The objection is real. Applying to Flutter roles, AI architect roles, and Principal backend roles in the same month is not a narrow search, and some of those applications were a stretch.
But the volume was a response to the silence, not the cause of it. When roughly nine in ten applications produce no observable outcome at all, there is no feedback to iterate on, and the only lever left is the number of tickets. The processes that did move were also spread across the whole range: an AI-native director role, a Principal role, a Staff role, several Senior roles, a Solutions Architect role. Focus would have helped me write better individual applications. It would not have told me in June which ten of them to write.
The other honest limit is scope. This is one engineer’s search, a senior and principal-level profile, in one region of Europe, in one summer. I would not extrapolate an industry ghosting rate from it, and I have not tried to.
What I would tell an engineer starting now
None of this is clever. All of it is what I either did and would do again, or learned the slow way:
- Track everything in one spreadsheet, with dates: date applied, company, title, channel, posting link, any requisition ID, last contact, and status. My two channels overlapped on 3 of 106 roles, so either one alone would have hidden a third to two thirds of the search. The sheet is also how you spot duplicate postings, and how you answer a recruiter who pitches a role you already applied to.
- Apply in bursts, and expect long tails: the fast companies answered within about three weeks. The offer took 85 days. Plan your finances and your patience for the tail, not the median.
- Do not read silence as rejection: it is missing data. Keep applying while you wait, because the waiting carries no information.
- Keep every pipeline alive until you have accepted: I had five live processes the day the offer came. That is what made it a choice rather than a relief, and withdrawing cost five polite messages.
- Make your recent stack obvious in the first lines of the CV: a senior profile that spans several stacks gets read narrowly. Tailor the top third to the role, especially when the posting names one language.
- State your constraints on the first call: onsite days, employment versus contract, start date. My hybrid-policy mismatch cost one short conversation instead of four rounds.
- Read AI titles in both directions: ask what the role actually does with AI, whether that is building LLM features, running coding agents, or renaming existing work. And do not skip a classic posting for lacking the word. My offer came from a title with no AI in it at all.
- Decide your assessment budget up front: how many hours of reasoning tests, aptitude tests, and personality questionnaires you will do before a human has spoken to you. Then spend them on the roles you want most.
Hiring as a senior engineer in 2026 was neither closed nor easy. In my search it took 96 days of applying, 106 roles, and 85 days for the one that worked, on a market still deciding what to call the job. If you are in it now, count everything and keep going.
The rest of what I build, now from the new role, lives at lezli01.is-a.dev.
// comments load as you scroll here. They live in GitHub Discussions; sign in with GitHub to join in.