<?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://plainionist.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://plainionist.github.io/" rel="alternate" type="text/html" /><updated>2026-04-27T09:59:21+00:00</updated><id>https://plainionist.github.io/feed.xml</id><title type="html">Plainionist</title><subtitle></subtitle><author><name>Plainionist</name></author><entry><title type="html">Book Review: Staff Engineer: Leadership Beyond the Management Track</title><link href="https://plainionist.github.io/Staff-Engineer/" rel="alternate" type="text/html" title="Book Review: Staff Engineer: Leadership Beyond the Management Track" /><published>2026-04-27T00:00:00+00:00</published><updated>2026-04-27T00:00:00+00:00</updated><id>https://plainionist.github.io/Staff-Engineer</id><content type="html" xml:base="https://plainionist.github.io/Staff-Engineer/"><![CDATA[<p>If you are looking for a career in a larger software company beyond the traditional management track - 
meaning: without moving into people management - then this book can be a useful guide.</p>

<p><img src="https://plainionist.github.io/assets/staff-engineer.jpg" alt="Book: Staff Engineer: Leadership Beyond the Management Track" title="Staff Engineer: Leadership Beyond the Management Track" /></p>

<p><a href="https://www.amazon.com/Staff-Engineer-Leadership-Beyond-Management/dp/B097CNXP89/ref=sr_1_1">Staff Engineer: Leadership Beyond the Management Track</a></p>

<!--more-->

<p>The book explains different senior individual contributor roles, such as Tech Lead, Staff Engineer, and Software Architect.
More importantly, it explains what is expected from these roles beyond technical expertise.</p>

<p>And that is probably the most valuable part.</p>

<p>At this level, engineering is no longer only about writing better code yourself.
It is about creating leverage. You are expected to influence technical direction, improve collaboration, guide decisions, mentor others,
and help the organization make better trade-offs.</p>

<p>In that sense, the book gives a useful map for engineers who want to grow without becoming managers.
It also gives practical guidance on how to move toward these roles, what kind of work gets you there, and what expectations usually come with the title.</p>

<p>That said, I think the relevance depends heavily on context.</p>

<p>If you work in a smaller company, this book may not be that useful.
Many smaller organizations simply do not have such a clearly defined individual contributor ladder.
The same person may be developer, architect, tech lead, mentor, and delivery driver all at once — without anyone calling it “Staff Engineer.”</p>

<p>I also doubt the book is highly relevant if you or your company do not care much about titles.
A lot of the book is about understanding the shape of these roles inside larger organizations.
If your environment is more pragmatic and less title-driven, the value is more limited.</p>

<p>The second half of the book contains stories from people who took that career path.
I skipped those completely. Maybe they are useful if you want personal career examples, but for me they were not worth the time.</p>

<h2 id="tldr">TLDR;</h2>

<p>The book is useful if you want to understand how senior technical roles work in larger companies and how to grow beyond the management track.
It is less useful if you are mostly interested in better engineering practices, smaller-company realities, or hands-on technical leadership without the title system around it.</p>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[If you are looking for a career in a larger software company beyond the traditional management track - meaning: without moving into people management - then this book can be a useful guide. Staff Engineer: Leadership Beyond the Management Track]]></summary></entry><entry><title type="html">Book Review: Thinking Fast and Slow</title><link href="https://plainionist.github.io/Thinking-Fast-And-Slow/" rel="alternate" type="text/html" title="Book Review: Thinking Fast and Slow" /><published>2026-04-26T00:00:00+00:00</published><updated>2026-04-26T00:00:00+00:00</updated><id>https://plainionist.github.io/Thinking-Fast-And-Slow</id><content type="html" xml:base="https://plainionist.github.io/Thinking-Fast-And-Slow/"><![CDATA[<p>If you believe humans are mostly rational and think logically,<br />
then this book is for you 😉</p>

<p><img src="https://plainionist.github.io/assets/thinking-fast-and-slow.jpg" alt="Book: Thinking Fast and Slow" title="Thinking Fast and Slow" /></p>

<p><a href="https://www.amazon.com/Thinking-Fast-Slow-Daniel-Kahneman/dp/0374533555/ref=sr_1_1">Thinking Fast and Slow</a></p>

<!--more-->

<h2 id="the-key-idea">The key idea</h2>

<p>The core thesis of the book is that our thinking can be described as two systems.</p>

<p><strong>System 1</strong> is fast, automatic, intuitive, and effortless. It helps us recognize patterns, react quickly, read emotions, and make instant judgments.
But it also jumps to conclusions.</p>

<p><strong>System 2</strong> is slow, deliberate, analytical, and effortful. It helps us calculate, reason, compare options, and question assumptions.
But it is also lazy.</p>

<p>Most of the time, System 1 creates an answer first, and System 2 only checks it if there is enough reason or energy to do so.
That means we often feel rational while we are actually just justifying our first impression.
And because System 1 is very good at creating coherent stories from incomplete information, wrong conclusions can still feel obviously true.</p>

<p>This is not just interesting psychology; it has very practical consequences for how we explain ideas,
make decisions, give feedback, and collaborate as software engineers.</p>

<h2 id="5-practical-takeaways">5 practical takeaways</h2>

<h3 id="1-make-the-missing-context-visible">1. Make the missing context visible</h3>

<p>One of the strongest ideas in the book is: <strong>What you see is all there is.</strong></p>

<p>People reason based on the information available to them, not based on all the information that would be relevant.
And definitely not based on all the context you have in your head.</p>

<p>This matters a lot in collaboration. When people disagree with your proposal, they may not be irrational.
They may simply see a different part of the problem.</p>

<p>So before arguing for a solution, make the context visible.
What problem are we solving? What constraints do we have? What alternatives did we consider? What information influenced our conclusion?</p>

<p>Better context often creates better alignment.</p>

<h3 id="2-do-not-trust-confidence-too-much">2. Do not trust confidence too much</h3>

<p>The book shows again and again that confidence can be misleading.</p>

<p>A conclusion can feel correct simply because the story in our head is coherent.
But a coherent story is not the same as a true story.</p>

<p>This is important in discussions, planning, and architecture decisions.
Someone may sound very confident and still be wrong. And that someone may be you.</p>

<p>A useful habit is to ask: <strong>What evidence would change my mind?</strong></p>

<p>This moves the discussion away from confidence and toward verification.</p>

<h3 id="3-use-framing-consciously">3. Use framing consciously</h3>

<p>Kahneman shows that the way information is framed influences how people judge it.</p>

<p>The same facts can lead to different reactions depending on how they are presented.
That does not mean we should manipulate people. It means we should be responsible with framing.</p>

<p>In collaboration, this means we should be careful how we present problems, risks, and proposals.</p>

