Search real stories by role, salary, location, source of hire, interview process and what finally worked. Use these stories to understand the market before your next application or offer negotiation.
The freelance piece I pitched in March became a full-time role in June. The thing that made it work was that I never asked them for a job.
I'd wanted to write for a Madrid magazine since I moved to the city four years earlier. They were a serious publication, long-form, edited, careful about facts, and they paid their writers, which is increasingly rare. I'd read every issue I could find for a year before I tried to do anything about it.
When I started job-hunting, it didn't go well. I sent thirty applications across three months, mostly to content roles at SaaS companies that wanted "blog posts" rather than journalism. I got two interviews, one of which was the most depressing forty-five minutes of the search. A content marketing manager told me, plainly, that the role was generating SEO content with the help of an LLM and that the human writer was there to "make it sound better".
I went home that night and decided to stop applying for content jobs and just write the kind of piece I wanted to be paid to write.
I picked two ideas I thought the magazine would actually publish. One was about a small Madrid neighbourhood that had been gradually transformed by remote workers. The other was an interview with a local food cooperative. I wrote three-paragraph pitches for each and emailed them to the editor.
She replied to one. The neighbourhood piece. She liked the angle, she'd been considering pitches on the same beat, and she was willing to commission a 1,500-word draft on spec. The fee was €200, paid within thirty days of publication.
I wrote it. Took ten days. The edit was thorough, she pushed back on three sections and I rewrote them. The piece ran in the May issue.
In late May, two months after the freelance piece had been agreed, the editor emailed me. They'd opened a permanent staff writer role and she wanted to talk before posting it. The shortlist was already her, the editor-in-chief and the publisher. The "interview" was a forty-minute conversation about the work I wanted to do, what I was reading, and one piece in the magazine I'd have edited differently.
The "test" was a 600-word writeup on a topic she gave me the next day. I had two days. I wrote eight hundred words, cut a hundred and fifty, sent it. They sent the offer two days later.
The offer was €26,000 base, which is staff-writer money in Spain and is fine. I asked for €30,000, citing the freelance work I'd already done for them and the fact that I'd be running their newsletter as part of the role. They came back at €28,000 plus a small monthly stipend for assignment travel. I accepted.
What worked: writing the kind of piece I wanted them to pay me for, before they were paying me. The freelance work was the interview. The actual interview was a formality.
I wasn't actively job-hunting when I came across Picnic. They turned up in a long-form article about startups going after food waste in Europe, and the mission grabbed me right away. The piece laid out how their model was cutting down on the surplus and spoilage that drag on traditional supermarkets. It was the specificity that got me. Not "sustainability" in some vague hand-wavy way, but a concrete operational problem with measurable impact. I stopped scrolling and read the whole thing. No recruiter had ever sent me anything that made me feel that way, so I went straight to their careers page that same evening and applied for a senior software engineer role through the site.
The process was thorough and well-run. Five interview rounds sounds like a lot on paper, but Picnic had clearly thought about what each stage was meant to test. There was a technical screen early on focused on systems design, which I liked because it got straight to the substance instead of burning an hour on trivia. The later rounds brought in engineers I'd actually be working with, and the conversations felt honest rather than performative. People told me about real tradeoffs they'd made and real mistakes they'd learned from. What stuck with me most was their stated promise to move from application to offer within four weeks. They kept it. That sounds like a small thing until you've spent months in a process that drags on with no communication and no respect for your time.
The offer came in at 70,000 EUR for a full-time, on-site role in Amsterdam, and I accepted without much back and forth. Relocating to the Netherlands was a big call, but by the time the offer landed I'd already pictured myself there. The whole thing reminded me of something I'd half-forgotten after years of passively scrolling job boards. Caring about what a company actually does is a remarkably efficient filter. It points you somewhere worth going.
I'd been quietly exploring new opportunities for about a month when I showed up to a Kotlin meetup in Toronto one February evening, mostly just to get out of the apartment and talk shop with other Android developers. The turnout was decent, maybe thirty people, and I ended up next to an engineer from Wattpad during the break. We started comparing notes on Compose Multiplatform, specifically state management and some of the rougher edges with shared UI logic across platforms. What I thought would be a five-minute chat stretched to nearly an hour. We swapped contacts before we left, and I honestly didn't think much of it beyond a good networking moment.
About a week later he messaged me out of nowhere. A senior Android Developer position had just opened up internally, and he asked if he could put my name in. I said yes immediately. I'd done some light research on Wattpad before: Toronto-based, product-focused, reasonably sized engineering team, and what I found was encouraging. Over the next five weeks or so I went through six applications total for other roles while this one moved forward, but the Wattpad process was by far the most structured and engaging. Three rounds. A hiring manager screen where we talked about my experience with production-scale Android apps and what I wanted next. A technical live-code session where they handed me a real recursive layout bug they'd actually hit in production, and that one kept me on my toes because the fix wasn't obvious until I traced the measurement pass carefully. Then a team panel with three engineers that felt more like a genuine conversation than an interrogation.
The offer landed about a week after the final panel, thirty-eight days after that initial meetup conversation. It came in at CA$125,000. I pushed back once, calmly, citing market rate for senior Android work in Toronto. They came back with CA$130,000. I accepted without hesitation.
The library wasn't a job application. I keep having to remind myself of that, because it ended up being the most effective job application I've ever sent.
I'd been working as an iOS engineer in Lisbon for three years and was quietly looking for somewhere with a more interesting design system. On the side I'd been tinkering with a small open-source UI library: three custom controls I'd wanted to exist for years and had finally gotten around to building. About 800 lines of Swift, well documented, with a sample app.
I posted it in late autumn. Tweeted about it, put it on the iOS subreddit, emailed a few iOS newsletters, including a small one called Lisbon Mobile that maybe two hundred people in the city's mobile dev scene read. The editor wrote it up the following week.
The lead engineer at a Lisbon software company saw that newsletter post. He DMed me on Twitter the same day. They'd been hiring an iOS engineer for about six weeks and the search wasn't going well. Would I be open to a chat?
I was. The chat ran thirty minutes. He'd cloned the library, built it, and integrated one of the controls into a side project of his. His questions were specific to decisions I'd made: why I'd used a particular pattern for state management, why one control had the API surface it did. We disagreed on one thing. It was the kind of conversation I'd wanted to be having for two years.
The first formal round was a coding screen with two of their senior engineers. A small refactor of a real piece of their codebase, two hours. I shipped a clean implementation with one small extension they hadn't asked for but that I thought made sense. They said the extension was the part they liked.
Round two was a code review session. They sent me a piece of their code in advance and asked me to be ready to review it. I came with ten comments. About half were right, two were wrong, and three opened up a discussion that ate the rest of the hour. Good interview.
Round three was a culture round with the head of product and the lead designer. Less an interview, more a conversation about how the team worked and what success looked like.
The offer was €50,000 base. I asked for €54,000, citing my current comp and the relocation impact. They came back at €52,000 plus a small relocation help. I accepted. Seven weeks of searching, nine applications. Eight of those went out before the library got picked up. The ninth was the role at the company, which I applied to formally after the chat with the lead, more paperwork than application.
The library is still open-source. I should probably write more of them.
I graduated in the spring and walked straight into one of the roughest hiring markets I'd seen described in any of the forums I was reading to prep. It didn't dent my optimism at first. I built a spreadsheet, set up job alerts across a few major boards, and started firing off applications. Over about three months I sent close to 200: tailored cover letters for some, quick-apply submissions for others when the listing was clearly a long shot. The rejections came in waves, sometimes five or six in a single afternoon, and a few roles just went silent after a first-round screen.
I made it to the interview stage at five companies. Four ran the standard process: a recruiter call, then one or two rounds of timed algorithmic problems. I'd been grinding practice problems for weeks, but there's a specific kind of pressure that hits when you're solving a graph traversal question while a stranger watches a timer count down, and I didn't always perform the way I knew I could. Those four ended without an offer. By month two the weight of it was getting to me. I was refreshing my inbox more than I should have, second-guessing whether I'd picked the right field at all.
The fifth company was different from the first message. The listing mentioned a project-based interview format, which I almost scrolled past because I assumed it was marketing language. It wasn't. The interviews were genuinely conversational. We walked through real engineering decisions, talked about tradeoffs I'd navigated in my capstone project, and got into how I approached debugging something I'd never seen before. It felt less like a performance and more like a preview of the actual job. The offer came in on-site, full-time, at 72k, with relocation assistance, profit sharing, and unlimited vacation. After months of quiet rejections, the relief was physical. My honest takeaway: keep applying through the noise, but pay close attention to the companies whose process actually gives you room to show what you can do.
Two weeks. Three rounds. One offer. The fastest hire I've ever been involved in, on either side of the table.
I wasn't job-hunting. I'd been at my previous company for two years as the second DevOps hire. I liked the team. The infrastructure was a mess, but a manageable mess, and I'd been making it less of one every quarter.
A former colleague, someone I'd worked with five years earlier at a very different company, had moved to a Dublin cloud company eight months prior as the engineering manager for the platform team. We'd stayed loosely in touch. On a Monday morning in late autumn he pinged me on Slack: "we're hiring a senior DevOps person for my team, you'd be perfect for it, can we talk?"
I said yes mostly out of curiosity. I had no plans to leave, but I was happy to hear what they were doing.
The first call was him, forty-five minutes. No formal recruiter screen. He walked me through the team, the stack, the on-call rotation, the salary band, the team's biggest current pain (a Kubernetes upgrade that had been deferred for six months), and what they hoped to ship next quarter. By the end I had a clearer picture of the role than I'd had of any role I'd interviewed for in the previous year.
Round two was the head of platform and one other senior engineer. Sixty minutes, structured as an "infrastructure design" conversation. They presented a real problem they were working through, how to handle blue-green deployment for a stateful service with a managed database, and asked me to think out loud. I'd thought about variants of it before. We disagreed on one specific point about traffic shifting, and the conversation got more interesting there.
Round three was an "incident response" round with two engineers. They walked me through a real outage from two months earlier, slowly, runbooks open, and asked what I'd have done at each decision point. There were a few places I'd have gone differently. I said so. They were pleasant about it.
The final round was twenty minutes with the CTO. He asked two real questions: what would make me leave a company, and what would make me leave this one specifically. I told him.
The offer arrived the next morning. €82,000 base. Same as their advertised band, no negotiation needed, because they'd told me the band on the first call and asked specifically whether it worked for me. I'd said yes then. I said yes again now.
The whole process, from first Slack message to signed offer, was fourteen days. It worked because every round was someone who'd actually read about me, had a clear question they wanted answered, and respected my time. The recruiter screen never happened. No take-home. No gimmicks. It was the best interview process I've ever been through, and I think the only reason it worked was that an internal person was vouching for me from minute one.
I applied to about 80 roles over two months, and League was the only company that responded with a take-home before any call.
Most of the applications went through job boards. I'd built a small spreadsheet to track them, partly because I knew I'd lose count otherwise, and partly because I wanted to look back later and see whether any of it was working. The honest answer was: not really. About 12% of applications got an automated rejection within 48 hours. About 6% got a recruiter screen. Most of the rest just disappeared.
League's take-home arrived in week six of the search. It was a pleasant surprise. Most companies that don't reply for two weeks then ask for forty-five minutes of pleasantries before they'll talk about the actual role. League just sent a real anonymised dataset, asked four questions, and gave me a week to send back the answers in whatever format made sense.
The dataset was patient appointment data. A few hundred thousand rows, a handful of dimensions. The questions weren't trick questions. They wanted to know whether I could find the obvious thing first, whether I'd notice the less obvious thing after that, and whether I'd write up my findings so a non-analyst could read them.
I spent two evenings on it. About four hours total. Most of that was writing. The analysis itself was straightforward, but the writeup needed to be tight. I sent back a six-page PDF with the four answers, a few caveats about the data quality, and a one-paragraph summary up top.
They moved me to a video interview the next week. Two analysts on the call, both of whom had read the writeup carefully. The questions were about what I'd left out and why. One of them asked, gently, whether I'd noticed an outlier I hadn't mentioned. I had, and I explained why I'd left it out. He said that was the answer he was looking for.
Round two was with the head of analytics. Less technical, more about how I worked with PMs and how I'd push back if asked to produce a number that didn't tell the whole story. We had a real, slightly uncomfortable conversation about a project where I'd been asked to do exactly that, and what I'd done about it.
The offer arrived three days later. CA$66,000 base, at the lower end of the band they'd quoted in the recruiter screen. I asked for the higher end, citing the depth of the take-home process and a competing offer that was close in cash but worse on scope. They came back at CA$70,000. Accepted.
The thing I think mattered most: the take-home wasn't a filter for technical skill. It was a filter for how you communicate. The technical work was easy. The writeup was the test. Every analyst I've worked with since has said something similar about hiring. They're not looking for someone who can run the query, they're looking for someone who can explain the answer to a stakeholder who doesn't care about the query.
When the Microsoft offer came in for a software engineer role in Redmond, my instinct was to say yes on the spot. I'd wanted to work there for a long time, and seeing the number in my inbox gave me that rush of relief that makes people accept things they probably shouldn't. But I made myself slow down. Instead of replying that afternoon, I opened a fresh document and started logging everything: every email, every phone call, every number on the table. That habit alone changed how I handled the whole conversation.
The initial package was a 109k base, a 120k stock grant vesting over four years, and a signing bonus that looked generous but had room to move. I knew it had room because I had a second process running in parallel with another company. Not a bluff. A real, ongoing conversation. That concurrent interest drove everything that followed. When I told the Microsoft recruiter I needed time to think, it wasn't a line. I genuinely had something else to weigh. That credibility shifted the dynamic. The recruiter stopped treating the offer as a formality and started treating it like something that might fall through.
I went through five interviews total before reaching this stage, so by the time the offer landed I had a good sense of how badly the team wanted to fill the role. I used that quietly. I never named a number first. Never said anything like "I was hoping for at least X." I only shared that I had competing interest and that the current package made it a hard call. Over two or three rounds of back-and-forth the base moved from 109k to 117k, the stock grant climbed from 120k to 130k, and the combined signing and start bonuses reached 35k. None of those movements needed me to be combative or even particularly assertive. What they needed was patience, preparation, and a refusal to anchor myself low by speaking first.
I'd been passively open to opportunities for a few months when a specialist cloud recruiter reached out on LinkedIn with a role that was worth reading past the first line. A Dublin cloud company was rebuilding their Azure platform team from the ground up, and they wanted a senior architect who'd actually designed for scale, not just talked about it in theory. The recruiter had done their homework before messaging me. The pitch was specific, the timing was right, so I agreed to an exploratory call.
Within the first week I'd had an initial screen with the recruiter and moved quickly into the loop itself. Over the next two weeks I went through five rounds. The early stages were conversational: culture fit, broad technical background, how I handled stakeholder communication on large infrastructure projects. Then it escalated fast. The hardest piece was a 90-minute whiteboard session focused entirely on multi-region failover strategy. They handed me a realistic, messy scenario and expected me to reason through trade-offs out loud, justify my decisions, and push back on constraints that didn't make sense. It was hard, and I respected that. Right after came a written architecture document with a 48-hour turnaround. I spent most of those 48 hours on it. The whiteboard and the take-home together made it clear they were serious about hiring someone who could do the work. While all this was running, I kept a few other applications moving, eight in total across the month, partly to keep perspective and partly to make sure I had real alternatives if negotiation went sideways.
The initial offer came in at €105k base. I countered, walked them through my reasoning without being aggressive about it, and they moved to €120k. On top of that they agreed to a Dublin relocation package and a sign-on bonus, which mattered since I was moving cities. The equity was modest and I knew that going in, but the cash was the strongest number in my whole loop by a wide margin. I accepted twenty-eight days after that first LinkedIn message.
8Applications
5Interviews
4 weeksSearch length
RecruiterSource
Move closer to your next job offer
Get expert help with your CV, interviews, salary negotiation and job search.