<?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://jacques.nreality.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://jacques.nreality.com/" rel="alternate" type="text/html" /><updated>2026-07-27T00:51:39+00:00</updated><id>https://jacques.nreality.com/feed.xml</id><title type="html">Jacques de Vos</title><subtitle>Experiments and experiences in software.</subtitle><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><entry><title type="html">“Loop engineering” is process automation with agents</title><link href="https://jacques.nreality.com/2026-07-15/loops-are-just-process-triggers" rel="alternate" type="text/html" title="“Loop engineering” is process automation with agents" /><published>2026-07-15T00:00:00+00:00</published><updated>2026-07-15T00:00:00+00:00</updated><id>https://jacques.nreality.com/2026-07-15/loops-are-just-process-triggers</id><content type="html" xml:base="https://jacques.nreality.com/2026-07-15/loops-are-just-process-triggers"><![CDATA[<h2 id="tldr">TL;DR</h2>

<p>“Loop engineering” brings a shift beyond prompting agents one turn at a time, but behind the new term, there seem to be simple and familiar process automation principles at play. I think of “loop engineering” simply as process automation with agents. A loop is just a scheduled task trigger, and a skill is just reusable instructions to perform a task.</p>

<h2 id="making-sense-of-loop-engineering">Making sense of “loop engineering”</h2>

<p>The rapidly evolving ideas and terminology around “loop engineering” can be tricky to follow.</p>

<p>“I don’t prompt Claude anymore. I have loops that are running. They’re the ones that are prompting Claude and figuring out what to do. My job is to write loops,” says <a href="https://www.youtube.com/watch?v=RkQQ7WEor7w">Boris Cherny, the creator of Claude Code</a> (which has a <a href="https://code.claude.com/docs/en/scheduled-tasks"><code class="language-plaintext highlighter-rouge">/loop</code> scheduling feature</a>). Boris describes a real shift beyond manual prompting: systems can now discover work, invoke agents, check outcomes, and continue directing the work without someone initiating every turn.</p>

<p><a href="https://addyosmani.com/blog/loop-engineering/">Addy Osmani describes</a> the practice of what Boris calls “writing loops” as “loop engineering”. Addy breaks that system into automations, worktrees, skills, plugins and connectors, sub-agents, and memory.</p>

<h2 id="a-process-automation-lens">A process automation lens</h2>

<p>All of this can seem new and confusing at first. The exciting part is that we can cut through that by viewing these new capabilities through familiar ideas from process and workflow automation in organisations:</p>

<ul>
  <li>Which process tasks do we want to automate?</li>
  <li>What should trigger each process task?</li>
</ul>

<p>From that perspective:</p>

<ul>
  <li>A “loop” is a scheduled trigger for a task in a process.</li>
  <li>A “skill” contains reusable task instructions.</li>
  <li>“Loop engineering” is simply process automation.</li>
</ul>

<p>The ideas behind process automation are not new. What is new is the way it is implemented: using agent development harnesses such as Claude Code, Codex, Cursor, and OpenCode, together with a variety of new practices.</p>

<h2 id="examples">Examples</h2>

<p><img src="/assets/article_images/2026-07-15-loops-are-just-process-triggers/process-triggers.svg" alt="Schedule and development process lanes showing loops as triggers and skills as task definitions" /></p>

<h3 id="scheduled-automation">Scheduled automation</h3>

<p>A scheduled trigger is the most straightforward example. A schedule might trigger a security scan every morning. The skill tells the agent which scanners to run, how to assess the findings, and where to report any problems.</p>

<p>Creating our automation can be very easy:</p>

<ul>
  <li><strong>The skill describes how to do the task:</strong> Defining one can be as easy as writing a few lines of instructions and saving them in a <code class="language-plaintext highlighter-rouge">SKILL.md</code> file.</li>
  <li><strong>The trigger starts it:</strong> Creating one can also be as easy as typing <code class="language-plaintext highlighter-rouge">/loop</code> in your chat and saying what should run and when.</li>
</ul>

<h3 id="event-based-automation">Event-based automation</h3>

<p>Task triggering does not have to be schedule-based; it can also respond to an event. Consider a simple software development lifecycle:</p>

<p><strong>Requirements → Specification → Planning → Development → Testing → Review → Deployment</strong></p>

<p>This is the process. Each stage contains tasks that might be completed by people, agents, or both.</p>

<p>For example, a ticket moving from planning to development is an event or change-of-state trigger that can start the development task. The skill is the reusable prompt that tells the agent how to complete that task. It might include understanding the specification, making the change, running the tests, and preparing the work for review.</p>

<p>In both cases, a trigger starts a defined process task.</p>

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

<p>The tools are new, and the possibilities are exciting, but process thinking isn’t. By unpacking the processes in our organisations, we can find opportunities to improve or automate them and use “loop engineering” and skills to put those changes into practice with agents.</p>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[TL;DR]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/2026-07-15-loops-are-just-process-triggers/process-triggers.svg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/2026-07-15-loops-are-just-process-triggers/process-triggers.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">BDD for Spec-driven Agentic Development</title><link href="https://jacques.nreality.com/2026-05-13/executable-markdown-specs-agentic-coding" rel="alternate" type="text/html" title="BDD for Spec-driven Agentic Development" /><published>2026-05-13T00:00:00+00:00</published><updated>2026-05-13T00:00:00+00:00</updated><id>https://jacques.nreality.com/2026-05-13/executable-markdown-specs-agentic-coding</id><content type="html" xml:base="https://jacques.nreality.com/2026-05-13/executable-markdown-specs-agentic-coding"><![CDATA[<p><img src="/assets/article_images/2026-05-13-executable-markdown-specs-agentic-coding/agentic-development-flow.svg" alt="Flow diagram showing Prompt with a Spec to Agent Plans to Agent Builds to Agent Runs Tests" /></p>

<p>Agentic software is changing how we build.</p>

<p>As agentic coding becomes more common, <strong>how good your prompts specify the behaviour you want is a key to good agent dev outcomes</strong>. The goal is longer autonomous execution loops: give an agent intent, let it plan, let it build, let it run checks, and keep going.</p>

<p>The workflow many of us are moving toward is:</p>

<blockquote>
  <p><strong>Prompt with a Spec → Agent Plans → Agent Builds → Agent Runs Tests</strong></p>
</blockquote>

<p>Weak specs lead to unreliable autonomy. Strong, executable specs make autonomy safer.</p>

<h2 id="1-agentic-software-is-changing-how-we-build">1. Agentic software is changing how we build</h2>

<p><img src="/assets/article_images/2026-05-13-executable-markdown-specs-agentic-coding/section-1-agentic-software.svg" alt="Tool-card image showing Claude Code, OpenCode, Codex, Cursor, and Goose around autonomous coding loops" /></p>

<p>Agentic coding is increasingly common. Tools like Claude Code, OpenCode, Codex, Cursor, and Goose point at the same direction: longer loops where the system can take intent and move from analysis into implementation.</p>

<p>But the key constraint remains intent.</p>

<p>The emerging workflow is simple:</p>

<ol>
  <li><strong>Prompt with a Spec</strong></li>
  <li><strong>Agent Plans</strong></li>
  <li><strong>Agent Builds</strong></li>
  <li><strong>Agent Runs Tests</strong></li>
</ol>

<p>Weak specs still produce weak outcomes. LLMs do not remove ambiguity. They often scale it.</p>

<h2 id="2-the-industry-is-experimenting-with-spec-tools">2. The industry is experimenting with spec tools</h2>

<p>A good example is GitHub’s <a href="https://github.com/github/spec-kit">Spec Kit</a>: an open-source toolkit for spec-driven development. It installs a <code class="language-plaintext highlighter-rouge">specify</code> CLI, sets up agent workflows, and gives agents structured commands like <code class="language-plaintext highlighter-rouge">/speckit.specify</code>, <code class="language-plaintext highlighter-rouge">/speckit.plan</code>, <code class="language-plaintext highlighter-rouge">/speckit.tasks</code>, and <code class="language-plaintext highlighter-rouge">/speckit.implement</code>.</p>

<p>That is useful. It makes the path from product scenario → spec → plan → tasks → implementation more explicit.</p>

<p>But it still points at the same hard problem: generating a plan from a spec is useful; keeping the spec correct as the system changes is the long-term problem.</p>