<p>“Refactoring this module will take two weeks.”</p>

<p>creates a different reaction than:</p>

<p>“Every new feature in this area currently takes longer because this module is hard to change.
Spending two weeks on refactoring should reduce the cost of all future changes in this area.”</p>

<p>Same topic. Different frame. Different understanding.</p>

<p>Good communication is not only about being logically correct. It is also about helping others see the point clearly.</p>

<h3 id="4-make-comparison-easy">4. Make comparison easy</h3>

<p>System 2 is slow, effortful, and lazy.</p>

<p>So if we want people to think carefully, we should not make the thinking unnecessarily hard.</p>

<p>This matters when we present options. Long verbal explanations are difficult to compare.
People will often anchor on the first option, remember the most vivid argument, or simply follow the most confident person in the room.</p>

<p>A small decision table is often better:</p>

<ul>
  <li>option</li>
  <li>benefit</li>
  <li>cost</li>
  <li>risk</li>
  <li>when it works</li>
  <li>when it fails</li>
</ul>

<p>This does not make the decision automatic. But it makes careful thinking easier.</p>

<h3 id="5-slow-down-important-decisions">5. Slow down important decisions</h3>

<p>Fast thinking is useful. We need intuition, experience, and quick judgment.</p>

<p>But the book is also a warning: intuition is not reliable everywhere.</p>

<p>For important decisions, we should deliberately slow down. Especially when the decision is expensive, risky, hard to reverse, or emotionally loaded.</p>

<p>Write the decision down. List alternatives. Separate facts from assumptions. Ask what could go wrong. Use an ADR when the decision matters.</p>

<p>Not because documents are magic.</p>

<p>But because writing forces System 2 to participate.</p>

<h2 id="conclusion">Conclusion</h2>

<p><strong>Do not believe everything you think.</strong> 😉</p>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[If you believe humans are mostly rational and think logically, then this book is for you 😉 Thinking Fast and Slow]]></summary></entry><entry><title type="html">Book Review: Radical Candor</title><link href="https://plainionist.github.io/Radical-Candor/" rel="alternate" type="text/html" title="Book Review: Radical Candor" /><published>2026-03-30T00:00:00+00:00</published><updated>2026-03-30T00:00:00+00:00</updated><id>https://plainionist.github.io/Radical-Candor</id><content type="html" xml:base="https://plainionist.github.io/Radical-Candor/"><![CDATA[<p>If you want to become a better <strong>people manager</strong> –<br />
or if you wish your manager would improve –<br />
this is definitely a book worth looking at 😉</p>

<p><img src="https://plainionist.github.io/assets/radical-candor.jpg" alt="Book: Radical Candor" title="Radical Candor" /></p>

<p><a href="https://www.amazon.com/Radical-Candor-KIM-SCOTT/dp/1509845380/ref=sr_1_5">Radical Candor</a></p>

<!--more-->

<p>Some time ago I started looking for material on how to become more effective inside an organization.</p>

<p>Technical skills alone are rarely enough.<br />
At some point, the real challenges become <strong>communication, feedback, and collaboration</strong>.</p>

<p>That search eventually led me to <em>Radical Candor</em>.</p>

<p>What immediately caught my attention was the subtitle:</p>

<blockquote>
  <p><em>How to get what you want by saying what you mean.</em></p>
</blockquote>

<p>That sounded exactly like the kind of practical advice I was looking for.</p>

<h2 id="what-i-took-away-from-the-book">What I Took Away From the Book</h2>

<p>While reading the book, I found several helpful ideas and practical hints.</p>

<p>Many concepts felt familiar because I had encountered similar ideas in the past, particularly in books by Tom DeMarco.<br />
Still, it was useful to see these principles applied specifically to <strong>leadership and management</strong>.</p>

<p>The central idea of the book is simple but powerful:</p>

<p>Good leadership requires a balance between <strong>caring personally</strong> and <strong>challenging directly</strong>.</p>

<p>Managers should be honest and direct with feedback, while also showing genuine care for the people they work with.</p>

<p>That balance is what the author calls <strong>Radical Candor</strong>.</p>

<h2 id="my-perspective">My Perspective</h2>

<p>I am not a people manager myself.</p>

<p>My role is closer to that of a <strong>technical lead</strong> or <strong>staff engineer</strong>, so I skipped some sections
that focus heavily on day-to-day management topics like hiring, performance reviews, or team administration.</p>

<p>However, many ideas in the book are still highly relevant even if you are not managing people directly.</p>

<p>In any technical role, you constantly interact with colleagues, give feedback on work, and discuss decisions.<br />
Learning how to do that <strong>clearly and respectfully</strong> is an important skill.</p>

<h2 id="final-thoughts">Final Thoughts</h2>

<p>Overall, I would say the book is <strong>definitely worth reading</strong>.</p>

<p>That said, it is probably most valuable for <strong>people managers or aspiring managers</strong>.</p>

<p>If you mainly work in technical roles, you will still find useful insights, but some parts of the book may feel less relevant.</p>

<p>Still, the core idea is simple and powerful:</p>

<p>Clear, honest communication combined with genuine care for people can dramatically improve how teams work together.</p>

<p>And that is a lesson that applies far beyond management.</p>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[If you want to become a better people manager – or if you wish your manager would improve – this is definitely a book worth looking at 😉 Radical Candor]]></summary></entry><entry><title type="html">Book Review: The Art of Systems Thinking</title><link href="https://plainionist.github.io/The-Art-of-Systems-Thinking/" rel="alternate" type="text/html" title="Book Review: The Art of Systems Thinking" /><published>2026-03-22T00:00:00+00:00</published><updated>2026-03-22T00:00:00+00:00</updated><id>https://plainionist.github.io/The-Art-of-Systems-Thinking</id><content type="html" xml:base="https://plainionist.github.io/The-Art-of-Systems-Thinking/"><![CDATA[<p>When I was researching how to improve my problem-solving skills -
which are an essential part of being a software engineer - I somehow came across this book.
Of course the second part of the title immediately caught my attention.</p>

<p>At first I could not make much sense of the first part of the title, but I bought the book anyway.
After reading the introduction it suddenly made perfect sense, because already there I learned:</p>

<p>In systems thinking, a system is more than just the sum of its parts.</p>

<blockquote>
  <p>A system is something that maintains its existence and functions
as a whole through the interaction of its parts.</p>

  <p>Your body is the perfect example. It consists of many different parts and organs,
each acting separately yet all working together and each affecting the others.</p>
</blockquote>

<p><img src="https://plainionist.github.io/assets/the-art-of-systems-thinking.jpg" alt="Book: The Art of Systems Thinking: Essential Skills for Creativity and Problem Solving" title="The Art of Systems Thinking: Essential Skills for Creativity and Problem Solving" /></p>

