Tag: job application

  • My Job Search at 50+: The Data Behind Landing a Tech Job in 2025

    My Job Search at 50+: The Data Behind Landing a Tech Job in 2025

    Author: Nicholas Hart
    Date: Thursday, October 16, 2025
    Reading time: 8-9 minutes


    Tech Job Seeking in 2025

    After 8 months and 90 applications I finally landed a job! I have never experienced a job market this tough during my whole career in software engineering–either as an individual contributor or manager. Anecdotally I see a lot of posts on LinkedIn about people struggling with the job market. I’ve never been out of work more than a month or so until now. It feels like this period in 2025 is different.

    What’s different? Is it a realignment within tech spurred by AI and shortsighted tech CEOs chasing after more profit? Is it the fact that I’m over 50? Perhaps a bit of both. I don’t have all the answers, but I will share my data and offer some advice.

    My Data

    My job search visualized

    I submitted 90 job applications over eight months.

    • 5 Director of Engineering
      • 1 interview (via referral) – 20% interview rate
      • 3 ghosted – 60% ghost rate
      • 0 pending
    • 25 Senior Engineering Manager
      • 3 interviews (1 via recruiter, 1 via referral) – 12% interview rate
      • 3 ghosted – 12% ghost rate
      • 2 pending
    • 37 Engineering Manager
      • 9 interviews (1 via recruiter, 3 via referrals) – 24% interview rate
      • 7 ghosted – 19% ghost rate
      • 8 pending
    • 2 Software Architect
      • 1 interview – 50%
      • 2 ghosted – 100% ghost rate
      • 0 pending
    • 11 Staff/Principal/Founding Engineer
      • 0 interviews – 0% interview rate
      • 5 ghosted – 45% ghost rate
      • 5 pending
    • 7 Senior Engineer
      • 0 interviews – 0% interview rate
      • 0 ghosted – 0% ghost rate
      • 3 pending
    • 3 Engineer
      • 0 interviews – 0% interview rate
      • 0 ghosted – 0% ghost rate
      • 1 pending

    (A note on the numbers above–I still have 19 applications that have received no response yet, but I haven’t moved to ghosted yet, so those ghost rates may still go up!)

    In total, I landed 14 interviews from these 90 applications–a 16% conversion rate.

    It definitely helped to have a referral, although the job I ended up getting came from outreach from a recruiter. One other promising opportunity which I withdrew from (after receiving the offer I accepted) also came from a recruiter. The difference between these opportunities and all the others were that the recruiters were engaged, transparent, communicative, responsive, and reliable.

    One of the opportunities I was pretty excited about, but the recruiter took weeks to get back to me after completing a final round of interviews. They repeatedly promised dates by which they’d have news, and when those dates passed without communication I would follow up after several days and get put off another week. It was very frustrating and eventually led to a rejection when I let them know I had another offer.

    A few opportunities had a significant “homework” aspect–a presentation to create and present, or a take-home coding project. I probably spent too much time on these projects–I never got to a final round of interviews for any of them.

    One that stung was an Engineering Manager role at a Seattle startup whose mission I was really excited about. They wanted a very hands-on manager and had me do a coding test, which I bombed–not because I’m a lousy engineer, but because I’m not a seasoned React engineer–I still look things up and rely on examples. It also didn’t help that I was told the coding would be focused on Typescript–which I am much stronger at.

    I was rejected out of hand by a recruiter for one role that I was referred for by a former employee. It seems they were looking for someone with 8 years of hands-on React engineering experience. I almost wrote a blog post about this one. React 8 years ago looks nothing like React today! Any talented engineer can pick up a new technology. Setting arbitrary requirements on experience means you’re going to miss out on smart, motivated, experienced talent. Their loss!

    My New Job

    The role I ended up accepting is a Senior Engineering Manager role–which was my prior title at Sonos. The comp ended up being pretty close too. One of the huge bonuses is that the role is 100% remote. I won’t waste several hours of my time each week commuting to an office. I’ve demonstrated the ability to successfully lead distributed and remote software teams and am excited I get to continue to do so. (Here’s me thumbing my nose at all the “return to office” deadenders who argue this is the only way to go.)

    The astonishing thing about this job is that the recruiter found me and reached out. Their posting had escaped my job search. I’m still curious to know why they reached out to me among a sea of candidates. I have no illusions about being well known, but I like to think I have a reputation among those who know me as a manager who does right by his employees (I always had above-average engagement scores from my teams at Sonos). When I’m on-site for orientation I hope to ask the recruiter about why I stood out.

    Apply Early and Often

    I was more likely to get traction on an application if I applied within a few days of the role being posted. Recruiters are overwhelmed by bot applications and genuine candidates are getting lost in the system. When searching LinkedIn make sure you look for posts within the past week (at most). Create job searches for roles posted in the past 24 hours and set alerts–when a new role of interest drops prioritize it, don’t wait!

    (Sorry I wish I had kept more data on the age of job postings that I applied to!)

    Focus on quality over quantity. You might want to have a few slightly different resumes–especially for a manager or senior engineer who is capable of leading in more than one specialization. Re-read and tweak your resumes–you may figure out some ways to improve them over time. Over the months I evolved several versions of my resume: mobile engineering leader, full-stack engineering leader, and staff engineer/architect in mobile.

    I made sure to craft a personal cover letter for each application. Over time I evolved this process as well, so that I had a standard template for a manager or staff engineer role–a couple of concise paragraphs that tell a story about my technical and leadership expertise. Then I’d write a custom intro paragraph that had some sort of hook that connects me to the company and the specific role. I might tweak the other standard paragraphs if there was a particular aspect of my experience worth emphasizing.

    I aimed for 2-4 quality applications per week. If I couldn’t see myself connecting to the role in some way and write an intro paragraph for a cover letter, then I simply passed on it. There are certain toxic companies (including several of the FAANG) that I simply avoided–personal preference as well as disrespectful past interview experiences. Perhaps this also reflects upon my over 50 attitude–I’ve done jobs for a paycheck before and at this point in my life finding a meaningful opportunity is of critical importance to me.

    Keep the applications going, even when you’re interviewing. You want to keep your pipeline full, even if you made it through the final round for your dream job. They might pick someone else, and when you need a paycheck you can’t afford a lull in the job search process.

    Referrals Are Key

    Work your network. Reach out to former colleagues, friends, and family and get those referrals in. It helps! I had the best luck getting an interview via connections that I knew well. Those 2nd degree connections, not so much. Be sure to connect with people you’ve worked with, and don’t just slide into their DMs with “hey remember me from 10 years ago when we occasionally were in the same meeting? Could you refer me please?” Put in some effort, re-establish the connection, find out how they’re doing–ask about the company and if they have any insight. Build genuine connections and referrals often follow naturally.

    Sometimes the job posting on LinkedIn has a recruiter or hiring manager you can reach out to. I tried this a few times and never got a response, nor an interview. They’re probably inundated with requests. It probably doesn’t hurt your chances, but don’t toss some clearly AI-generated message their way, or a form letter with misspellings. I think the thing here is to come across as a real human, with some sort of connection to the role that will make them want to bother fishing your application out of the thousands in their system and give it a look.

    Job Searching Over 50

    I’m afraid I don’t have any data here, just anecdotes from LinkedIn (I sure see a lot of people talking about ageism), and my own experience. My best advice is:

    • Remove work experience older than 20 years from your resume. Chances are it’s not relevant to what you’re doing today and it’s taking up valuable real estate.
    • It’s ok to leave the graduation date off your education.
    • Actively learn new technologies and practice your coding skills. It’ll help with your interview conversations and look good on your GitHub profile.

    Keep Your Skills Fresh and Relevant

    One of the things that kept me going was working on personal projects–many of which I made public. I have no idea whether this factored into getting hired or not, but if a recruiter or hiring manager bothered to look at my GitHub profile they would see that I am writing code and learning. Plus if anyone wanted to drill in to my projects they’d see well-organized code with tests and automation. This regular practice will also help in interview conversations and technical screenings.

    Expect to be Ghosted

    Kudos to the recruiters who took the time to reach out with a personal message. I know you’re swamped! When I get a personal response, that is a company I will want to re-apply to someday. It’s nice even to get the automated rejections so I can cross one off my list. Applications that linger in limbo with no response are frustrating, but the reality is that many of one’s applications will never get an acknowledgement beyond the initial automated “thanks for your application” email. If it has been more than 4 weeks with no contact I move an application to the “ghosted” pile and move on.

    Keep Your Chin Up

    This process is demoralizing, frustrating, and filled with disappointment.

    • That role you thought you were perfect for and got an automated rejection…
    • The interview loop you thought you nailed but they’re moving forward with other candidates…
    • The recruiter you had a promising conversation with and never heard from again…

    I see a lot of people posting a lot of negativity on LinkedIn about how broken the hiring process is, how frustrated they are, how unfair it all is. I see the recruiters who are frustrated and overwhelmed too. The thing is, I don’t think posting negativity is going to help you in the long run. I do enjoy reading some of the more creative and humorous posts about how rough the job search is, and I hope it works out for them!

    If you’re an engineer my advice is to keep busy, show off what you’re building, put a positive spin on your public posts, and find some friends and family with whom you can commiserate with privately.

    This is all my own data, personal experiences, observations, and advice. I hope others find it helpful. Your mileage may vary.


    About the Author

    Nicholas Hart is a software engineer and technical writer passionate about sharing knowledge and helping others learn. You can find more of my work at:

  • The Manager Who Never Stopped Coding: My Next Chapter

    The Manager Who Never Stopped Coding: My Next Chapter

    Labor Day Reflections

    Labor Day has come and gone, school has started, and Summer is over
    (even though we haven’t hit the autumnal equinox just yet). This was a
    special Labor Day this year because my unemployment insurance ran out.
    I’ve had a few job opportunities nearly go to an offer, but am still on
    the hunt after 6 months.

    The job market for a software engineering manager is rough–tougher
    than I’ve ever seen it. I’m starting to apply for individual contributor
    roles and contract/consulting roles, just to broaden my options.

    Rediscovering My Love for
    Code

    I successfully launched Sonos’ first B2B SaaS product last year, but
    I didn’t spend as much time writing code as I would have liked. I’m a
    great manager, enjoy coaching, and helping my employees grow their
    careers, but I also love to write code. In my last role I had to spend
    much more time managing–not just my team, but filling in for a busy (or
    missing) Product Manager, and coordinating with stakeholders across
    business units. While I was able to learn a new tech stack sufficiently
    to review code and guide technical decisions, I had a humbling moment in
    a recent interview where I struggled to build an app from scratch.

    As I’ve been working on personal software projects and exploring AI
    agents I’ve enjoyed learning tech stacks like Ruby/Rails, Flutter,
    deepening my understanding of Typescript, and getting up to speed on all
    the latest in iOS development. I’ve done more personal coding in the
    past few months than I have over the prior nine years as a manager.

    I’ve realized that I love technical leadership and I can use my
    skills to help move a team forward as an individual contributor. I’m now
    considering both management and senior IC roles. For IC roles I’m
    focusing on iOS and mobile, which is still my “first love” in
    programming–and where I think I can best demonstrate my technical
    expertise when it comes to a coding interview.

    The “Yay! Code!” Philosophy

    While iOS is still my preferred stack, one thing I have demonstrated
    over the course of my career is that I can pick up any new tech stack
    required. When I first started mobile development it was on Symbian. In
    college I learned how to code in Ada. My first AI code was written in
    Lisp. When I developed Windows apps it was using C++ and COM. I’ve
    delivered apps for Windows, Mac, Linux, iOS, Android, frontend, backend,
    and firmware. I’m what one of my former mentors referred to as a “Yay!
    Code!” kind of engineer. When presented with a new technology I love to
    dive in, learn how to use it, and deliver something great.

    This is such an exciting moment in tech with the rise of AI and
    agentic coding. With an AI agent as a partner (sort of like a junior dev
    with an encyclopedic memory of reference material), it is easier than
    ever to pick up a new tech stack. AI can’t write an app by itself, but
    it can help with some of the tedious boilerplate and “plumbing” code. It
    makes for a helpful SDET, which can help automate your processes, write
    helper scripts, and set up your CI/CD workflow. It’s like having a
    junior pair programmer at your side. I don’t know about these “10x”
    coding claims I read about, but AI can certainly help an experienced
    software engineer/architect leverage their expertise and deliver much
    faster.

    Leading Through Change

    The other interesting thing about this period is how rapidly the
    industry is changing. People have all sorts of predictions about the
    direction things are heading, whether there’s a bubble about to burst,
    etc. The one thing I know for certain is that we are in a “VUCA” period
    (Volatility, Uncertainty, Complexity, and Ambiguity). I have led teams
    through periods like this in the past–from the rise of broadband
    Internet, to the ubiquity of mobile computing, plus cloud computing
    connecting it all. Whether as a manager or a seasoned engineer I have
    the experience, empathy, and resilience to help lead teams through the
    quickly changing landscape.

    What I’m Looking For

    My next role needs to be about the opportunity, not the title. I am a
    technical leader and I like to be close to the code. I want to be
    inspired by the company culture and the people I work with. I want to
    build new experiences that solve problems for customers. I love mobile,
    but understand that great mobile experiences extend beyond the
    phone/tablet and require deep integrations with other systems. I don’t
    want to be held back by platform limitations–I want to dive in and add
    new features to a backend system to unblock my team. If this sounds like
    the kind of manager or staff/principal engineer you need on your
    software team, I’d love to connect!

  • Automating Job Applications with Markdown: From 60 Minutes to 20 Minutes

    Automating Job Applications with Markdown: From 60 Minutes to 20 Minutes

    Who This Is For: This workflow is designed for developers and technical professionals who are comfortable with command-line tools, enjoy working in code editors like VSCode, and who prefer markdown for writing (or are willing to give it a try). If you’re already using git for version control and don’t mind a bit of setup for long-term efficiency gains, this approach could save you significant time during your job search.

    Introduction 💡

    Job applications are tedious. Between customizing resumes, writing cover letters, tweaking formatting, and tracking applications, I was spending hours on administrative work instead of finding and responding to great opportunities–or working on side projects which I find infinitely more interesting.

    A little while ago I wrote a blog post on writing with markdown, which has greatly sped up my writing process. I’ve been using it for several weeks now and have made a bunch of automation improvements which enable me to quickly create a job application, customize a resume, draft a new cover letter, and track each application’s progress.

    I also took this opportunity to give Claude Code a test drive and see how it could help me build out some new automation scripts. In the past I’ve found agents like Cursor to be too aggressive–cranking out code faster than I can wrap my head around it. If I’m trying to learn something I want to go slow, ask questions, and understand what’s being built. Agents can’t reason but they’re good at replicating patterns, so I want to make sure it stays on track. (I’ll write more on Claude Code later–but so far I really like it!)

    The result of this collaboration is my new workflow, which I wanted to share with others: Markdown Writer. It’s still a work in progress, but if you like working in an IDE and are comfortable with a CLI you might find this a good way to manage your job applications.

    Why not use existing job tracking tools? TBH, I didn’t even research what’s available–I just knew I wanted to stay in my IDE where I’m most comfortable and productive. As developers, we often build our own tools not because existing solutions don’t exist, but because we have specific workflows and preferences. I wanted something that felt like coding: version-controlled, scriptable, and integrated with my daily development environment. Plus I wanted a small project to experiment with AI.

    Get Set Up ⚙️

    I use VSCode because it has great integration of file/project navigation, editing, helpful extensions, terminal integration, key bindings, snippets, and custom command integration. However this will also work with your favorite code editor and either zsh or bash in your terminal.

    This project is available as a GitHub template repository, making it easy to create your own private copy with one click. Simply visit the Markdown Writer repository and click “Use this template” to create a new repository in your GitHub account.

    If you prefer to clone and experiment first, you can use the repository directly:

    git clone git@github.com:nickhart/markdown-writer.git

    However, for ongoing use, I recommend creating your own repository from the template so you can customize it and track your applications privately. When there are updates to the main Markdown Writer repository, you can use the included script (scripts/sync.sh) to copy updates from the upstream repository to your own, or manually copy specific files you want to update.

    Requirements 📋

    Installing ⬇️

    git clone git@github.com:nickhart/markdown-writer.git
    cd markdown-writer
    ./setup.sh

    NOTE PDF formatting is supported, but requires installation of a LaTeX package. Out of the box Markdown Writer works great for creating DOCX files.

    Configuring 🔧

    Edit .writing.yml with your information. You can see an example .writing.yml here.

    Edit your resume and cover letter templates:

    • templates/resume/default.md
    • templates/cover_letter/default.md

    If you wish to customize your document formatting you can edit the styles in the files located below. Be sure to modify the standard styles (Heading, Heading 2, Body, etc…), then save the changes to reference.docx. Pandoc will use these reference files and use the styles in them when generating your formatted resume or cover letter.

    • templates/resume/reference.docx
    • templates/cover_letter/reference.docx

    You should now be ready to go. The system supports multiple resume templates. For many people “default” might suffice, but I find myself applying to a few different kinds of roles and have one tailored more towards mobile, frontend or fullstack… so I have resume templates with each of those names.

    Workflow 🔄

    Applying To a New Job 📝

    When I want to apply to a new job from the terminal I run

    job-apply Acme "Engineering Manager" default "http://acme.com/jobs/engineering-manager/1234"

    Or if I want to use a specific resume template other than default:

    job-apply Acme "Engineering Manager" fullstack "http://acme.com/jobs/engineering-manager/1234"

    This creates a new job application in the applications/active/acme_engineering_manager_20250624 directory. It copies my “default” resume template and standard cover letter and performs the variable substitution using my .writing.yml. It downloads the job description at the provided URL and saves it as an html file (job_description.html). It creates a metadata file (application.yml) which contains the company name, role, job description URL, and date created.

    Then I go in and tweak the resume as needed (perhaps just the title, maybe the intro blurb), and then crank out a few brief paragraphs for the cover letter. Usually I want to customize the intro to the cover-letter, but often I’ve already got some good content from prior cover letters which addresses particular needs/requirements in the job description. The organization of the applications makes it super easy for me to find a prior cover letter, lift a few sentences and add them into my new cover letter.

    Then I run job-format acme_engineering_manager_20250624 and it automatically formats my markdown resume and cover letter into DOCX format, using reference template files with my preferred styles and page format. The formatted versions go into a formatted subdirectory of the application. The .gitignore automatically excludes the formatted docs from being committed–but if one wished they could tweak that and commit the formatted files too.

    From here it’s a matter of uploading the DOCX files to the job application and filling out the rest of the application information.

    Some applications require some essay-style questions, in which case I add another markdown file to the application folder (eg: application_questions.md) and use my same editing process. I don’t bother formatting these into DOCX but it’s nice to have a record of my responses and then it’s easy to copy/paste them into the application form.

    Submitting and Tracking the Application 📤

    When I’m satisfied with the application I have a helpful command to commit it to my repo:

    job-commit acme_engineering_manager_20250624

    Once I’ve submitted the application, and as it moves through the review process I have a command to update its status:

    job-status acme_engineering_manager_20250624 submitted
    job-status acme_engineering_manager_20250624 interview
    job-status acme_engineering_manager_20250624 offered
    job-status acme_engineering_manager_20250624 rejected

    Each of these statuses has its own sub-folder inside the applications folder in the project root. The job-status command moves the application from one folder to another and updates the status in the application.yml metadata file.

    If I get to the interview stage (w00t!) I take notes in a markdown file which I keep in the application’s folder, eg:

    applications/
      interview/
        acme_engineering_manager_20250624/
          recruiter_notes.md
          hiring_manager_notes.md
          interview_loop_notes.md

    I also have a job-log command which will show a summary of all my applications, or just ones in a certain status. Right now the summary is terse, but I intend to make it a bit fancier in case someone in the state unemployment office decides to challenge me. It will be trivial to take the metadata and generate a log of each job application in DOCX format to prove I’ve exceeded their “three job activities a week” requirement.

    VSCode Integration 🛠️

    I mentioned in my prior post about how I like to use VSCode for my markdown writing. For those who are also using VSCode it will recommend some extensions that I find handy:

    • Markdown All in One
    • Code Spell Checker
    • markdownlint
    • Word Count
    • YAML

    The VSCode configuration adds some helpful settings for Markdown and YAML editing, as well as allowlisting some common words that the spell checker might flag.

    It also adds some commands to the command palette. With a simple cmd-shift-p to open the command palette, select Run Tasks, and choose one of my commands like Create Job Application. It’ll prompt me for the company name, role, which resume template (or use default), and the URL for the job description. It’ll run the command in a terminal and show me the output!

    Wrapping Up and Next Steps 🚀

    In my last post on this topic it was taking me an hour to do what now takes me 20 minutes–and most of that time is me thinking about what I want to write and entering it into a markdown file. I still only apply to a few jobs a day, but I can focus on applying to the roles that really interest me, take the time to craft a thoughtful cover letter, and then have more time to work on my other projects or write a blog post.

    I will continue to use the Markdown Writer to craft my job applications. I also use it for blog posts and format the results into HTML which I can copy/paste into WordPress. No doubt I will continue to refine this aspect of my writing workflow.

    And if you’re curious about some of the other features I’m planning for my job application workflow, take a look at the TODO!