<h2 id="3-specification-by-example-already-exists">3. Specification by example already exists</h2>

<p><img src="https://m.media-amazon.com/images/I/61K4UV59xyL._SY522_.jpg" alt="Specification by Example book cover" /></p>

<p>The main idea in the <a href="https://gojko.net/books/specification-by-example/">Specification by Example</a> book is simple: instead of writing traditional requirement documents like “the system should calculate discounts correctly”, teams define concrete examples:</p>

<blockquote>
  <p>“When a customer buys 3 items, they get 10% off”</p>

  <p>“When they buy 10 items, they get 20% off”</p>
</blockquote>

<p>These examples become the basis for:</p>

<ul>
  <li>requirements</li>
  <li>automated acceptance tests</li>
  <li>development guidance</li>
  <li>documentation</li>
</ul>

<p>This approach is what the book calls <strong>Specification by Example</strong> (SBE). It is the same family of practice behind BDD, Cucumber, and Gauge: make behaviour concrete enough that humans, agents, and CI can all work from the same examples.</p>

<p>That directly solves a problem agentic development exposes:</p>

<ul>
  <li><strong>Ambiguity</strong> – examples make intent concrete.</li>
  <li><strong>Misalignment</strong> – humans and agents can work from the same behaviour contract.</li>
  <li><strong>Spec drift</strong> – the build fails when behaviour no longer matches the spec.</li>
</ul>

<p>The important part is that it isn’t just a static document, it is the feedback loop. If the spec is continuously validated by the build, it does not silently rot.</p>

<h2 id="4-bdd--ai--spec-driven-development-loop">4. BDD + AI = spec-driven development loop</h2>

<p><img src="/assets/article_images/2026-05-13-executable-markdown-specs-agentic-coding/agentic-development-flow.svg" alt="Flow diagram showing Prompt with a Spec to Agent Plans to Agent Builds to Agent Runs Tests" /></p>

<p>Put together, the practical workflow becomes:</p>

<ol>
  <li><strong>Prompt with a Spec</strong></li>
  <li><strong>Agent Plans</strong></li>
  <li><strong>Agent Builds</strong></li>
  <li><strong>Agent Runs Tests</strong></li>
</ol>

<p>This is where BDD and AI fit together naturally: BDD plays at both ends of the flow. At step 1, it gives the agent concrete examples up front. At step 4, executable tests keep the loop honest after the build.</p>

<p>With AI, this matters more because LLMs amplify spec quality. Strong specs make autonomous execution more reliable. Weak specs create scalable incorrect behaviour.</p>

<p><a href="https://gauge.org/">Gauge</a> test framework fits this BDD model well because Markdown specs are readable by humans, easy for LLMs to consume, reviewable in pull requests, tied to executable code, and close enough to the repo and CI to become part of the engineering system.</p>

<p>The final point:</p>

<blockquote>
  <p><strong>BDD helps solve the specification drift problem by turning examples into executable tests: the same specs guide the build and keep checking the behaviour over time.</strong></p>
</blockquote>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/2026-05-13-executable-markdown-specs-agentic-coding/agentic-development-flow.svg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/2026-05-13-executable-markdown-specs-agentic-coding/agentic-development-flow.svg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The AI-Native 2/20 Software Product Peloton</title><link href="https://jacques.nreality.com/2026-04-01/the-ai-native-2-20-software-product-peloton" rel="alternate" type="text/html" title="The AI-Native 2/20 Software Product Peloton" /><published>2026-04-01T00:00:00+00:00</published><updated>2026-04-01T00:00:00+00:00</updated><id>https://jacques.nreality.com/2026-04-01/the-ai-native-2-20-software-product-peloton</id><content type="html" xml:base="https://jacques.nreality.com/2026-04-01/the-ai-native-2-20-software-product-peloton"><![CDATA[<p>LLMs can deliver massive individual productivity gains, especially for senior engineers, and prior ideas around software product team structures now seem to create bottlenecks. I haven’t seen many ideas on this yet, so here’s a rough stab at it.</p>

<p><strong>Thought experiment:</strong> a ~20 person team structure (aka Peloton)—about 7 <strong>2-person-crews</strong>, ~5 supporting specialists, and a product manager—<strong>might</strong> ease new bottlenecks from LLM efficiency.</p>

<p><img src="/assets/article_images/2026-04-01-the-ai-native-2-20-software-product-peloton/peloton-structure.png" alt="Peloton: 2-person-crews, specialists, and product manager" /></p>

<p>LLMs have significantly expanded what individual software product developers can achieve.</p>

<p>How does this massive change affect software product org structures? This seems to be an open, jarring question.</p>

<p>Below is my stab at a <strong>reference</strong> structure to answer this—but <strong>only as a thought experiment</strong> for larger software product orgs, not as something you should “roll out” from a blog post.</p>

<p>The shape below is stitched together from <strong>first principles and from what I have seen coaching and advising</strong> over the years. It is not a case study of one “proven” model. Treat it as a <strong>sketch to argue with</strong>: stress-test the ideas, steal a piece, or discard the lot.</p>

<p>I mean this as an <strong>open discussion</strong>: the field is moving quickly, and I am super keen to learn more from others’ thoughts and experiences.</p>

<p>So here it is: instead of only the Spotify-style squad—the usual <strong>canonical</strong> 5–7 person cross-functional team—consider a Peloton-shaped unit.</p>

<p><strong>Treat this as an idea, not a rigid org chart.</strong> The part worth considering is the <em>pattern</em>: pair-sized ownership, pull specialists when you need depth, a shared harness, and guardrails—more than any exact headcount. The <strong>numbers</strong> below (±20 people, ~7 crews, ~5 specialists) are <strong>illustrative</strong>: one plausible balance of coverage and flow. You might run smaller, combine roles, or split a Peloton across product lines without “breaking” the model—as long as you do not reintroduce the old bottlenecks by accident.</p>

<p><strong>Guiding structure &amp; roles:</strong></p>

<ul>
  <li><strong>Peloton</strong> is a +-20 person end-to-end product development team (large!) composed of 5-7 <strong>2-person-crews</strong> and 5-7 specialists.</li>
  <li><strong>Crews</strong>: Each crew is an autonomous product development pair: typically a senior generalist and a junior developer, who together own the full process from idea to delivery. Alternatively any pair that covers all the generalist skills necessary to develop a feature: product, domain, UX, code, engineering, QA, infrastructure. In some cases a crew of 3 could work.</li>
  <li><strong>Support: specialists:</strong> Supported by 5-7 shared specialists. Product, domain, UX/UI, guardrail+QA engineering, software, harness engineering.</li>
  <li><strong>Support: product manager</strong>: oversees overall priorities and cohesiveness of product components and backlogs. Not involved in every detail.</li>
</ul>

<p><strong>Process:</strong></p>

<ul>
  <li>The Crew <strong>owns delivery from idea into users’ hands</strong> (in production). We understand that this requires harness maturity, so practically staging with external checks could be implemented as a crutch, but not the <strong>end goal</strong>.</li>
  <li>The Crew <strong>pulls in specialist help</strong> as needed: e.g. when making a small change, maybe run a proposed implementation past the UX expert. Maybe a software/harness expert to improve flow. Maybe guardrail+QA engineer to workshop guardrails for the new work.</li>
  <li>Each Crew has its <strong>own prioritised backlog</strong> of work which it works from daily, and its own standups. No shared daily standup with other crews.</li>
  <li>The Crew <strong>pulls work</strong> from the product manager’s overall roadmap into its backlog when it plans. With bigger, non-obvious changes crew workshops solutions with the product manager, UX to come up with overall design.</li>
  <li>The Peloton can <strong>get together to align</strong> on product, share learnings, retrospect, maybe once a month.</li>
</ul>

<p><strong>In bigger orgs:</strong></p>

<ul>
  <li>Specialist “Chapters” that operate across Pelotons, to help crews and specialists in a specific specialty and defining cross-Peloton learning and governance is valuable as ever.</li>
  <li>Product Managers can report into a central structure to prioritise business goals.</li>
</ul>

<p>In this thought experiment, the structure attempts to combine what worked before with first principles: a team shape that optimises flow of value given that a single person can do lots more, while handovers, consensus, and gates that depend on other people still act as bottlenecks. Also, one person can’t be the perfect generalist, and needs help. Organisations (and society) also need to think about continuity, knowledge sharing and mentoring the next gen (hence the junior).</p>