<p><a href="https://www.amazon.com/Art-Systems-Thinking-Essential-Creativity/dp/0722534426/ref=sr_1_1">The Art of Systems Thinking: Essential Skills for Creativity and Problem Solving</a></p>

<!--more-->

<p>Once you start looking at the world through the lens of systems thinking, you begin to notice systems everywhere.
We live in a world shaped by systems: political systems, economic systems, belief systems, organizations, teams - and of course software systems.</p>

<p>One quote from the book captures this shift in perspective very well:</p>

<blockquote>
  <p>If you cut a system in half, you do not get two smaller systems,
but a damaged system that will probably not function.</p>
</blockquote>

<p>This illustrates why traditional scientific analysis - breaking things into smaller pieces - only provides a limited understanding.
Many important behaviors arise from the <strong>interactions between parts</strong>, not from the parts themselves.</p>

<p>To truly understand systems - whether a team, an organization, or a complex software system - we must respect this idea.</p>

<p>This is especially relevant in software engineering.</p>

<p>A team is more than a group of individuals.
An architecture is more than a collection of modules.
A development process is more than a sequence of activities.</p>

<p>What actually shapes the outcome are the <strong>connections and dependencies between the elements</strong>.</p>

<p>This book provides a framework for thinking about exactly that.
It encourages you to step back from isolated incidents and ask a much more useful question:</p>

<p><strong>What kind of system is producing these results?</strong></p>

<p>Instead of focusing on individual mistakes or symptoms,
systems thinking pushes us to examine the structure that creates the patterns we observe.</p>

<p>The behavior of a system is largely determined by <strong>how its components interact</strong>, not simply by the components themselves.</p>

<p>Many of the most interesting properties of a system belong to the <strong>whole</strong>, not to any individual part.
When we take a system apart to analyze it, we often lose exactly the properties we were trying to understand.</p>

<p>Because the elements within a system influence each other, systems often resist attempts to change them.
But when change finally happens, it can sometimes occur abruptly and dramatically.</p>

<p>A key shift in systems thinking is moving away from linear cause-and-effect reasoning.
Instead of straight lines, systems are better understood as <strong>circles of influence</strong>.</p>

<p>The essence of systems are feedback loops, which we can split into two types:</p>

<ul>
  <li><strong>reinforcing feedback</strong>, which amplifies change and pushes the system further in the same direction</li>
  <li><strong>balancing feedback</strong>, which counteracts change and stabilizes the system</li>
</ul>

<p>All systems have a goal, a desired state where the system tends to settle or remain balanced.</p>

<p>Another important aspect of systems is <strong>delay</strong>.
Cause and effect are often separated in time because feedback loops take time to complete.
This is one reason why systems can behave in ways that appear confusing or counterintuitive.</p>

<p>Most systems contain certain points where <strong>small adjustments can lead to disproportionately large results</strong>.
These leverage points are far more effective places for intervention than applying more effort everywhere.</p>

<p>Interestingly, some of the most powerful leverage points lie in <strong>mental models</strong>.</p>

<p>Mental models are the beliefs and assumptions we rely on to interpret the world.
They shape how we understand cause and effect and how we decide to act.</p>

<p>In that sense, our mental models themselves form a kind of system.
If these internal models are incomplete or flawed, we may unknowingly recreate the same systemic problems.</p>

<p>Learning can also be viewed through a systems perspective.</p>

<p>Learning follows a feedback pattern: we take action, observe the results, adjust our understanding, and act again.
Over time this cycle moves us closer to our intended outcome.</p>

<p>Since the world is always richer than any single representation we hold, it is important to consider <strong>multiple perspectives</strong>.
Broadening our viewpoints expands our mental models and improves our ability to understand the system.</p>

<p>The final part of the book demonstrates how systems can be <strong>visualized through diagrams and causal maps</strong>.
Making relationships and feedback loops visible helps turn vague intuition into something that can be analyzed and discussed.</p>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[When I was researching how to improve my problem-solving skills - which are an essential part of being a software engineer - I somehow came across this book. Of course the second part of the title immediately caught my attention. At first I could not make much sense of the first part of the title, but I bought the book anyway. After reading the introduction it suddenly made perfect sense, because already there I learned: In systems thinking, a system is more than just the sum of its parts. A system is something that maintains its existence and functions as a whole through the interaction of its parts. Your body is the perfect example. It consists of many different parts and organs, each acting separately yet all working together and each affecting the others. The Art of Systems Thinking: Essential Skills for Creativity and Problem Solving]]></summary></entry><entry><title type="html">Book Review: Extreme Ownership</title><link href="https://plainionist.github.io/Extreme-Ownership/" rel="alternate" type="text/html" title="Book Review: Extreme Ownership" /><published>2026-03-15T00:00:00+00:00</published><updated>2026-03-15T00:00:00+00:00</updated><id>https://plainionist.github.io/Extreme-Ownership</id><content type="html" xml:base="https://plainionist.github.io/Extreme-Ownership/"><![CDATA[<p>Software projects are almost always executed in teams.</p>

<p>When you work in a great team, it’s one of the most enjoyable aspects of the job.
But when teams don’t function well, the amount of friction can be enormous.</p>

<p>A key factor behind great teams is great technical leadership.</p>

<p>Good tech leads are not only strong in technical topics.
More importantly, they need leadership skills.</p>

<p>In that regard, military teams and software teams are not so different.
Both operate under pressure, must coordinate complex work, and rely heavily on trust and clear communication.</p>

<p>If you want to understand what truly matters in leadership,
<strong>this book is an excellent resource.</strong></p>

<p>That’s why I picked this book, and if you are a tech lead - or want to become one -
I highly recommend reading it.</p>

<p><img src="https://plainionist.github.io/assets/extreme-ownership.jpg" alt="Book: Extreme Ownership: How U.S. Navy SEALs Lead and Win" title="Extreme Ownership: How U.S. Navy SEALs Lead and Win" /></p>

<p><a href="https://www.amazon.com/Extreme-Ownership-U-S-Navy-SEALs/dp/1250183863/ref=tmm_hrd_swatch_0">Extreme Ownership: How U.S. Navy SEALs Lead and Win</a></p>

<!--more-->

<p>The book presents <strong>12 principles to “lead and win.”</strong></p>

<p>Each chapter follows the same structure:</p>

<p>A <strong>story from Navy SEAL operations</strong> in Iraq that sets the stage for the principle and helps build an intuitive understanding of why it matters.<br />
If you are not interested in the military details, these sections can be read quickly.</p>

<p>The <strong>principle section</strong> then explains the core idea.</p>

