<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://thomasjunghans.ch/feed.xml" rel="self" type="application/atom+xml" /><link href="https://thomasjunghans.ch/" rel="alternate" type="text/html" /><updated>2026-08-22T08:59:19+02:00</updated><id>https://thomasjunghans.ch/feed.xml</id><title type="html">Thomas Junghans</title><subtitle>Swiss based web application developer.</subtitle><author><name>Thomas Junghans</name></author><entry><title type="html">The Responsiveness Trap: What Nobody Tells You About the Shift to Management</title><link href="https://thomasjunghans.ch/management/2026/08/03/the-responsiveness-trap.html" rel="alternate" type="text/html" title="The Responsiveness Trap: What Nobody Tells You About the Shift to Management" /><published>2026-08-03T00:00:00+02:00</published><updated>2026-08-03T00:00:00+02:00</updated><id>https://thomasjunghans.ch/management/2026/08/03/the-responsiveness-trap</id><content type="html" xml:base="https://thomasjunghans.ch/management/2026/08/03/the-responsiveness-trap.html"><![CDATA[<h1 id="the-responsiveness-trap-what-nobody-tells-you-about-the-shift-to-management">The Responsiveness Trap: What Nobody Tells You About the Shift to Management</h1>

<p>As an individual contributor, my inbox and chat messages were manageable. Tackling them as they arrived felt productive, and context, switching away from deep work was a welcome mental break.</p>

<p>Moving into management changed everything.</p>

<p>With direct reports, broader responsibilities, and an expanding network, communication turned into a continuous flood. My instinct was to lead by example and be fully accessible, answering every message and thread immediately.</p>

<p>The result was a classic trap. Important strategic tasks got pushed later into the day until they weren’t getting done at all. My fallback was working late into the evening when it was quiet, which quickly eroded my personal life and personal admin.</p>

<p>The turnaround required two things: shifting my mindset around availability, and implementing strict <strong>time-boxing</strong>, dividing the day into dedicated blocks for Email, Meetings, Team Support, Deep Work, and essential buffer time.</p>

<h2 id="the-reality-of-cognitive-limits">The Reality of Cognitive Limits</h2>

<p>Human cognitive capacity is finite. Research on context-switching demonstrates that every interruption carries a heavy recovery cost, taking an average of over 20 minutes to regain deep focus on the original task (Mark et al., 2008). Furthermore, continuously juggling unstructured inputs rapidly exhausts working memory and executive function (Sweller, 1988).</p>

<p>Trying to be everywhere at once doesn’t make you a responsive leader, it creates a bottleneck and triggers decision fatigue.</p>

<p>By applying Parkinson’s Law, the principle that work expands to fill the time allotted to it—time-boxing creates firm structural boundaries (Parkinson, 1955). It protects high-value work, prevents reactive demands from hijacking your entire calendar, and forces you to trust your team to resolve issues without your real-time input on every thread.</p>

<p>Segmenting your day isn’t just a scheduling hack; it’s a fundamental leadership skill.</p>

<hr />

<h2 id="references">References</h2>

<ul>
  <li><strong>Mark, G., Gudith, D., &amp; Klocke, U.</strong> (2008). <em>The cost of interrupted work: more speed and stress.</em> Proceedings of the SIGCHI Conference on Human Factors in Computing Systems, 107–110.</li>
  <li><strong>Parkinson, C. N.</strong> (1955). <em>Parkinson’s Law.</em> The Economist.</li>
  <li><strong>Sweller, J.</strong> (1988). <em>Cognitive load during problem solving: Effects on learning.</em> Cognitive Science, 12(2), 257–285.</li>