<p>One downside of the above model is the <strong>vast amount of skills a generalist Crew member is required to have</strong> - but I’m wondering: isn’t this the reality of the skills growth challenge we are faced with in order to get the full flow benefits of LLMs?</p>

<h2 id="context"><strong>Context</strong></h2>

<p>In the Agile world, the well established idea of cross-functional software product teams became the <strong>canonical</strong> structure to optimise product development value, eloquently described in Hendrik Kniberg’s <em>Spotify Engineering Culture</em> videos. In coaching work I have helped organisations move toward that kind of model; the Peloton sketch earlier in this post is a separate, speculative step for the LLM era—not a claim that I run it end-to-end in my own small team.</p>

<p>However, in the era of LLM-assisted development, that <strong>canonical</strong> squad model is being challenged. Everyone recognises the need to get very skilled at working with LLMs and learn how to get the benefits. Also, everyone seems to have experiences of 1 person team / “lone wolf” being extremely productive, there is consensus on this. But structuring your company as 1000, 1 person teams would surely be chaotic? Imo you need effective team/communication structures in a larger org, in the LLM era, just as much as the Roman army did 2k years ago.</p>

<p>Historically, similar transitions have followed a consistent trajectory: Extreme Programming introduced pairing and tight feedback loops, and CI/CD gradually became an industry standard. The direction has been consistent: faster feedback loops, reduced handoffs, increased ownership, and stronger engineering discipline. LLMs represent the next step change: capable developers can now operate across implementation, design exploration, testing, documentation, analysis, and refactoring. This does not remove the need for teams or software engineering practices but changes the shape of the smallest effective delivery unit. Traditional cross-functional teams aimed to reduce dependencies between specialised roles, but when individuals can operate broadly across the stack, those structures may become unnecessarily constraining. At scale, the question is what shape preserves flow while enabling scale, quality, and learning—this article offers one possible answer, not the answer.</p>

<h2 id="the-core-unit-product-development-pair"><strong>The Core Unit: Product Development Pair</strong></h2>

<p>The fundamental new delivery unit is the <strong>Crew: A Product Development Pair</strong>, typically a senior generalist and a junior developer.</p>

<p>It doesn’t have to be senior/junior, any pair that covers all the generalist skills necessary to develop a feature: product, domain, UX, code, engineering, QA, infrastructure would work. The reason I’m pushing the junior here as a kind of apprentice, to solve the continuity for the company and large skills requirements to be effective - and grow the next generation of builders. Think of a blacksmith with an apprentice. It’s more for the long term benefits.</p>

<p>The pair owns delivery end-to-end, collaborates closely, and uses AI tools to expand capability.</p>

<p>While a pair can operate as a single individual, pairing provides several lasting organisational and personal benefits. A crew of 3 could also work in some cases. Knowledge sharing prevents silos and single points of failure. Not growing the next generation would be a mistake - and becoming a good generalist is especially daunting. Pairing supports the development of future generalists, creating a continuous learning environment embedded directly in delivery work. LLMs expand individual capability, but collaboration remains essential for quality, human growth and long term continuity.</p>

<p>Each pair maintains an independent backlog and aims to deliver with minimal blocking dependencies, ideally to production. Independent backlogs clarify ownership, increase delivery speed, and improve the flow of value.</p>

<p>Pairs have authority to decide when specialist input is required. Lightweight prompts can support decision-making, such as: “Does this change introduce architectural complexity?” or “Are there reliability concerns?” Temporary checkpoints can scaffold teams still building capability, similar to early CI/CD adoption, ensuring high flow and quality without rigid gates.</p>

<p>Pairs pull in specialists only when beneficial. For example, a UX specialist may contribute to complex interaction design or review flows, while a product/domain specialist may shape problem definition or validate direction. The harness engineer provides architectural guidance and shared technical patterns. QA specialists focus on exploratory testing, edge cases, and system reliability. Specialists act as force multipliers rather than sequential phase owners. Most teams I dealt with struggled to reach fully pull-based delivery before—but I don’t think that will be optional if we want the speed and quality now available.</p>

<h2 id="the-harness-engineer"><strong>The Harness Engineer</strong></h2>

<p>A key new specialist support role is the <strong>harness engineer</strong>, who maintains the shared technical environment across the unit. Think of this as the devops engineer for the LLM enabled world. This role builds systems and pipelines, guardrails, manages development environments and reusable engineering patterns, develops approaches for LLM usage, and optimises system-level performance. The harness ensures pairs can operate effectively without managing infrastructure complexity themselves.</p>

<h2 id="the-qa-and-guardrail-engineer"><strong>The QA and Guardrail Engineer</strong></h2>

<p>QA remains critical, providing exploratory testing, scenario evaluation, and confidence in releases. Guardrails supplement QA by proactively enforcing automated validation patterns, reliability practices, observability standards, and system-level safeguards. Together, QA and guardrails allow pairs to move quickly while maintaining product quality.</p>

<p>I think the traditional QA roles now need to also start thinking in terms of guardrails and test automation. Test automation is not new by any means, but in my experience where the previous best practices faltered for most teams is in test automation—I suspect it will be an even bigger problem, so the shift is from “maybe we’ll get it right one day” to “necessary from day one.”</p>

<h2 id="avoiding-speculation--anthropomorphism"><strong>Avoiding speculation &amp; anthropomorphism</strong></h2>

<p>In this article I avoid several common views (which I don’t share):</p>

<ul>
  <li><strong>Job loss predictions:</strong> To me, the impact of capability expansion on employment is unclear; historically, infrastructure improvements increased demand rather than simply reducing labour - but who knows this time? Rather not speculate! But there seems to be a consensus: doing good product development now requires a broad skill set, and I worry about junior product engineers being left behind unless we deliberately make room for them in how we organise (hence the junior in each crew). “Skill up and you’ll be fine” seems to be the best advice atm.</li>
  <li><strong>Teams of agents:</strong> I believe LLMs are best treated as engineering components, context, structured prompts, and guardrails, LLM in a loop with tools, rather than anthropomorphised actors. We are the engineers that have to utilise these amazing new processors.</li>
  <li><strong>Removal of software engineering discipline:</strong> can a slop monolith give the best UX and also speed going forward? In my experience, no: working with LLMs increases the importance of understanding software engineering principles and practices - we need those things more than ever. E.g. XP practices like TDD and CI that allow us to work in small, safe steps, to gain speed and quality.</li>
</ul>