<p>Finally, the <strong>business section</strong> shows how the principle applies in organizations and teams.</p>

<p>Here are the <strong>12 leadership principles</strong> from the book.</p>

<h2 id="1-extreme-ownership">1. Extreme Ownership</h2>

<blockquote>
  <p>The leader must own everything in his or her world.</p>
</blockquote>

<p>Leaders must take full responsibility for everything in their team’s results.
There are no excuses and no blaming others.
When leaders own failures, they can fix the real problems.</p>

<h2 id="2-no-bad-teams-only-bad-leaders">2. No Bad Teams, Only Bad Leaders</h2>

<blockquote>
  <p>When it comes to standards, as a leader, it’s not what you preach, it’s what you tolerate.</p>
</blockquote>

<p>Team performance reflects leadership quality.
If a team fails, the leader must change the approach rather than blame individuals.
Good leadership can turn around even poorly performing teams.</p>

<h2 id="3-believe">3. Believe</h2>

<blockquote>
  <p>In order to convince and inspire others to follow and accomplish a mission
a leader must be a true believer in the mission.</p>
</blockquote>

<p>Leaders must truly believe in the mission.
If they don’t, they cannot convincingly communicate it to the team.
Understanding the “why” is essential to gain commitment.</p>

<h2 id="4-check-the-ego">4. Check the Ego</h2>

<p>Ego prevents learning, collaboration, and effective decision-making.
Leaders must stay humble and open to feedback.
Mission success is more important than personal pride.</p>

<h2 id="5-cover-and-move">5. Cover and Move</h2>

<p>Teams must support and protect each other to succeed.
Success depends on collaboration between units rather than isolated efforts.
The entire organization must work as one team.</p>

<h2 id="6-simple">6. Simple</h2>

<blockquote>
  <p>And when things go wrong — and they inevitably do — complexity compounds issues
that can spiral out of control into total disaster.</p>
</blockquote>

<p>Plans must be simple and easy to understand.
Complexity creates confusion and increases the risk of failure.
Clear and straightforward plans improve execution.</p>

<h2 id="7-prioritize-and-execute">7. Prioritize and Execute</h2>

<blockquote>
  <p>“Relax, look around, make a call.”</p>
</blockquote>

<p>When multiple problems arise, leaders must focus on the most critical one first.
Solve issues step by step instead of becoming overwhelmed.
Calm prioritization enables effective action in chaos.</p>

<h2 id="8-decentralized-command">8. Decentralized Command</h2>

<blockquote>
  <p>Every tactical-level team leader must understand not just what to do but why they are doing it.</p>
</blockquote>

<p>Decision-making authority should be pushed down to leaders closest to the problem.
Everyone must understand the mission well enough to act independently.
This creates speed, flexibility, and resilience.</p>

<h2 id="9-plan">9. Plan</h2>

<p>Leaders must carefully plan missions and involve key team members in the process.
Clear communication of the plan ensures everyone understands their role.
Preparation reduces uncertainty and improves execution.</p>

<h2 id="10-leading-up-and-down-the-chain-of-command">10. Leading Up and Down the Chain of Command</h2>

<p>Leaders must manage relationships with both superiors and subordinates.
If higher leadership doesn’t understand something, it’s the leader’s responsibility to explain it clearly.
Ownership extends both upward and downward.</p>

<h2 id="11-decisiveness-amid-uncertainty">11. Decisiveness Amid Uncertainty</h2>

<blockquote>
  <p>There is no 100 percent right solution. The picture is never complete.</p>
</blockquote>

<p>Leaders must make decisions even when information is incomplete.
Waiting for perfect certainty often leads to missed opportunities.
Timely action is usually better than hesitation.</p>

<h2 id="12-discipline-equals-freedom">12. Discipline Equals Freedom</h2>

<p>Discipline in planning, training, and execution creates freedom in operations.
Consistent discipline reduces chaos and improves performance.
The more disciplined the team, the more effectively it can operate.</p>

<h2 id="final-thoughts">Final Thoughts</h2>

<p>While reading the book, I could immediately relate many of the principles to my daily work.</p>

<p>If you take a fresh look at how your team operates,<br />
I’m pretty sure you’ll recognize some of the same patterns.</p>

<p>And that’s a good place to start improving.</p>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[Software projects are almost always executed in teams. When you work in a great team, it’s one of the most enjoyable aspects of the job. But when teams don’t function well, the amount of friction can be enormous. A key factor behind great teams is great technical leadership. Good tech leads are not only strong in technical topics. More importantly, they need leadership skills. In that regard, military teams and software teams are not so different. Both operate under pressure, must coordinate complex work, and rely heavily on trust and clear communication. If you want to understand what truly matters in leadership, this book is an excellent resource. That’s why I picked this book, and if you are a tech lead - or want to become one - I highly recommend reading it. Extreme Ownership: How U.S. Navy SEALs Lead and Win]]></summary></entry><entry><title type="html">Book Review: Prompt Engineering for LLMs: The Art and Science of Building Large Language Model-Based Applications</title><link href="https://plainionist.github.io/Prompt-Engineering-for-LLMs/" rel="alternate" type="text/html" title="Book Review: Prompt Engineering for LLMs: The Art and Science of Building Large Language Model-Based Applications" /><published>2026-03-03T00:00:00+00:00</published><updated>2026-03-03T00:00:00+00:00</updated><id>https://plainionist.github.io/Prompt-Engineering-for-LLMs</id><content type="html" xml:base="https://plainionist.github.io/Prompt-Engineering-for-LLMs/"><![CDATA[<p>Most of us see the huge advantage AI gives us - when used wisely.</p>

<p>We can use it as intelligent auto-completion,
or ask it to implement entire features.</p>

<p>But to get good results, we need to engineer good prompts.</p>

<p>That’s why I picked up <em>Prompt Engineering for LLMs</em>.
Here’s what I learned.</p>

<p><img src="https://plainionist.github.io/assets/prompt-engineering-for-llms.jpg" alt="Book: Prompt Engineering for LLMs: The Art and Science of Building Large Language Model-Based Applications" title="Prompt Engineering for LLMs: The Art and Science of Building Large Language Model-Based Applications" /></p>

<p><a href="https://www.amazon.com/Prompt-Engineering-LLMs-Model-Based-Applications/dp/1098156153/ref=sr_1_1">Prompt Engineering for LLMs: The Art and Science of Building Large Language Model-Based Applications</a></p>

<!--more-->

<p>The book primarily targets developers who want to build LLM applications.
Think of a chat application like ChatGPT or a coding assistant like Copilot.</p>

<p>But even if you do not plan to build such systems yourself,
understanding how these applications are constructed gives you deep insight into how today’s LLMs and LLM-based products really work.</p>