</ul>]]></content><author><name>Thomas Junghans</name></author><category term="management" /><category term="management" /><summary type="html"><![CDATA[Swiss based web application developer.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" /><media:content medium="image" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">My thoughts on “you can’t write perfect software”</title><link href="https://thomasjunghans.ch/software/2025/03/23/my-thoughts-on-you-cant-write-perfect-software.html" rel="alternate" type="text/html" title="My thoughts on “you can’t write perfect software”" /><published>2025-03-23T00:00:00+01:00</published><updated>2025-03-23T00:00:00+01:00</updated><id>https://thomasjunghans.ch/software/2025/03/23/my-thoughts-on-you-cant-write-perfect-software</id><content type="html" xml:base="https://thomasjunghans.ch/software/2025/03/23/my-thoughts-on-you-cant-write-perfect-software.html"><![CDATA[<p>I made the following notes while reading <em>The Pragmatic Programmer, 20th Anniversary Edition</em>, chapter 4, Tip 36: You Can’t Write Perfect Software:</p>

<blockquote>
  <p>Perfect Software doesn’t exist</p>
</blockquote>

<p>Everyone thinks they’re the only good driver on the planet, yet we all still drive defensively. <strong>That’s exactly how we should approach writing software.</strong></p>

<blockquote>
  <p>We are constantly interfacing with other people’s code - code that might not live up to our high standards…</p>
</blockquote>

<p>At a minimum, two people work on the same code: you today, and you a few months from now. Look back at code you wrote a while ago and you’ll probably find yourself scratching your head — no one writes perfect code, not even you and I.</p>

<p><strong>Test what you write.</strong> Make sure you’re as confident as possible in what you deliver.</p>

<blockquote>
  <p>Stick to small steps.</p>
</blockquote>

<p>I can’t stress this enough, and it’s harder than it sounds: <strong>write code in small increments.</strong></p>

<p>Write, test, commit, open a pull request. Rinse and repeat.</p>

<p>It sounds like more work, but in my experience, <strong>10 small pull requests get reviewed and merged faster than one big one with the same changes combined.</strong></p>]]></content><author><name>Thomas Junghans</name></author><category term="software" /><category term="software" /><category term="pragmatic" /><category term="programmer" /><summary type="html"><![CDATA[Swiss based web application developer.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" /><media:content medium="image" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">My web application stack in 2025</title><link href="https://thomasjunghans.ch/frontend/2025/03/08/my-web-application-stack-in-2025.html" rel="alternate" type="text/html" title="My web application stack in 2025" /><published>2025-03-08T00:00:00+01:00</published><updated>2025-03-08T00:00:00+01:00</updated><id>https://thomasjunghans.ch/frontend/2025/03/08/my-web-application-stack-in-2025</id><content type="html" xml:base="https://thomasjunghans.ch/frontend/2025/03/08/my-web-application-stack-in-2025.html"><![CDATA[<p>The techstack of the latest application I work on:</p>

<ul>
  <li><a href="https://vite.dev/">Vite</a> as the build tool, setup with <a href="https://www.typescriptlang.org/">Typescript</a>, <a href="https://react.dev/">React</a> and <a href="https://swc.rs/">SWC</a> (Rust based <em>S</em>peedy <em>W</em>eb <em>C</em>ompiler).</li>
  <li><a href="https://eslint.org/">Eslint</a>, to check for and avoid potential bugs, but also to write more readable code.</li>
  <li><a href="https://prettier.io/">Prettier</a>, to handle code formatting and style. I view any discussion about code style in a code review as 100% waste of time.</li>
  <li><a href="https://vitest.dev/guide/">Vitest</a> as the test runner.</li>
  <li><a href="https://swc.rs/">SWC</a> for compiling Typescript. It’s faster and less strict, which is a plus during development, however the source code is run against the official <a href="https://www.typescriptlang.org/download/">Typescript compiler</a> during testing.</li>
  <li><a href="https://testing-library.com/">Testing-Library</a> for its testing utlities.</li>
  <li><a href="https://tanstack.com/table/latest">Tanstack Table</a> for complex tables.</li>
  <li><a href="https://react.dev/">React</a> for writing re-usable components, handling view updates as a function of state, managing state (yes, no other state manager is used) and making working with the DOM easier.</li>
  <li><a href="https://tailwindcss.com/">TailwindCSS</a> for style and because it reduces options and thus decision fatigue, and its utility classes make building reusable and testable components a breeze.</li>
  <li><a href="https://reactrouter.com/">React Router</a> for routing and navigation.</li>
</ul>

<p>My editor of choice is <a href="https://code.visualstudio.com/">Visual Studio Code</a> and I use my favourite web browser, <a href="https://www.mozilla.org/en-US/firefox/">Firefox</a> to preview my work.</p>]]></content><author><name>Thomas Junghans</name></author><category term="frontend" /><category term="web" /><category term="application" /><category term="tailwindcss" /><category term="vite" /><category term="vitest" /><category term="swc" /><category term="typescript" /><category term="eslint" /><category term="react" /><summary type="html"><![CDATA[Swiss based web application developer.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" /><media:content medium="image" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The Importance of Live Coding Challenges in the Screening Process</title><link href="https://thomasjunghans.ch/recruiting/2024/11/01/the-importance-of-live-coding-challenges-during-the-screening-process.html" rel="alternate" type="text/html" title="The Importance of Live Coding Challenges in the Screening Process" /><published>2024-11-01T00:00:00+01:00</published><updated>2024-11-01T00:00:00+01:00</updated><id>https://thomasjunghans.ch/recruiting/2024/11/01/the-importance-of-live-coding-challenges-during-the-screening-process</id><content type="html" xml:base="https://thomasjunghans.ch/recruiting/2024/11/01/the-importance-of-live-coding-challenges-during-the-screening-process.html"><![CDATA[<p>Live coding challenges aren’t always fun, but they’re one of the most valuable ways to evaluate whether a candidate is a good fit for a software engineering role. Typically, the candidate completes an unfinished application until it passes a predefined set of tests and works as intended — a practical, hands-on skills assessment rather than a theoretical one.</p>

<p>During the challenge, candidates are usually observed by one or more experienced engineers from the hiring company. This matters: it reveals not just technical ability, but also how a candidate communicates and solves problems under pressure.</p>

<p>The challenge should match the candidate’s background, particularly what’s on their CV. If someone claims ten years of JavaScript experience, I expect that to show in how they perform.</p>

<p>Nobody can memorize an entire programming language, and candidates shouldn’t feel they need to know everything or stay perfectly composed throughout. If they get stuck, I’d rather they ask questions — that shows confidence, self-awareness, and honesty, not weakness.</p>

<p>I expect candidates to stay engaged: asking questions, thinking out loud, and talking through their approach as they work toward a solution. A solid grasp of core programming concepts — control flow, variables, operators, and expressions — is expected too.</p>

<p>Having sat on both sides of the table, I’ve found the best sessions are the ones with real back-and-forth, even a bit of laughter along the way.</p>

<p>A live coding challenge works best when both sides approach it with honesty and empathy: it’s on the candidate to be open about what they know and don’t, and on the interviewer to make the process feel safe rather than adversarial.</p>

<p>If the challenge feels daunting, the problem is often not the format itself, but the atmosphere around it. And if that’s the case — maybe you don’t want to work there after all.</p>]]></content><author><name>Thomas Junghans</name></author><category term="recruiting" /><category term="hiring" /><category term="recruiting" /><category term="screening" /><category term="cvs" /><category term="software" /><category term="engineer" /><summary type="html"><![CDATA[Swiss based web application developer.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" /><media:content medium="image" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Screening CVs with the Help of a Spreadsheet</title><link href="https://thomasjunghans.ch/recruiting/2024/09/08/screening-cvs-with-the-help-of-a-spreadsheet.html" rel="alternate" type="text/html" title="Screening CVs with the Help of a Spreadsheet" /><published>2024-09-08T00:00:00+02:00</published><updated>2024-09-08T00:00:00+02:00</updated><id>https://thomasjunghans.ch/recruiting/2024/09/08/screening-cvs-with-the-help-of-a-spreadsheet</id><content type="html" xml:base="https://thomasjunghans.ch/recruiting/2024/09/08/screening-cvs-with-the-help-of-a-spreadsheet.html"><![CDATA[<p>To bring more structure to my process of reviewing software engineer candidates’ CVs, I use a spreadsheet — Excel, in my case.</p>

<p>The columns include the candidate’s name, several key areas of interest, relevant criteria, and a scoring system.</p>

<p>Example:</p>

<table>
  <thead>
    <tr>
      <th>Candidate Name</th>
      <th>Java</th>
      <th>Oracle</th>
      <th>Docker</th>
      <th>Spring Boot</th>
      <th>Git</th>
      <th>HTTP</th>
      <th>Team Lead?</th>
      <th>3+ Years at Company?</th>
      <th>Finance Sector Experience?</th>
      <th>Score</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>Joe Soap</td>
      <td>1</td>
      <td>1</td>
      <td>0</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>1</td>
      <td>0</td>
      <td>7</td>
    </tr>
  </tbody>
</table>

<h2 id="picking-the-keywords">Picking the Keywords</h2>

<p>Suppose I’m searching for a senior TypeScript software engineer with expertise in React, TailwindCSS, Jest (for testing), ESLint (for code quality), and web applications. Ideally, the candidate would also have experience with structured products in the finance sector, plus leadership experience — either leading a team or serving as a technical lead.</p>

<p>From that description, I can pull out the following keywords and conditions:</p>

<ul>
  <li>TypeScript</li>
  <li>React</li>
  <li>TailwindCSS</li>
  <li>Jest</li>
  <li>Testing</li>
  <li>
    <p>ESLint</p>
  </li>
  <li>Has led a team?</li>
  <li>Has been technical lead on a team or project?</li>
  <li>Has worked at a bank or another company in the financial sector?</li>
  <li>Has worked as a software engineer for at least three years?</li>
</ul>

<h2 id="conditions">Conditions</h2>

<p>A few additional conditions I like to add:</p>

<ul>
  <li>Has a well-organized, grammatically correct CV, demonstrating attention to detail and professionalism in presentation.</li>
  <li>Has been at one company for at <a href="/recruiting/2024/09/08/stay-three-years-before-moving-on.html">least three years</a> (no job hopping, proven track record).</li>
</ul>

<p>Now it’s time to set up a spreadsheet with the following columns:</p>

<ul>
  <li>Candidate name</li>
  <li>JavaScript</li>
  <li>TypeScript</li>
  <li>React</li>
  <li>TailwindCSS</li>
  <li>Jest</li>
  <li>Testing</li>
  <li>ESLint</li>
  <li>Team lead</li>
  <li>Technical lead</li>
  <li>Financial sector</li>
  <li>Senior</li>
  <li>Neat CV</li>
  <li>3 years</li>
</ul>

<p>Each column is worth zero or one point. Depending on how important a criterion is, you can weight its column to reflect that — for example, if TypeScript is a critical skill, multiply its score by three.</p>

<p>Once the spreadsheet is set up, start reviewing résumés and score each candidate by asking questions like:</p>

<ol>
  <li>Does the candidate have JavaScript experience? If yes, award one point.</li>
  <li>Does the candidate have TypeScript experience? If no, award zero points.</li>
  <li>Does the candidate have ReactJS experience? If yes, award one point.</li>
</ol>

<p>At this point the candidate has two points — you get the idea for the rest.</p>

<p>The maximum possible score is 13 points (one per keyword or condition, more if columns are weighted). Review your resumes and focus on the candidates who score highest — say, 10 or above, or simply your top 10. Adjusting the weights lets you tailor the process toward whatever skills matter most for the role.</p>

<p>Some criteria are closely related — strong ReactJS skills without a solid JavaScript foundation are unlikely, for instance — so it’s worth considering related columns together rather than in isolation.</p>

<p>Feel free to experiment with and refine the scoring formula to suit your own hiring process.</p>]]></content><author><name>Thomas Junghans</name></author><category term="recruiting" /><category term="hiring" /><category term="recruiting" /><category term="screening" /><category term="cv" /><category term="resume" /><summary type="html"><![CDATA[Swiss based web application developer.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" /><media:content medium="image" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Stay at Your Job for Three Years Before Moving On</title><link href="https://thomasjunghans.ch/recruiting/2024/09/08/stay-three-years-before-moving-on.html" rel="alternate" type="text/html" title="Stay at Your Job for Three Years Before Moving On" /><published>2024-09-08T00:00:00+02:00</published><updated>2024-09-08T00:00:00+02:00</updated><id>https://thomasjunghans.ch/recruiting/2024/09/08/stay-three-years-before-moving-on</id><content type="html" xml:base="https://thomasjunghans.ch/recruiting/2024/09/08/stay-three-years-before-moving-on.html"><![CDATA[<p>As a team lead, one of the key things I evaluate when reviewing CVs is how long an engineer has stayed at previous companies, especially when they’ve held a role for three years or longer.</p>

<p>I believe engineers who switch jobs every six to twelve months miss out on valuable opportunities for growth. They rarely stick around long enough to see the long-term impact of their contributions—good or bad—and experiencing that impact is essential for professional development. By the time they’re through the initial ramp-up phase and start making real progress, they’re already moving on. That’s costly, both for the engineer and for the team left behind.</p>

<p>Recruiting and hiring software engineers who are a good fit for the team and company culture is both challenging and expensive—though still cheaper than hiring the wrong person. That’s a conversation for another time.</p>

<h2 id="settling-in-impact-growth-and-rewards">Settling In, Impact, Growth, and Rewards</h2>

<h3 id="the-first-year-settling-in">The First Year: Settling In</h3>
<p>The first year is about acclimating to the company: learning the people, the processes, and how things operate over a full fiscal year. It’s about getting grounded in the role and building a solid foundation.</p>

<h3 id="the-second-year-making-an-impact">The Second Year: Making an Impact</h3>
<p>The second year is when an engineer starts to make their mark. The “new person” phase is over, and they take full ownership of their work. This is when they begin to shape their reputation, build trust, and contribute meaningfully to the team’s success.</p>

<h3 id="the-third-year-growth-and-reaping-rewards">The Third Year: Growth and Reaping Rewards</h3>
<p>By the third year, the engineer has a deep understanding of the company, its technologies, and its challenges. They’re often the go-to person for specific applications or technical problems, earning the trust of colleagues and gaining additional freedoms. This phase brings greater fulfillment, as the engineer sees the tangible results of their work and takes on more significant challenges.</p>

<h2 id="rinse-and-repeat">Rinse and Repeat</h2>

<p>This cycle of settling in, making an impact, and growing can continue without leaving the company. Engineers can switch teams, take on new projects, explore different roles, or expand their responsibilities. Staying with a company long enough to fully grow into these opportunities not only benefits the engineer but also the company, fostering deeper expertise, stronger relationships, and a more cohesive culture.</p>]]></content><author><name>Thomas Junghans</name></author><category term="recruiting" /><category term="hiring" /><category term="recruiting" /><category term="screening" /><category term="cvs" /><category term="software" /><category term="engineer" /><summary type="html"><![CDATA[Swiss based web application developer.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" /><media:content medium="image" url="https://thomasjunghans.ch/assets/img/thomas-junghans_web_sw.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>