<p>I am still learning on this topic; if you are running experiments with team shape in the LLM era—at a larger scale, or a deliberately different one—I would genuinely like to hear about it.</p>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[LLMs can deliver massive individual productivity gains, especially for senior engineers, and prior ideas around software product team structures now seem to create bottlenecks. I haven’t seen many ideas on this yet, so here’s a rough stab at it.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/2026-04-01-the-ai-native-2-20-software-product-peloton/peloton-structure.png" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/2026-04-01-the-ai-native-2-20-software-product-peloton/peloton-structure.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Why not a web that serves people?</title><link href="https://jacques.nreality.com/2026-01-05/the-web-should-serve-people-not-platforms" rel="alternate" type="text/html" title="Why not a web that serves people?" /><published>2026-01-05T00:00:00+00:00</published><updated>2026-01-05T00:00:00+00:00</updated><id>https://jacques.nreality.com/2026-01-05/the-web-should-serve-people-not-platforms</id><content type="html" xml:base="https://jacques.nreality.com/2026-01-05/the-web-should-serve-people-not-platforms"><![CDATA[<h2 id="tldr">TL;DR</h2>

<p>I believe the web works best when it is open and people control it. Businesses can prosper without trapping people in one ecosystem. Open protocols and portability can let services and AI providers compete while people keep their privacy, safety, and choice.</p>

<p><img src="/assets/article_images/2026-01-05-the-web-should-serve-people-not-platforms/kids-soccer.jpg" alt="Children playing a soccer match outdoors" /></p>

<p><em>Photo: <a href="https://unsplash.com/photos/kD5u9TkMCUs">Matthew Osborn</a> on Unsplash.</em></p>

<h2 id="why-this-matters-now">Why this matters now</h2>

<p>The web has delivered enormous social benefits, but much of online life now runs through closed platforms. These platforms can amplify manipulation, addictive behaviour, misinformation, harassment, isolation, and polarised public debate.</p>

<p>Over the last ~20 years, closed platforms and their incentives have gradually shifted control over identity, relationships, information, and discovery away from people and the open web.</p>

<p>AI is becoming another important way people encounter the Internet’s knowledge and ideas. Its shape is not yet settled, but companies are already racing to build their own ecosystems around it. We still have a chance to do this differently.</p>

<h2 id="a-web-that-serves-society">A web that serves society</h2>

<p>The <a href="https://www.w3.org/TR/ethical-web-principles/">W3C’s ethical web principles</a> provide a useful starting point:</p>

<ul>
  <li><strong>An equitable, informed, and interconnected society.</strong> The web should be secure, respect privacy, support healthy communities and debate, help people verify information, and give individuals more control.</li>
  <li><strong>Human agency and dignity.</strong> The web should empower people rather than manipulate, isolate, or addict them.</li>
  <li><strong>Healthy community and public knowledge.</strong> The web should support constructive debate, freedom of expression, trustworthy sources, and the ability to verify information.</li>
  <li><strong>Openness in service of society.</strong> Universality and non-centralisation matter because they prevent any one platform or authority from controlling how people participate, connect, and share knowledge.</li>
</ul>

<h2 id="what-i-want-from-the-web">What I want from the web</h2>

<p>For me, making this vision real requires:</p>

<ul>
  <li><strong>People in control:</strong> identity, relationships, content, and communications should be portable rather than trapped in one ecosystem. People should control their data, time, attention, sources of trust, and the algorithms that shape what they see.</li>
  <li><strong>Trust over engagement:</strong> people should choose the voices and sources that shape their social world, including who they trust to help judge information. Ranking can be useful when people can understand, choose, and change it; maximising attention should not be the organising principle.</li>
  <li><strong>Healthy incentives:</strong> businesses should be able to prosper without closing the web, preventing people from leaving, or consuming ever more of their attention. Journalists should be rewarded for trustworthy, evidence-based work, not for feeding outrage and echo chambers.</li>
  <li><strong>Open in practice:</strong> protocols, data formats, and the interfaces needed for interoperability should be open even when services and software are not. Openness matters only if ordinary people can switch services without losing their social lives.</li>
  <li><strong>Safe for children:</strong> as a parent, I think the web should make it easier for guardians and communities to create safe, age-appropriate spaces for children. This deserves particular emphasis.</li>
  <li><strong>AI is part of the Internet:</strong> AI gives us a new way to access the knowledge, culture, and collective contributions people have shared online. It should not become another proprietary layer that captures this shared foundation and controls access to it. People should be able to choose providers, carry their personal context, understand the sources behind important claims, and retain control of their data.</li>
</ul>

<p>To me, success means being able to connect with people, find information, or use AI while remaining in control, without being addicted by design or dependent on one company’s decisions.</p>

<h2 id="what-could-this-look-like">What could this look like?</h2>

<p>People could carry their identity, profile, relationships, and content between compatible services. They could communicate privately across provider boundaries, choose the systems that rank information, and inspect the sources behind important claims.</p>

<p>The same could apply to AI. People could change services without losing their personal context or connection to the underlying web.</p>

<p>Providers could still compete by offering different products, communities, moderation, AI models, and business models on this shared foundation. Portability can still protect other people’s privacy, security, and consent.</p>

<h2 id="what-we-can-learn-from-todays-platforms">What we can learn from today’s platforms</h2>

<p>Today’s platforms already show us both what works and where control gets stuck:</p>

<ul>
  <li><strong>Facebook and social feeds.</strong> Early Facebook centred on updates from chosen friends and family. Over time, algorithmic recommendations and advertising optimised for attention took more of the feed. The open web should restore the emphasis on chosen relationships and personal control.</li>
  <li><strong>Google and web search.</strong> Early Google put simple web results first, with advertising kept distinct. Over time, ads, promoted material, and Google’s own content became more prominent. A search business should prosper by helping people reach the web, not by gradually displacing it.</li>
  <li><strong>WhatsApp and private messaging.</strong> WhatsApp gets important things right: simple communication, end-to-end encryption, and no attention-driven public feed. But identity, groups, and history remain tied to one provider. People should be able to move between compatible services, subject to everyone’s privacy and consent.</li>
  <li><strong>Twitter (now X), public conversation, and journalism.</strong> Twitter showed the value of short public posts, chosen voices, and discovering events as they unfold. But identity, reach, ranking, and trust signals remain under one company’s control. Public conversation should not depend on one platform, and journalism needs healthier ways to earn trust and make a living.</li>
</ul>

<h2 id="ai-can-be-part-of-the-open-internet">AI can be part of the open Internet</h2>

<p>Generative AI, particularly large language models (LLMs), provides another test of these principles. Without the Internet and the vast body of language, ideas, and experience people have shared through it, these models could not do what they do today.</p>

<p>I think of chatting to an LLM as engaging with voices and ideas from across the Internet: an extraordinary but imperfect form of the wisdom of crowds, rather than an alien intelligence. To me, that is a hopeful reflection of the value people have collectively created online.</p>

<p>As companies race to build ecosystems around these models, familiar questions return. Who controls people’s prompts, conversations, and personal context? Can that information move between providers? Can we trust and verify the sources?</p>

<p>We risk repeating the pattern of closed platforms, but it is not inevitable. I am optimistic that competition and commoditisation will limit the lasting advantage of any one company. We can build AI that remains open enough for people to retain control and real choice.</p>

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

<p>An open web, useful AI, and successful businesses can coexist. So why not?</p>

<p>Why not reclaim social life on the open web through private and group messaging, public posts, identity, profiles, and feeds shaped by trust, and use AI built on the Internet’s knowledge without once again losing control of our personal data?</p>

<p>Businesses can thrive on this foundation without any one platform controlling how society connects, learns, and shares information.</p>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[TL;DR]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/2026-01-05-the-web-should-serve-people-not-platforms/kids-soccer.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/2026-01-05-the-web-should-serve-people-not-platforms/kids-soccer.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">LLMs as the new processor</title><link href="https://jacques.nreality.com/2024-11-04/llm-genai-as-new-processor" rel="alternate" type="text/html" title="LLMs as the new processor" /><published>2024-11-04T00:00:00+00:00</published><updated>2024-11-04T00:00:00+00:00</updated><id>https://jacques.nreality.com/2024-11-04/llm-genai-as-new-processor</id><content type="html" xml:base="https://jacques.nreality.com/2024-11-04/llm-genai-as-new-processor"><![CDATA[<p>This talk introduced LLMs to software developers as a new kind of processor with remarkable capabilities, framed within the history of computing.</p>

<p>It began with a brief overview of the LLM breakthrough, highlighting the transformer architecture and scaling laws.</p>

<p>The session then offered software engineers a practical mental model: thinking of LLMs as a new type of processor, analogous in some ways to a CPU.</p>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/G1b6zRvEiEnANA" width="800" height="500" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:0px solid #CCC; border-width:0px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[This talk introduced LLMs to software developers as a new kind of processor with remarkable capabilities, framed within the history of computing.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/llm-genai-as-new-processor.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/llm-genai-as-new-processor.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Software best practice is dead</title><link href="https://jacques.nreality.com/2017-11-21/software-best-practice-is-dead" rel="alternate" type="text/html" title="Software best practice is dead" /><published>2017-11-21T00:00:00+00:00</published><updated>2017-11-21T00:00:00+00:00</updated><id>https://jacques.nreality.com/2017-11-21/software-best-practice-is-dead</id><content type="html" xml:base="https://jacques.nreality.com/2017-11-21/software-best-practice-is-dead"><![CDATA[<p>Treating your mature enterprise product carelessly will get your business into deep trouble, but gold plating a new product, before you are sure that you are building the right thing, can bring your venture to a premature end.</p>

<div class="responsive-embed youtube">
  <iframe src="https://www.youtube.com/embed/vcCgLqE4J3Q" frameborder="0" allowfullscreen=""></iframe>
</div>

<p><br /></p>

<div class="responsive-embed slideshare">
  <iframe src="https://www.slideshare.net/slideshow/embed_code/key/94wzhRi8Sxavr" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" allowfullscreen=""></iframe>
</div>

<p>Although this might seem like common sense, most debates about software practices are still based on the assumption that there is one best practice for all contexts. It took us few failed software product start-ups and unstable mature products to learn this, and how to adjust our way of work, depending on the business context.</p>

<p>This idea has recently been expressed in various guises by a few prominent thinkers, like:</p>
<ul>
  <li>Simon Wardley’s Value Chain Mapping</li>
  <li>Kent Beck’s 3X - Explore, Expand, Extract</li>
  <li>Jeff Patton’s Dual Track Development - Discover -&gt; Develop</li>
</ul>

<p>In this talk I will take you through new ideas on the topic and important differences in the 2 contexts, share stories of our own failures and successes, and give you some practical advice on adjusting your approach for the context.</p>

<p>This talk is for any software professional who cares about business value.</p>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[Treating your mature enterprise product carelessly will get your business into deep trouble, but gold plating a new product, before you are sure that you are building the right thing, can bring your venture to a premature end.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/software-best-practice-is-dead.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/software-best-practice-is-dead.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Understanding software engineering with equations</title><link href="https://jacques.nreality.com/2017-10-09/Understanding-software-engineering-with-equations" rel="alternate" type="text/html" title="Understanding software engineering with equations" /><published>2017-10-09T00:00:00+00:00</published><updated>2017-10-09T00:00:00+00:00</updated><id>https://jacques.nreality.com/2017-10-09/Understanding-software-engineering-with-equations</id><content type="html" xml:base="https://jacques.nreality.com/2017-10-09/Understanding-software-engineering-with-equations"><![CDATA[<p>In order to escape the common traps of software development, teams and managers need to understand the consequences of their decisions - they need to understand the dynamics of software engineering. This is not an easy task and we need solid help. We need maths!</p>

<p>In this talk I explore a few equations that describe dynamics in software engineering, which can help us see the forest from the trees. I also cover some modern practices - and show how software engineers can get back control of their delivery.</p>

<p>The problems addressed include:</p>
<ul>
  <li>Deadlocked by Dependencies: Inability to deliver due to waiting on something</li>
  <li>Code-Degeneration: Code changes become more difficult over time</li>
  <li>Congestion: Slow, unpredictable delivery even though we are very busy</li>
  <li>Firefighting: We know what we should do, but we don’t have time to improve</li>
</ul>

<iframe src="//www.slideshare.net/slideshow/embed_code/key/r4pGaQyRmqSFTv" width="800" height="500" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[In order to escape the common traps of software development, teams and managers need to understand the consequences of their decisions - they need to understand the dynamics of software engineering. This is not an easy task and we need solid help. We need maths!]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/understanding-software-engineering.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/understanding-software-engineering.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">What is software product design?</title><link href="https://jacques.nreality.com/2017-03-10/we-are-all-product-designers" rel="alternate" type="text/html" title="What is software product design?" /><published>2017-03-10T00:00:00+00:00</published><updated>2017-03-10T00:00:00+00:00</updated><id>https://jacques.nreality.com/2017-03-10/we-are-all-product-designers</id><content type="html" xml:base="https://jacques.nreality.com/2017-03-10/we-are-all-product-designers"><![CDATA[<p>Although software engineering has become crucial to our modern society, it is still a new and often misunderstood discipline.</p>

<p>One of the most harmful misconceptions is that programming and testing are similar activities to construction in mature engineering disciplines, performed after the design has been completed.</p>

<p>In this talk I will give the audience a fresh look at software engineering, inspired by a 1992 article by Jack W. Reeves: “What is design?” I will show how software product development is a creative, collaborative process involving the create creative energy of all the role players in a team (including UX, BA, Dev, Test, Ops).</p>

<p>Finally I will revisit ideas from XP (Extreme Programming) and just show how cool this software design can be when we do it together as a team.</p>

<iframe src="https://www.slideshare.net/slideshow/embed_code/key/H3TQNgd7laL5VW" width="800" height="500" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:0px solid #CCC; border-width:0px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[Although software engineering has become crucial to our modern society, it is still a new and often misunderstood discipline.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/what-is-software-product-design.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/what-is-software-product-design.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Hybrid vs native mobile tech stack</title><link href="https://jacques.nreality.com/2016-07-16/Hybrid-vs-native-mobile" rel="alternate" type="text/html" title="Hybrid vs native mobile tech stack" /><published>2016-07-16T00:00:00+00:00</published><updated>2016-07-16T00:00:00+00:00</updated><id>https://jacques.nreality.com/2016-07-16/Hybrid-vs-native-mobile</id><content type="html" xml:base="https://jacques.nreality.com/2016-07-16/Hybrid-vs-native-mobile"><![CDATA[<p>Choosing the wrong mobile tech stack sets you up for a world of pain. But how do you select the right one from a plethora of current options?</p>

<p>As an iOS developer I am convinced that a carefully designed native app provides the best user experience. So why would we choose Ionic2/Angular2 on Cordova (a bleeding edge Hybrid JavaScript framework) for our latest mobile app? In this short talk I will share our thinking and experiences on the current landscape of mobile stack options.</p>

<p>I will introduce the contenders: Native (iOS and Android) vs Semi-Native (Xamarin and React Native) vs Hybrid (Ionic2/Angular2 on Cordova) vs Web. We will then go through some of the prominent tradeoffs between the different options: cost, reuse, single language, speed and user experience, device support, learning curve.</p>

<p>This should give you some (opinionated) guidelines to choosing the right mobile stack for your particular app.</p>

<iframe src="//www.slideshare.net/slideshow/embed_code/key/z9v4Tk0lu6iGzl" width="800" height="500" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:0px solid #CCC; border-width:0px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>
<p><br /></p>
<iframe width="800" height="450" src="https://www.youtube.com/embed/Haq7ccp_2Wo" frameborder="0" allowfullscreen=""></iframe>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[Choosing the wrong mobile tech stack sets you up for a world of pain. But how do you select the right one from a plethora of current options?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/hybrid-vs-native-mobile.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/hybrid-vs-native-mobile.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Rescuing Legacy Software from Impending Doom</title><link href="https://jacques.nreality.com/2016-06-22/rescuing-legacy-code" rel="alternate" type="text/html" title="Rescuing Legacy Software from Impending Doom" /><published>2016-06-22T00:00:00+00:00</published><updated>2016-06-22T00:00:00+00:00</updated><id>https://jacques.nreality.com/2016-06-22/rescuing-legacy-code</id><content type="html" xml:base="https://jacques.nreality.com/2016-06-22/rescuing-legacy-code"><![CDATA[<p>Dealing with an ageing code base is one of the hardest challenges that software development teams face. Legacy code bases can slow teams to a crawl, and therefore it is critical to solve this on the road to agility. Software rewrites fail at alarming rates! Refactoring – a safer approach – has emerged as the de-facto technique to tackle this challenge.</p>

<p>This session we will equip attendees with techniques and lessons to help them refactor more effectively. We will share our experience gained while working with various software teams, from startups to mid-sized organisations, that attempted to rescue their legacy from impending doom.</p>

<p>You will learn how to justify the investment in refactoring legacy code to product owners; when and how to apply different refactoring workflows on legacy code; and practical tips to avoid common pitfalls when refactoring code.</p>

<iframe src="//www.slideshare.net/slideshow/embed_code/key/zoLGWzSxaMjcrO" width="800" height="500" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen=""> </iframe>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[Dealing with an ageing code base is one of the hardest challenges that software development teams face. Legacy code bases can slow teams to a crawl, and therefore it is critical to solve this on the road to agility. Software rewrites fail at alarming rates! Refactoring – a safer approach – has emerged as the de-facto technique to tackle this challenge.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/rescuing-legacy-software.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/rescuing-legacy-software.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Essential software engineering reading list</title><link href="https://jacques.nreality.com/2016-03-12/essential-software-engineering-reading-list" rel="alternate" type="text/html" title="Essential software engineering reading list" /><published>2016-03-12T00:00:00+00:00</published><updated>2016-03-12T00:00:00+00:00</updated><id>https://jacques.nreality.com/2016-03-12/essential-software-engineering-reading-list</id><content type="html" xml:base="https://jacques.nreality.com/2016-03-12/essential-software-engineering-reading-list"><![CDATA[<p>Here is a <strong>list of classic articles and books</strong> that have informed my thinking on software engineering.</p>

<p>This list does not include my list of (great) programming, philosophy or management books, but speaks more to understanding and managing software development on a higher level - as I believe most software endeavors succeed/fail before a line of code was written.</p>

<h4 id="a-note-on-learning">A note on learning:</h4>
<p><em>Almost all I know and believe about software comes from experiences and observations in delivering software, but that does not discount the value in these tomes. I typically learn a fundamental principle by first observing a phenomenon in various environments, and then, when I come across a great study or article which clearly expresses and justifies the principle I get that “AHA!” moment where deep understanding is formed. E.g. seeing estimation inaccuracy occur 100s of times, and then reading Don Reinertsen’s description of variability in product developments gave me a big “AHA!”.</em></p>

<p><em>Too be honest, so much in software engineering isn’t obvious or intuitive and I initially miss the messages in books that were not pre-empted by my experiences (XP being a prime example).</em></p>

<p>Here goes:</p>

<h3 id="approach-and-principles">Approach and principles:</h3>
<ul>
  <li><a href="https://www.cs.umd.edu/class/spring2003/cmsc838p/Process/waterfall.pdf">Managing the Development of Large Software Systems, Royce (1970)</a> The paper that introduced waterfall gave a clear warning about its risk and showed (rudimentary) ways to introduce feedback</li>
  <li><a href="http://www.amazon.com/The-Mythical-Man-Month-Engineering-Anniversary/dp/0201835959">The Mythical Man Month, Brooks (1975)</a> *</li>
  <li><a href="http://faculty.salisbury.edu/~xswang/Research/Papers/SERelated/no-silver-bullet.pdf">No Silver Bullet, Brooks (1986)</a></li>
  <li><a href="https://hbr.org/1986/01/the-new-new-product-development-game">The New New Product Development Game, Takeuchi&amp;Nonaka (1986)</a></li>
  <li><a href="http://www.amazon.com/Extreme-Programming-Explained-Embrace-Change/dp/0321278658">Extreme Programming Explained: Embrace Change, Kent Beck (1999)</a> *</li>
  <li><a href="http://www.agilemanifesto.org/">The Agile Manifesto (2001)</a></li>
  <li><a href="http://www.amazon.com/Agile-Software-Development-Scrum-Series/dp/0130676349">Agile Software Development with Scrum, Schwaber&amp;Beedle (2002)</a> *</li>
  <li><a href="http://www.amazon.com/Lean-Software-Development-Agile-Toolkit/dp/0321150783">Lean Software Development: An Agile Toolkit, Poppendiecks (2003)</a></li>
  <li><a href="http://www.amazon.com/The-Principles-Product-Development-Flow/dp/1935401009">The Principles of Product Development Flow, Reinertsen (2009)</a></li>
</ul>

<h3 id="building-the-right-thing">Building the right thing</h3>
<ul>
  <li><a href="http://www.amazon.com/User-Story-Mapping-Discover-Product/dp/1491904909">User Story Mapping, Patton (2014)</a></li>
  <li><a href="http://www.amazon.com/The-Lean-Startup-Entrepreneurs-Continuous/dp/0307887898">The Lean Startup, Ries (2011)</a> - to find out if we are building the right things often needs more than just detailed analysis, we need to experiment, but do it fast so that we don’t run out of time/money.</li>
  <li><a href="http://www.amazon.com/Specification-Example-Successful-Deliver-Software/dp/1617290084">Specification by Example, Adzic (2011)</a></li>
  <li>I need more on Interaction and User Experience design! **</li>
</ul>

<h3 id="building-the-thing-right">Building the thing right</h3>
<ul>
  <li><a href="https://www.cs.umd.edu/class/spring2003/cmsc838p/Design/criteria.pdf">Decomposing Systems into Modules, D.L. Parnas (1972)</a></li>
  <li><a href="http://www.developerdotstar.com/mag/articles/reeves_design.html">What is Software Design?, Reeves (1992)</a></li>
  <li><a href="http://www.amazon.com/Refactoring-Improving-Design-Existing-Code/dp/0201485672">Refactoring, Fowler&amp;Beck&amp;Brant&amp;Opdyke&amp;Roberts (1999)</a> - Code is design and design should be evolve</li>
  <li><a href="http://www.amazon.com/Test-Driven-Development-By-Example/dp/0321146530">Test Driven Development: By Example, Beck (2002)</a> *</li>
  <li><a href="http://www.amazon.com/Domain-Driven-Design-Tackling-Complexity-Software/dp/0321125215">Domain-Driven Design, Evans (2003)</a> **</li>
  <li><a href="http://www.martinfowler.com/articles/continuousIntegration.html">Continous Integration, Fowler (2006)</a></li>
  <li><a href="http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882">Clean Code, Martin (2008)</a></li>
  <li><a href="http://www.amazon.com/Continuous-Delivery-Deployment-Automation-Addison-Wesley/dp/0321601912">Continuous Delivery, Humble (2010)</a></li>
</ul>

<h3 id="being-a-professional-developer">Being a professional developer</h3>
<ul>
  <li><a href="http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp/0735619670">Code Complete, McConnell (1993)</a></li>
  <li><a href="http://www.amazon.com/The-Pragmatic-Programmer-Journeyman-Master/dp/020161622X">The Pragmatic Programmer, Hunt&amp;Thomas (1999)</a></li>
  <li><a href="http://www.catb.org/esr/writings/taoup/html/">The Art of Unix Programming, Raymond (2003)</a></li>
  <li><a href="http://www.amazon.com/The-Software-Craftsman-Professionalism-Pragmatism/dp/0134052501">The Software Craftsman, Mancuso (2014)</a> **</li>
</ul>

<h3 id="people-teams-systems-and-environment-still-have-a-lot-of-reading-to-do-here">People, teams, systems and environment (still have a lot of reading to do here!)</h3>
<ul>
  <li><a href="http://www.amazon.com/Drive-Surprising-Truth-About-Motivates/dp/1594484805">Drive: The Surprising Truth About What Motivates Us, Pink (2011)</a></li>
  <li><a href="http://www.amazon.com/The-Five-Dysfunctions-Team-Leadership/dp/0787960756">The Five Dysfunctions of a Team: A Leadership Fable, Lencioni (2002)</a></li>
  <li><a href="http://www.amazon.com/dp/0932633439/">Peopleware, DeMarco&amp;Lister (1987)</a> **</li>
  <li><a href="http://www.amazon.com/Leading-Self-Directed-Teams-Kimball-Fisher/dp/0071349243">Leading Self-Directed Work Teams, Fisher (1993)</a></li>
  <li><a href="http://www.amazon.com/Out-Crisis-W-Edwards-Deming/dp/0262541157">Out of the Crisis, Deming (1982)</a> **</li>
  <li><a href="http://www.amazon.com/gp/product/0932633498/">An Introduction to General Systems Thinking, Weinberg (1975)</a> **</li>
  <li><a href="http://www.amazon.com/Biomatrix-Systems-Approach-Organisational-Societal/dp/0620342358">Biomatrix: A Systems Approach to Organisational and Societal Change, Dostal (2005)</a></li>
</ul>

<p>*Books I have to read again, because I didn’t realise their significance when I read it, and therefore didn’t absorb the content.</p>

<p>**Books I have only skimmed that are still on my must-read.</p>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[Here is a list of classic articles and books that have informed my thinking on software engineering.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/essential-software-engineering-reading-list.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/essential-software-engineering-reading-list.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">How to become a thought leader in software</title><link href="https://jacques.nreality.com/2015-08-12/how-to-become-a-thought-leader-in-software" rel="alternate" type="text/html" title="How to become a thought leader in software" /><published>2015-08-12T00:00:00+00:00</published><updated>2015-08-12T00:00:00+00:00</updated><id>https://jacques.nreality.com/2015-08-12/how-to-become-a-thought-leader-in-software</id><content type="html" xml:base="https://jacques.nreality.com/2015-08-12/how-to-become-a-thought-leader-in-software"><![CDATA[<blockquote>
  <p><em>“Nothing is more powerful than an idea whose time has come.”</em>
— Victor Hugo</p>
</blockquote>

<p>“Am I going to be bored or enlightened?” was the question I asked before attending Agile 2015, my first international software development conference as a speaker.</p>

<p>I was enlightened. Almost overwhelmed. This is why.</p>

<p>I started conversing with people at the Agile Coach Camp open spaces: agile coaches, industry celebrities, hardcore programmers, change management consultants, authors, community builders, philosophers, eccentrics. A diverse bunch, but all open to debate, share, learn and apply. I’ve never experienced anything like it.</p>

<p>For a full week it did not stop. Topics ranged from 21st century democratic organisations to games to error handling code. The scheduled talks were good, but the informal conversations and debate were much better.</p>

<p>That’s great. What did I take out of all this?</p>

<h3 id="how-ideas-in-our-industry-work">How ideas in our industry work</h3>
<p>One thing is a sense of how ideas in our software industry works, how they emerge, spread and get accepted. For example, how did DevOps get widely accepted and become de-facto?</p>

<p>I drew the following conclusions:</p>

<p><em><strong>1.	Ideas get born, live and grow in a professional community</strong></em><br />
This became apparent to me after speaking to a few of authors and comparing how I experienced the book versus the conversation. An idea printed in a book creates the illusion of immortality of the ideas in it. But ideas are living things in a sense: if the community rejects/forgets it, it is dead in a way (seen as false or invalid). Ideas are mortal and grow by virally replicating through professional networks.</p>

<p><em><strong>2.	Ideas are born from other ideas</strong></em><br />
The illusion of “the lone genius that figured it out, out of thin air” is often misplaced. Ideas are mostly built from other ideas, maybe a novel combination or reconfiguration.</p>

<p><em><strong>3.	Ideas often have champions</strong></em><br />
Just because an idea is not completely novel does not mean an idea does not have a champion. There is more than often an thought leader that promotes and nurtures an idea, even gives it a name. Sometimes even takes credit for it all. I call this persona the thought leader.</p>

<p><em>Do these 3 points apply to industries outside software? I think so, but the community nature of ideas seems more pronounced in software, since software practices are still changing rapidly (less stable than say, accounting), and we have no central “authority” (there is no “Ivy League Old Boys Club” or organisation that controls which ideas get accepted).</em></p>

<h3 id="how-to-become-an-industry-thought-leader">How to become an industry thought leader</h3>
<p>The above made me think more about what makes an industry thought leader.</p>

<p>We had the privilege of having conversations with (in no particular order) <a href="https://twitter.com/jeffpatton">Jeff Patton</a>, <a href="https://twitter.com/mfeathers">Michael Feathers</a>, <a href="https://twitter.com/DianaOfPortland">Diana Larson</a>, <a href="https://twitter.com/RonJeffries">Ron Jeffreys</a>, <a href="https://twitter.com/davidhussman">Dave Hussman</a>, <a href="https://twitter.com/chethendrickson">Chet Hendrickson</a> and other well known coaches and authors – people I see as thought leaders in our industry (thanks Declan Whelan for making a few great conversations happen).</p>

<p>These discussions made me realise that I had some misconceptions. I learnt that a good thought leader often has the following traits:</p>

<p><em><strong>1.	A thought leader is a community leader</strong></em><br />
Giving credit is like spreading seeds for an idea. All of the above people were the most generous in sharing, giving credit, giving back to both people wanting to learn and people wanting to contribute new ideas. They almost always gave credit wherever they could, and promoted other people and their ideas where they could. The persona of a generous, loved community leader emerged across the board. This surprised me. I now think that this is necessary for ideas to flourish, especially for their own ideas which they are promoting.</p>

<p><em><strong>2.	Practice, practice, practice what you preach. Then show results</strong></em><br />
Practicing your ideas, and having great case studies on how you applied your thinking to various situations is crucial to getting credibility and buy in from the professional community. You obviously have to show that it works, and understand the limitations when facing better than anyone. If you have this, your idea can quickly get traction.</p>

<p>Charisma can get attention, but you need to show results to be widely respected – I am surprised how many speakers miss this part.</p>

<p>There are ways to do this without being everywhere at once. For example, Martin Fowler seems to tap into the experiences of many teams in his organisation.</p>

<p><em><strong>3.	Know how to receive critique and disagree respectfully</strong></em><br />
Critique is necessary to heathy ideas. Thought leaders know how to receive, absorb and respond to critique, without getting defensive. Critique is the hammer and anvil that hardens and moulds your ideas (or breaks ones that should not be). Your arguments will grow stronger and stronger if you consider critique carefully.</p>

<p>That said, it is often necessary to disagree with other ideas to draw distinctions and clarify your ideas. Thought leaders know how to do this well: know the pros and cons of the idea you are criticizing before jumping to conclusions. Rather defer judgement or even ignore arguments of other ideas you do not understand. Resist the temptation to be a “hater” in your critique, don’t use straw men or appeal to authority. “Hater” behaviour might get a bit of attention, but you ultimately loose respect and get alienated. Alienation means starvation of your ideas.</p>

<p><em><strong>4.	Bring experience from other fields</strong></em><br />
This point is about where good ideas come from. A lot (but not all) of the fresh, novel approaches come from applying ideas from other industries. Examples are plentiful, but most notably Lean Manufacturing, Life Coaching, Biology, Other Engineering Disciplines, Philosophy, Improvisation Acting, Industrial Design, Mathematics, Art and Music, Sci-Fi and a bunch more.</p>

<p>Having varied experience and a balanced life with varied interests, puts you in a better position to stumble across the next big thing.</p>

<p><em><strong>5.	Focus on one or two ideas at a time</strong></em><br />
Even though a thought leader might have many interests and ideas, to be a thought leader you have to be a centre of discussion on a contemporary theme, and thus have to focus on that area, at least your public interactions. You have to write and speak about it.</p>

<h3 id="conclusion">Conclusion</h3>
<p>I don’t think we all have to strive to be celebrity authors, but realising that ideas live in a community, and becoming an active idea participant, a good citizen, in this community, makes you a thought leader and makes our industry better.</p>

<p>Or you can just build stuff.</p>

<p><em>Thanks to Martin Cronje (a few of the ideas in this post was his), and Declan Whelan (who made sure good conversations happened and ideas spread)</em></p>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[Am I going to be bored or enlightened - I asked this before attending Agile 2015, my first international software development conference as a speaker]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/how-to-become-a-thought-leader.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/how-to-become-a-thought-leader.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Self-help books meta-summary</title><link href="https://jacques.nreality.com/2014-12-31/self-help-books-meta-summary" rel="alternate" type="text/html" title="Self-help books meta-summary" /><published>2014-12-31T00:00:00+00:00</published><updated>2014-12-31T00:00:00+00:00</updated><id>https://jacques.nreality.com/2014-12-31/self-help-books-meta-summary</id><content type="html" xml:base="https://jacques.nreality.com/2014-12-31/self-help-books-meta-summary"><![CDATA[<p>As a software engineering coach part of my job is to help teams become more effective. To this end, it is sometimes useful to employ concepts from self-help books, but I don’t always enjoy reading these, they often stretch a few insights into endless anecdotes.</p>

<p>The <a href="http://www.blinkist.com">Blinkist</a> app really helped me with this dilemma last week; I managed to cover the key insights of 40+ books in just a few days.  Good job <a href="http://www.blinkist.com">Blinkist</a>.</p>

<p>During this self-help binge, I noticed a few ideas being repeated in a wide variety of books, especially the more core principles.</p>

<p>Here are a few insights that struck me as reoccurring, as well as the books they came from:</p>

<h3 id="on-being-effective">On being effective:</h3>
<ul>
  <li>The best way to be more effective is to focus only on highest impact things next. <em>The 7 Habits of Highly Effective People (First things first), The 80/20 Principle, The 4-Hour Workweek and others.</em></li>
  <li>Be more productive by doing only one thing at a time. <em>The Pomodoro Technique, Getting Things Done, The Principles of Product Development Flow and others.</em></li>
  <li>Define a simple system of prioritised queues with small work items to visualise and manage work. <em>Getting things Done, The Principles of Product Development Flow, The Pomodoro technique.</em></li>
  <li>Have goals: define explicit goals and values and measure your progress against them. <em>Most of the productivity books I read have this idea in some form; I liked what Challenging Coaching said on it.</em></li>
</ul>

<h3 id="on-becoming-a-better-thinker--communicator">On becoming a better thinker / communicator:</h3>
<ul>
  <li>People inherently don’t make rational decisions/predictions – be aware of your innate cognitive flaws. E.g. we are intuitively bad at stats. <em>Thinking, Fast and Slow, The Black Swan, Predictably Irrational.</em></li>
  <li>Practice can make hard things automatic and frees your mind up to innovate. <em>Thinking, Fast and Slow, Outliers, Mastery.</em></li>
  <li>A story with a protagonist and an antagonist is the best format for conveying information in presentations, specifications, etc. <em>The Presentation Secrets of Steve Jobs, User Story Mapping.</em></li>
  <li>Surround yourself with people you can learn from. <em>Mastery and many others.</em></li>
</ul>

<h3 id="on-adapting-and-learning">On adapting and learning:</h3>
<ul>
  <li>Managing well entails putting frequent, lightweight, honest feedback mechanisms in place at various levels. <em>The One Minute Manager, The Lean Startup, The Principles of Product Development Flow, Challenging Coaching and others.</em></li>
  <li>Build small versions of your product first and get feedback from early niche, adopters. <em>The Lean Startup, Crossing the Chasm</em></li>
  <li>Become good at adapting to change quickly, or die. <em>The Innovator’s Dilemma, Who Moved My Cheese</em></li>
</ul>

<h3 id="on-finding-opportunities">On finding opportunities</h3>
<ul>
  <li>Build and contribute to your professional network; it’s a more secure structure than a company. <em>The Tipping Point, Coffee, Lunch, Coffee, Never eat alone</em></li>
  <li>The Internet and social media have opened up marketing for a bigger variety of products. <em>The Long Tail, Purple Cow</em></li>
</ul>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[As a software engineering coach part of my job is to help teams become more effective. To this end, it is sometimes useful to employ concepts from self-help books, but I don’t always enjoy reading these, they often stretch a few insights into endless anecdotes.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/self-help-books-meta-summary.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/self-help-books-meta-summary.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Is fast typing required for developers?</title><link href="https://jacques.nreality.com/2014-12-06/developer-typing-skills" rel="alternate" type="text/html" title="Is fast typing required for developers?" /><published>2014-12-06T00:00:00+00:00</published><updated>2014-12-06T00:00:00+00:00</updated><id>https://jacques.nreality.com/2014-12-06/developer-typing-skills</id><content type="html" xml:base="https://jacques.nreality.com/2014-12-06/developer-typing-skills"><![CDATA[<p>I changed my mind on this recently, and here’s why.</p>

<p>There is a sentiment that developers have to type really fast because we “type code for a living”.</p>

<p>I’ve long rejected that idea, and not just because lines of code is the worst possible metric for productivity. My main reason was that a good dev workflow normally entails much, much more reading than writing. Also, communication skills, design skills, etc. seem more important to me. I thought fast typing was merely a nice to have, and I never really invested time into improving mine.</p>

<p>But reading the great book “Thinking, Fast and Slow” by Daniel Kahneman showed me a flaw in my view (there’s so much substance in that book, I’m sure I’ll get many more insights from it).</p>

<h4 id="the-insight-is-this">The insight is this:</h4>
<ul>
  <li>Explicit, conscious thinking (which I believe paramount to development) takes a lot of mental energy.</li>
  <li>Like physical stamina, we literally have a limited pool of mental energy. Any task that needs our conscious attention depletes our mental stamina, leaving us with less good thinking.</li>
  <li>Unconscious, automatic processing takes less of a strain (like strolling or breathing).</li>
  <li>Therefore, in order to do more good thinking (as is required in solving programming problems), we need to minimise non-automatic activities.</li>
</ul>

<p>From this we can see that an activity like correcting a typing mistake will tap our “thinking stamina”, but when typing becomes fully unconscious/automatic it will free up some space for productive problem solving. Hence, it’s important that we learn to type automatically (fast is just a nice side effect of automatic).</p>

<p>This line of thinking can be taken much further than just typing. Anything in our dev environment that is explicit and not automatic, like looking for a menu with some function, or doing an explicit compile, will waste our mental stamina. It is therefore really important to:</p>

<ol>
  <li>Know your dev tools, including common shortcuts and navigation tools. Keeping it simple is a easy way to achieve this. This has a similar benefit to automatic typing.</li>
  <li>Cut out explicit tasks. First thing that comes to mind is compiling. The Ruby and other dynamic lang peeps have been doing this for years, continuously running tests in the background that shows you the impact of changes, instead of a compile, run action. Some great tools in static world, like Resharper and NCrunch helps here. Another is deploying - the whole continuous delivery movement applies here. Tools like JRebel in Java world can also help.</li>
</ol>

<p>In summary: as a developer, <em>always find ways to reduce explicit, non-automatic tasks that draw your attention</em>. I, for one, will take my environment and skills like typing more seriously now.</p>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[I changed my mind on this recently, and here’s why.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/developer-typing-skills.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/developer-typing-skills.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">The origin of bug, loop and patch</title><link href="https://jacques.nreality.com/2014-08-03/The_origin_of_bug_loop_and_patch" rel="alternate" type="text/html" title="The origin of bug, loop and patch" /><published>2014-08-03T00:00:00+00:00</published><updated>2014-08-03T00:00:00+00:00</updated><id>https://jacques.nreality.com/2014-08-03/The_origin_of_bug_loop_and_patch</id><content type="html" xml:base="https://jacques.nreality.com/2014-08-03/The_origin_of_bug_loop_and_patch"><![CDATA[<p>Bug, loop and patch - these words have been part of programmer lingo for decades. On my recent trip to the US east coast I stumbled across their origin:</p>

<p>The <a href="http://en.wikipedia.org/wiki/Harvard_Mark_I">Harvard Mark I</a> aka the IBM Automatic Sequence Controlled Calculator!</p>

<p><img src="https://jacques.nreality.com/public/marki_and_me.jpg" alt="The Harvard Mark I" /></p>

<p>This amazing machine was one of the first programmable computers. I’ll tell you more about this monolith at the end of the post.</p>

<h2 id="loop">“Loop”</h2>

<p><img src="https://jacques.nreality.com/public/marki_loop.JPG" alt="The Harvard Mark I Loop" /></p>

<p>The original (mechanical) loop. The <em>program</em> is a long paper tape with holes punched in and runs in this loop. Conditional branching is not supported (no gotos, jumps); you just have one long <em>while (true)</em>.</p>

<h2 id="patch">“Patch”</h2>

<p><img src="https://jacques.nreality.com/public/marki_patch.JPG" alt="The Harvard Mark I Loop" /></p>

<p>See the actual patch. A correction is made by literally patching a piece of the tape and punching new holes in. Fix your code with duct tape!</p>

<h2 id="bug">“Bug”</h2>

<p><img src="https://jacques.nreality.com/public/marki_bug.JPG" alt="The Harvard Mark I Loop" /></p>

<p>The classic! This “bug” was found on a Mark II mechanical component, so not really a program error. It must have been <em>working on my machine</em>.</p>

<h2 id="more">More..</h2>
<p>Tidbits I found interesting:</p>

<ul>
  <li>It started computing 70 years ago!</li>
  <li>It was Steampunk! Ok, I mean it was electro-mechanical. The inventor Howard Aiken basically built a Babbage engine on steroids.</li>
  <li>John Von Neumann used it to help design the atomic bomb. Seems most of our high-tech was born in that war.</li>
  <li>The number system was decimal, not binary. So you could use all your fingers to count.</li>
  <li>It ran solidly for 15 years. Seems Moore’s Law does’nt apply to mechanical computers.</li>
  <li>The inventor did not give attribution IBM, who funded and built large parts of it. I guess after this IT companies started employing lots of lawyers.</li>
</ul>

<p>The machine is on display at the Harvard University Science Center (where I took these photos). Hope you enjoyed this as much as I did.</p>]]></content><author><name>Jacques de Vos</name><email>jacques@nreality.com</email></author><summary type="html"><![CDATA[Bug, loop and patch - these words have been part of programmer lingo for decades. On my recent trip to the US east coast I stumbled across their origin:]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://jacques.nreality.com/assets/article_images/talks/origin-of-bug-loop-patch.jpg" /><media:content medium="image" url="https://jacques.nreality.com/assets/article_images/talks/origin-of-bug-loop-patch.jpg" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>