<p>The book is divided into three parts.</p>

<h2 id="part-1--fundamentals">Part 1 – Fundamentals</h2>

<p>The first part covers the fundamentals of large language models.</p>

<p>It explains how they work, how they process data, what they can do, and just as importantly,what they cannot do.
It also introduces the core architecture of LLM-based applications.</p>

<p>This section is especially helpful if you mainly use LLMs but want to understand what is happening behind the scenes.
It builds the conceptual foundation you need before thinking about prompt engineering in a more systematic way.</p>

<h3 id="part-2--engineering-prompts">Part 2 – Engineering Prompts</h3>

<p>The second part focuses on prompt engineering itself.</p>

<p>Some of the concepts are useful for everyday users of LLM tools.
But the primary audience here is developers who design and build LLM applications.</p>

<p>This section explains how to gather relevant content, how to structure and preprocess that content,
and how to assemble effective prompts using different techniques.
It moves from theory to applied engineering and shows how prompts are not just “questions,”
but carefully constructed inputs that shape the model’s output.</p>

<h3 id="part-3--advanced-topics">Part 3 – Advanced Topics</h3>

<p>The third part goes deeper into advanced topics.</p>

<p>It discusses integrating tool execution into prompts and building more capable LLM applications.
It covers how to simulate reasoning, how to design conversational agents, and how to structure larger LLM workflows.</p>

<p>The book concludes with a discussion about evaluating the quality of LLM applications once you have built them -
which is an important and often overlooked aspect.</p>

<h3 id="final-thoughts">Final Thoughts</h3>

<p>If you simply want to use LLMs more effectively in your daily work, you probably do not need to spend the money.
There are cheaper resources that teach basic prompt tips.</p>

<p>But if you want to deeply understand how LLM applications work internally - and eventually build your own - this is a solid book.</p>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[Most of us see the huge advantage AI gives us - when used wisely. We can use it as intelligent auto-completion, or ask it to implement entire features. But to get good results, we need to engineer good prompts. That’s why I picked up Prompt Engineering for LLMs. Here’s what I learned. Prompt Engineering for LLMs: The Art and Science of Building Large Language Model-Based Applications]]></summary></entry><entry><title type="html">Book Review: Beyond Vibe Coding - From Coder to AI-Era Developer</title><link href="https://plainionist.github.io/Beyond-Vibe-Coding/" rel="alternate" type="text/html" title="Book Review: Beyond Vibe Coding - From Coder to AI-Era Developer" /><published>2026-02-16T00:00:00+00:00</published><updated>2026-02-16T00:00:00+00:00</updated><id>https://plainionist.github.io/Beyond-Vibe-Coding</id><content type="html" xml:base="https://plainionist.github.io/Beyond-Vibe-Coding/"><![CDATA[<p>AI can get your project 70% done in minutes.<br />
But what about the hard 30% - the part where real engineering begins?</p>

<p><em>Beyond Vibe Coding</em> cuts through the hype and draws a sharp line between short-term velocity and sustainable AI-assisted engineering.<br />
It explains why prompting is really about expressing intent, why fundamentals still matter, and how juniors, mid-levels, and seniors must adapt differently in the AI era.</p>

<p><img src="https://plainionist.github.io/assets/beyond-vibe-coding.jpg" alt="Book: Beyond Vibe Coding: From Coder to AI-Era Developer" title="Beyond Vibe Coding: From Coder to AI-Era Developer" /></p>

<p><a href="https://www.amazon.com/Beyond-Vibe-Coding-AI-Era-Developer/dp/B0F6S5425Y/ref=sr_1_1">Beyond Vibe Coding: From Coder to AI-Era Developer</a></p>

<!--more-->

<p>AI tools are now part of everyday development.<br />
The real question is not whether we use them - but how.</p>

<p>How do we integrate AI without sacrificing quality, maintainability, and engineering discipline?</p>

<p><em>Beyond Vibe Coding: From Coder to AI-Era Developer</em> attempts to answer exactly that.</p>

<p>The book introduces a useful distinction:</p>

<ul>
  <li><strong>Vibe coding</strong> optimizes for short-term speed.</li>
  <li><strong>AI-assisted engineering</strong> optimizes for sustained velocity and reliability.</li>
</ul>

<p>AI can accelerate you - but only if it is embedded in real engineering practices.</p>

<h2 id="programming-with-intent">Programming With Intent</h2>

<p>The central shift the author proposes is subtle but important:<br />
AI development is not about generating code - it’s about expressing intent clearly.</p>

<p>Prompting, in this view, is less about clever tricks and more about communication discipline:</p>

<ul>
  <li>Provide context</li>
  <li>Be specific</li>
  <li>Avoid overloading</li>
  <li>Refine iteratively</li>
</ul>

<p>Treat AI like a junior developer. Give direction. Review the results. Iterate.</p>

<p>The book introduces techniques such as role prompting and chain-of-thought reasoning, but the deeper takeaway is this: effective prompting requires structured thinking.</p>

<h2 id="the-70-problem">The 70% Problem</h2>

<p>One of the strongest ideas in the book is the “70% problem.”</p>

<p>AI can reliably scaffold a feature, generate boilerplate, or get a system mostly running.<br />
But the final 30% - domain-specific decisions, edge cases, architectural trade-offs - remain human territory.</p>

<p>AI handles <strong>accidental complexity</strong> well.<br />
Engineers still own <strong>essential complexity</strong>.</p>

<p>That distinction matters.</p>

<ul>
  <li>You must understand the generated code</li>
  <li>You must review and test it</li>
  <li>You must debug it when it breaks</li>
  <li>You must not merge what you cannot explain</li>
</ul>

<p>The last 30% is where real engineering begins.
For juniors especially, skipping that part risks long-term skill atrophy.</p>

<h2 id="practical-guidelines">Practical Guidelines</h2>

<p>The book reinforces pragmatic, almost conservative engineering habits:</p>

<ul>
  <li>One task per session to avoid context confusion</li>
  <li>Keep prompts concise and focused</li>
  <li>Treat AI output like code from a junior developer</li>
  <li>Don’t merge what you don’t understand</li>
  <li>Provide coding standards and architectural rules explicitly</li>
  <li>Share effective prompts within the team</li>
  <li>Reflect and iterate regularly</li>
</ul>

<p>In short: AI does not replace engineering practices - it amplifies them.</p>

<h2 id="adapting-to-the-ai-era">Adapting to the AI Era</h2>

<p>The book makes one thing clear: AI does not level the playing field.<br />
It changes how each experience level creates value.</p>

<p><strong>For seniors, AI is leverage.</strong></p>

<ul>
  <li>Act as architect and editor-in-chief</li>
  <li>Use AI to accelerate large refactorings and strategic improvements - without losing control</li>
  <li>Continue cultivating domain mastery and long-term foresight</li>
</ul>

<p>Experience becomes more valuable, not less.<br />
AI amplifies judgment.</p>

<p><strong>Mid-level engineers are encouraged to grow beyond feature implementation.</strong></p>

<ul>
  <li>Build deeper domain expertise</li>
  <li>Take ownership of code review and quality assurance</li>
  <li>Develop systems thinking, architecture, and design skills</li>
</ul>

<p>The shift is subtle but important: move from <em>writing code</em> to <em>understanding systems</em>.</p>

<p><strong>For juniors, AI is an accelerator - but only if fundamentals are solid.</strong></p>

<ul>
  <li>Learn the fundamentals - don’t skip the “why”</li>
  <li>Practice problem-solving and debugging without the AI safety net</li>
  <li>Build an eye for maintainability</li>
  <li>Develop prompting and tooling skills deliberately</li>
</ul>

<p>AI can speed up progress.<br />
It cannot replace foundational understanding.</p>

<h2 id="final-thoughts">Final Thoughts</h2>

<p>If you are new to AI-assisted development, this book provides a structured and grounded starting point.<br />
It helps you avoid common mistakes and establish sustainable workflows from the beginning.</p>

<p>If you have already experimented extensively with vibe coding and developed your own patterns, you may find fewer surprises.
The book consolidates solid ideas rather than introducing radically new ones.</p>

<p>Still, it offers an important reminder:</p>

<p>While tools evolve, software engineering fundamentals still apply.</p>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[AI can get your project 70% done in minutes. But what about the hard 30% - the part where real engineering begins? Beyond Vibe Coding cuts through the hype and draws a sharp line between short-term velocity and sustainable AI-assisted engineering. It explains why prompting is really about expressing intent, why fundamentals still matter, and how juniors, mid-levels, and seniors must adapt differently in the AI era. Beyond Vibe Coding: From Coder to AI-Era Developer]]></summary></entry><entry><title type="html">The Dark Side of Pull Requests for Managers</title><link href="https://plainionist.github.io/Dark-Side-of-PRs-for-Managers/" rel="alternate" type="text/html" title="The Dark Side of Pull Requests for Managers" /><published>2025-11-02T00:00:00+00:00</published><updated>2025-11-02T00:00:00+00:00</updated><id>https://plainionist.github.io/Dark-Side-of-PRs-for-Managers</id><content type="html" xml:base="https://plainionist.github.io/Dark-Side-of-PRs-for-Managers/"><![CDATA[<h2 id="abstract">Abstract</h2>

<p>Pull Requests (PRs) were invented for Open Source projects.
They allow “untrusted contributors” to suggest changes and ask “trusted committers” to pull them in.
Committers review these requests on their own schedule, leave comments, demand changes, or simply reject the “pull request” altogether.
For this reason, PRs work extremely well in Open Source.</p>

<p>Work in commercial teams is fundamentally different.
Team members collaborate long-term, share goals, and trust each other.
Changes are not “suggested” but planned - it’s rarely a question of whether but how something gets done.</p>

<p>PRs were not made for this.
They optimize for control and gatekeeping, while commercial teams optimize for flow and delivery speed without sacrificing quality.</p>

<blockquote>
  <p>Using pull requests for code changes by your own team members is like having your family members go through an airport security checkpoint to enter your home.
It’s a costly solution to a different problem.</p>

  <p>Kief Morris, Why your team doesn’t need to use pull requests</p>
</blockquote>

<!--more-->

<h2 id="motivation">Motivation</h2>

<p>Many great articles and YouTube videos already discuss this topic - see the references -
including well-known voices like Dave Farley, author of “Continuous Delivery”.</p>

<p>This article provides a concise overview of the real-world consequences of PRs for commercial teams,
written for managers and team leads.</p>

<h2 id="setting-the-stage">Setting the Stage</h2>

<p>Before getting into the arguments, let’s clarify a few facts.</p>

<h3 id="git--pr">Git ≠ PR</h3>

<p>Git doesn’t require Pull Requests.
It’s a version control system that works perfectly well without them.</p>

<h3 id="code-review--pr">Code Review ≠ PR</h3>

<p>Code reviews are valuable for code quality, knowledge sharing, and finding bugs.
PRs are not required to practice code reviews.</p>

<h3 id="working-incrementally">Working incrementally</h3>

<p>Developers rarely complete a feature in a single commit.
Bug fixes might fit in one, but most features need multiple commits to be completed.</p>

<h2 id="how-pull-requests-work">How Pull Requests work</h2>

<p>Pull Requests always require a branch.
A PR can contain one or many commits.
It is a “gated submission”: changes are integrated into mainline only after all gates have passed - usually automated tests and code review.
A developer cannot start a second PR on the same branch; further changes will update the existing PR.</p>

<h2 id="the-arguments">The Arguments</h2>

<p><img src="https://plainionist.github.io/assets/flow.drawio.png" alt="" /></p>

<h3 id="passing-gates-takes-time">Passing gates takes time</h3>

<p>Running build pipelines takes time. The larger the codebase, the longer it takes.
Reviews take time as well. A PR may wait hours or even days for review.
If reviews are expected immediately, context switching creates new problems (see “reviewing code immediately”).</p>

<h3 id="continuing-on-the-same-task-during-pr-verification-is-difficult">Continuing on the same task during PR verification is difficult</h3>

<p>Feature work usually requires several changes.
While one PR is under review, continuing the same story requires creating a new branch from the first one.
This adds effort and becomes messy if the first PR fails validation.</p>

<h3 id="bigger-prs">Bigger PRs</h3>

<p>To avoid this overhead, developers tend to group several changes together and open one PR when the story is finished.
As a result, a single PR often contains multiple logical changes.</p>

<h3 id="longer-living-branches">Longer-living branches</h3>

<p>Producing more changes takes more time, which means feature branches live longer.</p>

<h3 id="delayed-feedback">Delayed Feedback</h3>

<p>The longer branches live, the longer feedback gets delayed - from tests, from teammates reviewing the design,
and from product owners or users who can only verify that the right feature was built after integration.</p>

<h3 id="higher-reluctance-to-apply-global-refactorings">Higher reluctance to apply global refactorings</h3>

<p>The longer branches live, the higher the reluctance to apply refactorings that span multiple files
or affect public APIs because developers fear the effort of complex merges.
Skipping refactoring means not paying back technical debt, which means lowering code quality.</p>

<h3 id="bigger-integration-chunks">Bigger integration chunks</h3>

<p>The bigger the PR, the bigger the chunk of code changes that is integrated at once into mainline.</p>

<h3 id="higher-merge-complexity">Higher merge complexity</h3>

<p>The bigger the chunks that get integrated, the higher the risk of complex merges.
Complex merges cause more effort.</p>

<h3 id="higher-risk-of-bugs">Higher risk of bugs</h3>

<p>The more complex the merge, the higher the risk of mistakes and regressions, reducing product quality.</p>

<h3 id="harder-to-analyze-build-failures">Harder to analyze build failures</h3>

<p>The bigger the chunks that get integrated, the harder it is to figure out which change actually caused the issue
when the build fails which increases the effort required to finish the feature.</p>

<h3 id="higher-reluctance-to-reject-changes">Higher reluctance to reject changes</h3>

<p>Bigger PRs also raise the mental barrier for reviewers to reject changes and demand rework.
In the end, it’s one team aiming for the same goal - and it’s hard to tell a teammate to throw away a week’s work.</p>

<h3 id="reduced-need-to-work-incrementally">Reduced need to work incrementally</h3>

<p>It is common sense in the software industry that working incrementally leads to less waste and better results.</p>

<p>But when accepting bigger PRs, developers lose both the incentive and the skill to work in small increments.
Over time, this leads to even larger PRs.</p>

<h3 id="harder-reviews">Harder reviews</h3>

<p>Reviewing large, multi-purpose changes takes longer and increases cognitive load.
Feedback becomes shallow, resulting in a higher risk of technical debt or even new bugs.</p>

<h3 id="higher-barrier-for-minor-cleanups-boy-scout-rule">Higher barrier for minor cleanups (Boy Scout Rule)</h3>

<p>When integrating small improvements requires the overhead of a PR, developers skip them.
Over time, this lowers code quality.</p>

<h2 id="but-what-about-">But what about …</h2>

<h3 id="-working-in-isolation">… working in isolation?</h3>

<p>Feature branches may feel productive because they isolate work, but that’s a local optimization.
It benefits an individual’s focus at the expense of team flow.</p>

<h3 id="-running-ci-builds-on-feature-branches">… running CI builds on feature branches?</h3>

<p>Running pipelines on branches is possible if the build farm scales, but it provides partial feedback at best.
It shows whether a branch works in isolation - not whether it integrates with everyone else’s changes.
By definition, that’s not Continuous Integration.</p>

<h3 id="-reviewing-code-immediately">… reviewing code immediately?</h3>

<p>Immediate reviews reduce PR delay but force frequent context switches for reviewers.
Each context switch costs time (~ 15 minutes) and mental focus.
More PRs mean more context switches, lowering overall team productivity.</p>

<h3 id="-short-lived-branches">… short-lived branches?</h3>

<p>Short-lived branches reduce some problems but don’t resolve the fundamental ones.
Each PR still acts as a gatekeeper, breaking the flow.
More PRs simply multiply the overhead.</p>

<h2 id="continuous-integration">Continuous Integration</h2>

<p>Continuous Integration (CI) is the alternative that optimizes for flow and productivity.</p>

<p>By default, there are no feature branches.
All developers commit directly to mainline and every commit triggers the build pipeline.
Tests run after each commit, and code reviews happen asynchronously. No gatekeeping!</p>

<p>The key point is that integration does not mean release.
That’s why changes are integrated even before a feature is completed.
Still, every change getting integrated must meet production quality.</p>

<p>Builds can fail - that’s normal.
When mainline breaks, fixing it becomes the top priority (“green-to-green” principle).
Because integrations are small, fixes are quick and rollbacks low-risk.</p>

<p>Even if the latest commit is broken, the last green build is always releasable.
Release branches can be created from there if needed.</p>

<p>CI enforces small, incremental changes, solving all the problems introduced by PR-based workflows.
It aligns developer behavior with team performance rather than individual convenience.</p>

<h2 id="are-branches-and-prs-entirely-bad">Are branches and PRs entirely bad?</h2>

<p>Of course not - they have legitimate uses.</p>

<h3 id="prototypes">Prototypes</h3>

<p>When exploring a problem using a prototype, it’s fine to work on a branch.
The branch helps manage work-in-progress, but its purpose is learning, not integration.
Once a solution is known, development restarts cleanly on mainline.</p>

<h3 id="integrating-dependencies">Integrating Dependencies</h3>

<p>External dependencies come from outside the team and are therefore trusted less.
Using a gated submission for validation before integration is often appropriate.</p>

<h2 id="but-why-does-everyone-else-do-prs-then">But why does everyone else do PRs then?</h2>

<p>Many teams adopted PRs because they are the default in popular tools like GitHub and GitLab.
Others assume it’s the standard way to use Git.
Few stop to question whether a model designed for untrusted collaboration fits a trusted commercial team.</p>

<h2 id="conclusion">Conclusion</h2>

<p>The key question is: what do you want to optimize for?</p>

<p>If your goal is control, use PRs.
If your goal is flow and productivity, adopt Continuous Integration.</p>

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

<ul>
  <li><a href="https://medium.com/better-programming/are-pull-requests-holding-back-your-team-e8aec48986c2">Are Pull Requests Holding Back Your Team?</a></li>
  <li><a href="https://hamvocke.com/blog/better-off-without-pull-requests/">You Might Be Better Off Without Pull Requests</a></li>
  <li><a href="https://thinkinglabs.io/articles/2021/04/26/on-the-evilness-of-feature-branching.html">On the Evilness of Feature Branching</a></li>
  <li><a href="https://www.youtube.com/watch?v=ASOSEiJCyEM">Why Pull Requests Are A BAD IDEA</a></li>
  <li><a href="https://www.youtube.com/watch?v=lXQEi1O5IOI">Why CI is BETTER Than Feature Branching</a></li>
  <li><a href="https://www.youtube.com/watch?v=WmVe1QrWxYU">I’ve Found Something BETTER Than Pull Requests</a></li>
  <li><a href="https://www.youtube.com/watch?v=_w6TwnLCFwA">Git Flow Is A Bad Idea</a></li>
  <li><a href="https://youtu.be/aVcfv9uZPpQ">The Dark Side of Pull Requests</a></li>
  <li><a href="https://www.infoq.com/presentations/death-continuous-integration/">The Death of Continuous Integration</a></li>
  <li><a href="https://youtu.be/GfGEtCcWUi4">Continuous Integration - Flow Beats Control!</a></li>
  <li><a href="https://dora.dev/research/2024/dora-report/">DORA</a></li>
  <li><a href="https://www.amazon.com/Accelerate-Software-Performing-Technology-Organizations/dp/1942788339/ref=sr_1_1?dib=eyJ2IjoiMSJ9.jemhPhEOvE34eI5T6fVSy6wFBpNPjjBfe3kwxZx76OaYiUzDk_wk895lrRWwY6HIQ0je12lhE6TcAVUA4586GZaPmZt1olHYZ0MTmw6C2EgF2NkPfWx1r3i2oWWk2BDQXDQfRCoHxWIV8ML8Z2eNNORbMWi2JzJFTyit6xsxFEoeivek_tLAVhtXMr6kga89XiSNYVZ9VMTwV9D2cVpnfHyUkibjWIVuL5WxTtEcJdM.c_xcXYbe2_zgsL6vOgYSOY0pQTCNTX5wma1-lzBYNww&amp;dib_tag=se&amp;keywords=accelerate&amp;qid=1762072349&amp;sr=8-1">Accelerate</a></li>
  <li><a href="https://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912/ref=sr_1_1?crid=30S5B45LGZKU6&amp;dib=eyJ2IjoiMSJ9.itY9oApzOE7dyjDO0Qqy4ck16gK5272nG-QCzwli1F01vVhqFAJZpqOHz0ikilr40Rl1tvv-BlCC0bx5uQ26S_vTsxdSnbObYYe9WlumcKefqH345eo1ZIlGDtxTk3UhbcGFZN9-taZWlswTg0gan4PhqL94XQOOUfGMflLcAdzXuhcs7lUCpme0W0d4vbISWRO3Vl6pCq7SAL6oIEj4unsHsWFvtSQm7168hINMMZw.0dhWm5CfAo2sTBfHGUs8XfbNKd2E1JWVeWLaofbluD8&amp;dib_tag=se&amp;keywords=continuous+delivery&amp;qid=1762072356&amp;sprefix=continuous+deliver%2Caps%2C190&amp;sr=8-1">Continuous Delivery</a></li>
</ul>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[Pull Requests (PRs) were invented for Open Source projects. Work in commercial teams is fundamentally different. PRs were not made for this. They optimize for control and gatekeeping, while commercial teams optimize for flow and delivery speed without sacrificing quality.]]></summary></entry><entry><title type="html">Book Review: The Mythical Man-Month</title><link href="https://plainionist.github.io/Mythical-Man-Month/" rel="alternate" type="text/html" title="Book Review: The Mythical Man-Month" /><published>2025-10-28T00:00:00+00:00</published><updated>2025-10-28T00:00:00+00:00</updated><id>https://plainionist.github.io/Mythical-Man-Month</id><content type="html" xml:base="https://plainionist.github.io/Mythical-Man-Month/"><![CDATA[<p>Even though it was written 50 years ago, if you’re a software engineer and haven’t read this book yet,
<strong>put it on top of your reading stack</strong>.
<em>The Mythical Man-Month</em> is one of those timeless engineering classics every developer should read at least once in their career.</p>

<p><img src="https://plainionist.github.io/assets/mythical-man-month.jpg" alt="Book: The Mythical Man-Month" title="The Mythical Man-Month" /></p>

<p><a href="https://www.amazon.com/Mythical-Man-Month-Software-Engineering-Anniversary/dp/0201835959/ref=tmm_pap_swatch_0">The Mythical Man-Month</a></p>

<!--more-->

<p>In his book, Frederick P. Brooks analyzes how software engineering worked back in 1975 —
with a strong focus on productivity and complexity.
As an engineering manager, he was deeply concerned with one central question:
<strong>Why is software development so difficult, and why do so many projects fail?</strong></p>

<p>What’s fascinating is that — even though our industry has changed massively over the past 50 years —
<strong>many of his observations are still true today.</strong></p>

<p>Here are a few examples of his most striking claims:</p>

<blockquote>
  <p>I will contend that conceptual integrity is the most important consideration in system design.
It is better to have a system omit certain anomalous features and improvements, but to reflect one set of design ideas,
than to have one that contains many good but independent and uncoordinated ideas.</p>
</blockquote>

<blockquote>
  <p>A small sharp team is best - as few minds as possible.</p>
</blockquote>

<blockquote>
  <p>The second is the most dangerous system a person ever designs;
the general tendency is to over-design it.</p>
</blockquote>

<blockquote>
  <p>The manager of a project needs to establish a philosophy and set aside resources
for the building of common tools, and at the same time to recognize the need for personalized tools.</p>
</blockquote>

<p>And of course, the classic Brooks’s Law:</p>

<blockquote>
  <p>Adding manpower to a late software project makes it later.</p>
</blockquote>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[Even though it was written 50 years ago, if you’re a software engineer and haven’t read this book yet, put it on top of your reading stack. The Mythical Man-Month is one of those timeless engineering classics every developer should read at least once in their career. The Mythical Man-Month]]></summary></entry><entry><title type="html">Book Review: Code Is For Humans</title><link href="https://plainionist.github.io/Code-Is-For-Humans/" rel="alternate" type="text/html" title="Book Review: Code Is For Humans" /><published>2025-08-12T00:00:00+00:00</published><updated>2025-08-12T00:00:00+00:00</updated><id>https://plainionist.github.io/Code-Is-For-Humans</id><content type="html" xml:base="https://plainionist.github.io/Code-Is-For-Humans/"><![CDATA[<blockquote>
  <p>Instead of imagining that our main task as programmers is to instruct a computer what to do,
let us concentrate instead on explaining to human beings what we want a computer to do.</p>

  <p>Donald Knuth</p>
</blockquote>

<p><img src="https://plainionist.github.io/assets/code-is-for-humans.jpg" alt="Book: Code Is For Humans" title="Code Is For Humans" /></p>

<p><a href="https://www.amazon.com/Code-Humans-Human-Centric-Software-Engineering/dp/B0CN6PQ42B/ref=tmm_pap_swatch_0">Code Is For Humans - A Guide To Human-Centric Software Engineering</a></p>

<!--more-->

<p>As the subtitle indicates, this book puts the human at the center of software engineering.
It argues that our real challenge is not just to make computers do the right thing,
but to make the code clear and manageable for the people who work with it.</p>

<p>A major theme is complexity, especially the cognitive load our design decisions can create or reduce.
Jackson shows how choices in architecture, naming, and structure can either help developers reason about a system or make it harder to understand.</p>

<p>The book examines complexity from different angles, always with the same focus: its impact on people.</p>

<p>If you’ve read other books on software engineering and design, this one offers a valuable and different perspective.
It’s definitely worth reading.</p>]]></content><author><name>Plainionist</name></author><category term="book" /><summary type="html"><![CDATA[Instead of imagining that our main task as programmers is to instruct a computer what to do, let us concentrate instead on explaining to human beings what we want a computer to do. Donald Knuth Code Is For Humans - A Guide To Human-Centric Software Engineering]]></summary></entry></feed>