All blogs / Software / engineering practice
INNOQ
INNOQ is a technology consulting firm. We deliver effective software applications, digital infrastructures, pragmatic software architecture, and trainings.
Software / engineering practiceAI / MLDistributed systems / cloud
- Posts
- 435 from 1 Aug 2014 to 29 Oct 2026
- Posting
- weekly (108 in the last year)
- Kind
- company blog
- Feed
- https://www.innoq.com/en/feed.atom
2026 100
- Vortrag: "Mutation Testing für Coding Agents – Wer testet die Tests?" by Martin Otten — 2026-11-12 OBI Tech Talk: Mutation Testing & Embedded Cocktails (Köln)
- Vortrag: "Souveräne KI betreiben: Jenseits von Claude und ChatGPT" by Nicolas Inden — 2026-11-04 INNOQ Technology Lunch (04.11) (Online)
- Vortrag: "Mehr Wert, weniger Code: Warum gute Architektur bei Nutzerbedürfnissen beginnt" by Aminata Sidibe — 2026-11-12 INNOQ Technology Day Meetup Berlin (Berlin)
- Vortrag: "Vom Slop zum Harness" by Roman Stranghöner — 2026-11-12 INNOQ Technology Day Meetup Köln (Köln)
- Vortrag: "No Constrain, No Gain: Struktur für den Agent, Klarheit für den Menschen, Flexibilität für das Unternehmen" by Johannes Rave — 2026-11-12 INNOQ Technology Day Meetup Berlin (Berlin)
- Talk: "How Much AI Do We Actually Need?" by Joy Heron — 2026-11-12 INNOQ Technology Day Meetup Köln (Köln)
- Podcast #209: Integrationsmuster für Web-Frontends. Von Hyperlink bis Plugin-Modul
- AI Product Engineering
- New Website: The Agentic Trio Brings Discovery and Delivery into One Team
- Neue Website: Das Agentic Trio bringt Discovery und Delivery in ein Team
- Vortrag: "ADHS in der IT: Vom Chaos zum Code" by Joshua Töpfer — 2026-11-19 Java User Group Darmstadt (Darmstadt)
- Vortrag: "Trust, but Sandbox 2.0: Agenten sicher nutzen mit MicroVMs" by Michael Krämer — 2026-11-11 Agentic Software Engineering Night Offenbach (Offenbach)
- Vortrag: "Agentic Trio: Mit KI nicht (nur) schneller liefern, sondern bessere Produkte bauen" by Fabian Walther — 2026-11-10 Agentic Software Engineering Night Zürich (Zürich)
- Talk: "Same, But Better. No Mistakes: An Introduction to Agentic Legacy Modernization" by Michael Krämer — 2026-10-20 Agentic Software Engineering Night Zürich (Zürich)
- Vortrag: "Bessere Requirements für Softwareteams" by Dr. Gernot Starke — 2027-06-22 JUG-Hamburg Meetup (Hamburg)
- Vortrag: "Vergiss den Tech-Stack: Das Geheimnis erfolgreicher Teams liegt woanders!" by Joshua Töpfer — 2026-12-09 IT Tage (Frankfurt am Main)
- Vortrag: "Vier Jahre Ensemble Programming – Was ich lange übersehen habe" by Joshua Töpfer — 2026-12-09 IT Tage (Frankfurt am Main)
- Talk: "No Constrain - No Gain" by Johannes Rave — 2026-11-18 VibeKode Berlin 2026 (Berlin)
- Vortrag: "Agentic Software Modernization: Back to the Roots" by Markus Harrer — 2026-11-04 W-JAX (München)
- Vortrag: "ADHS in der IT: Vom Chaos zum Code" by Joshua Töpfer — 2026-11-04 code.talks 2026 (Hamburg)
- Talk: "From Collaborative Modeling to AI-Ready Domain Knowledge" by Michael Plöd — 2026-11-04 code.talks 2026 (Hamburg)
- Vortrag: "Mehr Wert, weniger Code: Warum gute Architektur bei Nutzerbedürfnissen beginnt" by Aminata Sidibe — 2026-11-04 W-JAX (München)
- Vortrag: "ADHS in der IT: Vom Chaos zum Code" by Joshua Töpfer — 2026-10-15 BaselOne 2026 (Basel)
- Talk: "From CSS to ZSH: A full-stack-yak-shaving journey" by Michael Vitz — 2026-10-15 BaselOne 2026 (Basel)
- Talk: "From Collaborative Modeling to AI-Ready Domain Knowledge" by Michael Plöd — 2026-10-15 KanDDDinsky (Berlin)
- Vortrag: "Agent-First Design: Neue UX für Menschen" by Michael Seel — 2026-11-19 KI Navigator 2026 (Nürnberg)
- Vortrag: "Gemeinsam statt einsam: agentische Entwicklung im Miniteam" by Michael Seel, Stefanie Lintner — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Wenn der Agent die Schadenspost sortiert: AI Systems Engineering in der Praxis" by Michael Seel, Peter Friedl — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "PASSION: Über Leidenschaft in einer Branche, die das Tun an Maschinen abgibt" by Michael Plöd — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Ihr entscheidet alle immer falsch!" by Gerrit Beine — 2026-11-12 INNOQ Technology Day (Online)
- Talk: "No Constrain, No Gain" by Johannes Rave — 2026-11-12 INNOQ Technology Day (Online)
- Talk: "Wasted opportunities: Why agentic teams should slow down" by Daniel Westheide — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "KI - unheimlich schlau?" by Tina Klüwer — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Passkeys integrieren: WebAuthn einbauen (Fortsetzung)" by Felix Schumacher — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Agenten als neue Stakeholder: Was Coding Agents von unserer Architektur verlangen" by Tammo van Lessen — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Agentic Software Modernization: Back to the Roots" by Markus Harrer — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Datenprodukte richtig schneiden: Heuristiken für die Praxis" by Stefan Negele — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "ADHS in der IT: Vom Chaos zum Code" by Joshua Töpfer — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Ist das Kunst oder kann das weg? Agile Werte in der postagilen Zeit" by Susanne Pfeiffer — 2026-11-12 INNOQ Technology Day (Online)
- Talk: "I Sandboxed My Coding Agents. You Should Too." by Joy Heron — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Open Source im Schaufenster, Lizenz an der Kasse: Warum einen Enterprise-Chat-Server selbst bauen?" by Philipp Beyerlein — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Wir haben doch keine Zeit! Oder?" by Benjamin Wolf, Markus Harrer — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Mehr Wert, weniger Code: Warum gute Architektur bei Nutzerbedürfnissen beginnt" by Aminata Sidibe — 2026-11-12 INNOQ Technology Day (Online)
- Talk: "Functional Domain Modeling in Java" by Fabian Walther — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Von Best Practices zu Better Questions: Reibung zwischen IT-Teams analysieren" by Anja Kammer — 2026-11-12 INNOQ Technology Day (Online)
- Vortrag: "Chatte mit deinen Unternehmensdaten – dank guter Data Governance" by Dr. Simon Harrer — 2026-11-12 INNOQ Technology Day (Online)
- Blog Post Jev and System One Models: how forms and UIs can become intelligent System One Models pick their answer from a list of predefined options, return a probability with it, and take only a few hundred milliseconds to do so. With Jev, TypeSafe AI has shipped the first implementation. It gets in
- Vortrag: "Garbage-In ist kein Schicksal: Bessere Anforderungen für Entwicklungsteams" by Dr. Gernot Starke — 2026-10-14 iSAQB Software Architektur Meetup (Frankfurt am Main)
- Talk: "Agentic Software Modernization: Back to the Roots" by Markus Harrer — 2026-11-18 VibeKode Berlin 2026 (Berlin)
- Blog Post Static Sites Without Big Tech Hosting Daniel Westheide
- Vortrag: "Schöne Dokumentation – nur mit Text" by Benjamin Wolf — 2026-11-26 .NET Developer Conference 2026 (Köln)
- Vortrag: "Masterclass AI Systems Architecture" by Michael Seel — 2026-11-18 Digitale Leute Summit 2026 (Köln)
- Vortrag: "AI Is Just Another System" by Benjamin Wolf — 2026-11-17 iSAQB Software Architecture Gathering 2026 (Berlin)
- Vortrag: "The Hidden Layer of Architecture Decisions: Power, Ownership, and AI" by Michael Plöd — 2026-11-17 iSAQB Software Architecture Gathering 2026 (Berlin)
- Vortrag: "Wie wir sprechen, entscheidet, was möglich wird" by Martin Huber — 2026-12-08 IT Tage (Frankfurt am Main)
- Blog Post The Shifted Complexity: From Waterfall through Agile to AI Susanne Pfeiffer
- Blog Post The New Economics of Software Development AI has dramatically reduced the time it takes to build software, but that doesn’t mean we should simply deliver more features. The productivity gains from coding agents give us an opportunity to rethink how we invest our development time. Instead o
- Blog Post Why 75 Dollars in Tokens Can Create So Much Value 75 dollars in token costs sometimes buy a week of work or more. What that means economically, and why companies often draw the wrong conclusion from it. Daniel Westheide
- Blog Post The Data Dilemma, Part 2 The first part showed why agents fail on undocumented data semantics and why Data Mesh is not a realistic answer for many mid-sized companies. This second part gets concrete: a Minimum Viable Data Mesh in four layers, from an honest inventory through curated views
- Blog Post The Data Dilemma, Part 1 When AI agents fail in a company, it is rarely the model’s fault. The real problem is the data: semantics, quality, and context are written down nowhere, they live in the heads of the domain experts. Data Mesh addresses exactly this problem, but it organizationally
- Blog Post How do you train people on a subject that changes every week? Looking back on a year of Agentic Software Engineering training Stefanie Heinrich
- Blog Post Trust but Sandbox Running Coding Agents Safely with Docker Sandboxes Michael Krämer
- Blog Post Beyond Claude & GPT Sure, we enjoy trying out the latest frontier model as much as anyone. But in day-to-day project work, what matters most is control over cost, data, and availability. That’s why we increasingly rely on open-weights models paired with open source tooling. Here’s what our
- Technology Lunch
- Vortrag: "Kontinuierliche Architektur- und Code-Modernisierung mit Team-Habits und der 1%-Methode" by Michael Plöd — 2026-10-12 Software Architecture Summit Oktober 2026 (Berlin)
- Vortrag: "Anforderungen und Architekturwissen für Coding Agents: zwischen Spec-Inflation und Vibe Coding" by Tammo van Lessen, Roman Stranghöner — 2026-10-13 Software Architecture Summit Oktober 2026 (Berlin)
- Blog Post Indecent Exposure I noticed a trend in recent years where teams first create APIs for their Single Page Application (SPA) and then offer the same endpoints to other teams for systems integration. In my opinion that is a bad practice and you should think twice before you do that. In this bl
- Blog Post What ECST Events, Domain Events, and ECST Really Are “ECST Event”, “Domain Event”, “ECST”: these terms appear in almost every discussion about Event-Driven Architecture and Domain-Driven Design. Surprisingly often in practice, different people have a different understanding of them. Christ
- Blog Post Stop Using Bearer Tokens Like House Keys You’ve built an API. You protected it with OAuth 2.0. You’re using JWTs. You feel secure. You’re not. Dimitrij Drus
- Blog Post Alternatives to U.S. Artificial Intelligence Why rising AI costs and digital sovereignty concerns are pushing me to look beyond Claude and GPT Joy Heron
- Blog Post Faster Is Not Better: On Experimentation Culture and What It Costs Faster experimentation sounds like an obvious advantage. But experimentation culture is not a universal paradigm. It is a product of a very specific context. And the people who bear the heaviest cost of poor product develop
- Blog Post OpenProject: A Real Alternative to Jira? In his article “Using Jira Data Center with AI Features”, my colleague Nicolas Inden showed how to connect a self-hosted Jira instance with an AI model. One point stands out: Atlassian will only support Jira Data Center until early 2029. After that,
- Read case study
- Blog Post The Agentic Trio Daniel Westheide
- Blog Post RAG and Fine-Tuning Large Language Models (LLMs) don’t always produce reliable results. In practice, one thing becomes clear: combining Retrieval Augmented Generation (RAG) and fine-tuning can make them more robust. This post explains how the two approaches complement each other – and why
- Blog Post Using the space, not optimizing the treadmill Features per unit of time is not a meaningful metric. What counts is whether they satisfy a real user need and contribute to a desired outcome. Agentic development opens up the space to finally take that seriously. Daniel Westheide
- Blog Post The Missing Half of Your Data Strategy Why Data Literacy Makes or Breaks Data Product Oriented Architectures Stefan Negele
- Blog Post Nebu: Self-made sovereignty There are plenty of open-source alternatives to Slack. None of them deliver real sovereignty. Community editions are deliberately pared down so no company can run them in production, while enterprise features sit behind commercial licenses. This article shows wh
- Vortrag: "AI Systems Architecture: Was zwischen Demo und Produktion passieren muss" by Ruben Vitt, Michael Seel — 2026-10-14 Software Architecture Summit Oktober 2026 (Berlin)
- Blog Post 50 Years of Cohesion - and Still Elusive? More than half a century ago, the concepts of coupling and cohesion were introduced into software architecture. Since then, “reduce coupling, increase cohesion” has become a fundamental guiding principle for designing software systems. And yet, opi
- Blog Post Accidental Complexity in the Heart of Software Domain-Driven Design went mainstream over the last ten years – in parallel with a wave of digitalization and modernization projects. That is not a coincidence. And it explains a lot about why so many of these projects fail to deliver what they
- Blog Post Hail Mary: Why domain knowledge cannot be extracted from experts Developing with AI through the cognitive Lens Daniel Westheide
- Blog Post From Vibe Coder to Agentic Engineer I no longer read every line of code that’s produced in my projects. I think most people who work intensively with AI agents feel the same way. When an agent produces a thousand lines in ten minutes, line-by-line review is no longer realistic. At the same
- Blog Post The Right Kind of Hard More structure, more output, more exhaustion. Spec-driven development has helped me get better results from AI agents – and drained my energy in the process. About dead weight, false clarity, and hidden costs I didn’t plan for. Roman Stranghöner
- Blog Post AI Features for Jira Data Center – No Atlassian Cloud Required Imagine this: after every customer meeting, structured Jira issues are created automatically. You just paste your notes into an AI, and it does the rest. Atlassian already offers that kind of magic in Jira Cloud: natural-langua
- Read case study
- Blog Post Where AI Helps (and Hurts) Across Different Coding Scenarios My takeaways from Stanford University’s Developer Productivity Study Markus Harrer
- Blog Post REST Beats MCP Instead of using dedicated APIs, agents can operate existing web applications directly. Like humans, they rely on the most consistent implementation of hypermedia and benefit from existing context, validation, and access controls. Using an expense report as an example, I sho
- Blog Post Spec-Driven Development is Domain-Driven Design’s Impatient Cousin Why BMAD won’t save you Daniel Westheide
- Blog Post The right size of a Data Product Setting the boundaries of data products incorrectly can lead to integration issues, unclear ownership and duplicated logic. This guide offers practical heuristics for creating data products of the right size. Stefan Negele
- Blog Post Agents good in the end? Software development consists of a constant chain of trade-offs. As long as I’ve been building systems, there have always been things you don’t do despite wanting to do them. But now, with agents, we can fulfill all our dreams and finally build everything we always
- Blog Post Understanding AI Coding Patterns Through Cognitive Load Theory Developing with AI through the cognitive Lens Daniel Westheide
- Blog Post Neuland reloaded When Angela Merkel said in 2013 that the internet is ‘Neuland’ (uncharted territory) for all of us, the amusement online was considerable. Viewed from some temporal and substantive distance, one can now recognize a perspective from which she was indeed correct. Gerrit Bein
- Blog Post I sandboxed my coding agents. Now I control their network. I want my AI coding agents to work independently, but I don’t want them to have unrestricted access to the internet. In this post, I describe how I routed all network traffic from my development sandbox through a strict proxy allow
- Blog Post Spec-Driven Architecture: When Agents Build, Architecture Must Speak Spec-Driven Development gives agents a clear foundation for implementation. What it doesn’t solve is how a portfolio of systems stays coherent. Spec-Driven Architecture applies the same principle at the architecture level
- Blog Post From Vibe Coder to Code Owner Torben Keller
- Blog Post Your Database Table is an awful API A shared database table can feel like the ultimate shortcut: no API design, no contracts - just a schema. The catch is that this convenience quietly turns into friction: it blurs boundaries, slows change, and makes independent evolution harder than it ne
- Blog Post Let’s Not Normalize Insecure AI Assistants AI assistants like OpenClaw promise convenience, autonomy, and increasingly personalized help. But beneath that promise lies an architecture that quietly combines private data, internet access, and exposure to untrusted content—the lethal trifecta
- Read case study
- Blog Post What to Do While the AI Is Thinking How deep work, multitasking, and code reviews change as we delegate tasks to AI Joy Heron
2025 53
- Security Podcast MCP Security Sicherheitsrisiken beim Model Context Protocol Christoph Iserlohn Dominik Guhr
- Blog Post AI and Elaboration: Which Coding Patterns Build Understanding? AI tools let you complete coding tasks without connecting new information to your existing mental models—a cognitive process known as elaboration that is crucial for building understanding. But some AI interaction patterns pres
- Blog Post I sandboxed my coding agents. You should too. LLM coding agents are extremely powerful because they can run programs on our computers using our permissions. However, this same power also makes us very vulnerable. It only takes one mistake or one prompt injection to compromise the whole sys
- Blog Post Leave It Better Than You Found It An Unexpected Architecture Win Daniel Westheide
- Blog Post Why not scatter @Transactional everywhere? @Transactional — great when you know when not to use it. Use it consciously instead of sprinkling it everywhere! Fabian Walther
- Blog Post From FOMO to Focus AI is on every agenda – but where do you start? Many companies launch multiple AI initiatives in parallel, driven by the fear of missing out. The result: scattered resources, lack of prioritization, and unclear business impact. AI Opportunity Mapping provides a solution:
- Blog Post Speed vs. Skill Developing with AI through the cognitive Lens Daniel Westheide
- Blog Post Context Engineering: Managing AI-Generated Code Complexity AI tools make developers more productive at writing code, but can overwhelm code reviewers with massive changes. Learn practical strategies for managing context in AI-assisted development to keep your code comprehensible, your revi
- Blog Post Managing Geopolitical Risks with Enterprise Architecture André Aulich Anja Kammer
- Blog Post Achieving Digital Sovereignty with Standard Software In the context of IT system landscapes, digital sovereignty is often equated with autarky— complete independence from third parties. By that logic, , a company developing and operating all applications in-house would be the ultimate exam
- Blog Post Git Clarity: Building Meaningful Commits and Linear History Feeling overwhelmed by Git’s complexity? Discover a streamlined workflow that centers on creating single, comprehensible commits. Learn how this approach leads to clearer code reviews, fewer merge conflicts, and a beautiful linear
- Blog Post A Governance Framework for Digital Sovereignty In an increasingly connected world where digital infrastructure forms the backbone of our economy and society, the topic of digital sovereignty is gaining more and more attention. For decision-makers in German-speaking countries, this goes far
- Blog Post Modern Legacy (thanks to AI) Why Focusing on Code Alone Falls Short in the Age of AI Markus Harrer
- Blog Post The Path to Heterogeneous Cloud Platforms Digital transformation brings both challenges and opportunities for businesses. To create future-proof and flexible IT infrastructures, more and more companies are adopting multi-cloud or hybrid cloud strategies. This isn’t just about cost reductio
- Blog Post Swiss Army Knife for Salesforce: LLM with In-Memory Database Large Language Models (LLMs) struggle with transforming large datasets, particularly when performing aggregations that require calculations - essentially anything where you’d normally use GROUP BY or ORDER BY in SQL. But what if
- Blog Post Digital Sovereignty: Why Architecture Matters and How to Make Your Company Resilient In an era where digital systems form the backbone of our economy and society, control over one’s digital future is increasingly becoming the focus of strategic decisions. For many technology decision-maker
- Blog Post Data Inventories in the EU Data Act: The Democratization of IoT Devices Stefan Negele
- Blog Post Think Locally: On-Premise LLMs as Drivers of Competitive Advantage Consider this scenario: Your organisation has integrated AI tools into critical business processes, your legal team has carefully reviewed data processing agreements, and your IT department has configured systems to comply
- Blog Post EU Data Act: The Beginning of the End for Cloud Monoculture? What has the EU ever done for us? …well, aside from free movement, no roaming charges, consumer protection, the single market, Erasmus, and more. But also: excessive bureaucracy, slow decisions, overregulation down to the much-mo
- Blog Post Digital Sovereignty as Self-Understanding Florian Kretlow
- Blog Post Software Analytics going crAIzy! I’ve long been an advocate of treating software like data and analyzing it accordingly with tools like Python, pandas, Jupyter Notebook, Neo4j, and jQAssistant. In the era of AI and code transformation tools, seeing software as data gets more and more impor
- Blog Post The Sovereignty Trap: Between Tiananmen and Trump We talk a big game about values and privacy, yet depend on AI that either denies historical atrocities or could cut us off tomorrow. Is this what Europe gets for dropping the ball on high tech infrastructure? Robert Glaser
- Blog Post Updating OWASP’s Microservice Security Cheat Sheet: Practical Considerations & Recommendations Dimitrij Drus
- Blog Post From Data Graveyards to Knowledge Landscapes Europe is sitting on a wealth of public data—but much of its potential remains untapped. The challenges are well known: fragmented portals, incompatible interfaces, and growing reliance on non-European platforms that slow innovation. While new i
- Blog Post Updating OWASP’s Microservice Security Cheat Sheet: Decision Dimensions for Authorization Patterns Choosing the right patterns is critical, as it directly impacts the system’s security posture, performance, scalability, and maintainability. Dimitrij Drus
- Blog Post Updating OWASP’s Microservice Security Cheat Sheet: Identity Propagation Patterns Without trustworthy identity propagation, even strong initial authentication can be undermined — weakening trust boundaries and ultimately impairing the system’s ability to make reliable authorization decisio
- Blog Post AI — Behind the Buzzword Garbage Tired of AI hype? Me too. But beneath the buzzwords lies real value for developers. Tools like Claude Code save me hours on routine tasks, freeing me to focus on what matters: understanding problems and building the right solutions. It’s not magic—it’s prac
- Blog Post Updating OWASP’s Microservice Security Cheat Sheet: Authentication Patterns Dimitrij Drus
- Blog Post Updating OWASP’s Microservice Security Cheat Sheet: Core Concepts In part two of my series, I begin the journey to rethink the OWASP Microservice Security Cheat Sheet. This post focuses on core concepts, laying the groundwork for practical, real-world microservice security. Dimitrij Drus
- Blog Post What’s Wrong with the Current OWASP Microservice Security Cheat Sheet? Modern microservice architectures require evolving security practices. Yet popular resources like the OWASP Microservice Security Cheat Sheet are starting to show their age and need a fresh look. Dimitrij Drus
- Blog Post First Agile, Then Agentic Why AI Won’t Help You Daniel Westheide
- Blog Post Context Engineering Have you ever wondered how chatbots, copilots, or virtual assistants seem to know just the right things to say — or sometimes, spectacularly fail? The difference often comes down to one crucial skill: context engineering. Saikrishna Thonduru
- Blog Post Technical and other Debt in IT Systems This article explores the many hidden forms of technical debt that silently slow down IT teams—far beyond just messy code. Dr. Gernot Starke
- Blog Post Updating OWASP’s Microservice Security Cheat Sheet: Authorization Patterns Dimitrij Drus
- Blog Post Enabling Stakeholders as a Success Factor André Aulich
- Blog Post Internal Development Platforms Internal Developer Platforms (IDPs) help us accelerate software development. They represent the natural evolution of developments over the past decades. We’d like to show why this is the case with a historical overview and then examine current challenges. Sve
- Blog Post How Much Thinking Can a Team Handle? Gerrit Beine
- Blog Post Socio-Technical Architectures: Informality from Mining to Today Informal structures are hard to spot – but they can make or break a technical solution. Sociotechnical systems show why that matters, and what mining has to do with building apps. Lena Kraaz
- Blog Post Infrastructure in architectural documentation Most people are familiar with the principles of good architecture documentation. However, the infrastructure often goes unnoticed or is only understood by a few “experts”. Especially with complex systems, it is important to record solution conc
- Blog Post Socio-Technical Architecture as a Competitive Advantage André Aulich
- Blog Post Always up to date JDK 23 already contains the second preview for the new Class-File API, which will probably be completed in JDK 24. Now it’s time to take a look at what this API is all about and how we can use it. Michael Vitz
- Blog Post Spring Boot Actuator Endpoints The Actuator module has been promising to help make the application ‘production-ready’ since the start of Spring Boot. But what exactly does that mean? What does the module already offer and how can we expand it? This article provides detailed answers to all
- Blog Post A Brief History of HTTP HTTP’s progression from text over TCP to semantics and binary QUIC streams Erik Wilde
- Blog Post Beyond the hype: An engineer’s journey into ReBAC and AI with the Model Context Protocol In this article, I share my experiences on my journey into the AI world. During this journey, we’ll build our own Model Context Protocol (MCP) Server using C Sharp, learn about access management with r
- Blog Post Common Approaches in the Field of Socio-Technical Architectures In the age of digitalization and modernization, companies face the challenge of not only keeping up with technological advancements but also optimizing their organizational structures. Socio-technical architectures play a cruc
- Blog Post Platforms, Teams, and APIs: How Do They Fit Together? One of the major trends in recent years has been Platform Engineering, as many organizations strive for more efficient and fasterdevelopment practices. The term has gained traction since 2018, particularly following an influential artic
- Blog Post Building Standardized AI Tools with the Model Context Protocol (MCP) Michael Vitz
- Blog Post Rules, Tools, and Teamwork Static code analysis. A necessary evil? A lifesaver? A constant struggle? Let me show you a few important things that might make your life with code analysis easier. Benjamin Wolf
- Blog Post Transcribing podcasts with large language models Automatically transcribing podcasts with multimodal AI sounds like a no-brainer, but the devil is in the details. Hermann Schmidt
- Blog Post RAG: The Architecture of Reliable AI Annotated Talk+ for later reference Robert Glaser
- Blog Post Document Ingestion How can we transform a pile of diverse documents into a high-quality knowledge base for AI systems? Document ingestion is the critical first step in any Retrieval-Augmented Generation (RAG) system—and often the reason why these systems fail. Marco Steinke
- Blog Post Retrieval-Augmented Generation How do we handle situations where an LLM-driven system requires highly specialized enterprise knowledge that wasn’t included in the original model training? While LLMs have enormous potential to answer generic queries based on their comprehensive knowledge fr
- Blog Post Implementing GitOps without Kubernetes Anja Kammer
2024 29
- Blog Post When the Worldview is Shifting Large Language Models (LLMs) can feel like magic. We observe them and imagine that they work in a certain way. Then something surprises us, shattering the illusion and fundamentally reshaping our understanding. In this blogpost I’ll show you one such surprise
- Blog Post Better RAG With Hybrid Search One component of RAG (retrieval-augmented generation) is the retrieval. In other words: we have to solve a search problem. Reading articles about RAG, one can get the impression that vector search is the essential or even the only piece of the puzzle. In this
- Blog Post Use webjars-locator-lite with internal WebJars Michael Vitz
- Blog Post LLM-assisted Abbreviation Mining for Legacy Systems This blog post shows the process of mining abbreviations and discovering first concepts a COBOL legacy mainframe codebase is made of with the help of Large Language Models. It uses Python, pandas and Claude 3.5 Sonnet to generate insights
- Blog Post Generative AI: The End of “Too Expensive” in Business Software? ”We’ve found no use cases.” — No, you’ve got too many. Let’s take a look at how Generative AI will change business software beyond chatbots. What features might become possible that weren’t before, or were just too expensive?
- Blog Post Java and its annotations Java code without annotations is hardly conceivable nowadays, even though it is constantly criticized. It’s hard to believe that there was a time before them. Three use cases demonstrate how these problems were solved before the introduction of annotations and how
- Blog Post Here’s All You Need To Know To Start Building With Generative AI Curious on how to start building with Generative AI? This guide covers the basics, from deploying local models to utilizing tools like Huggingface and LangChain. Learn to create your first AI application, manage customer feed
- Blog Post Perfect solution for legacy code This article is about people who are passionate about improving legacy systems. They are motivated to constantly reduce technical debt to ensure that software systems remain expandable in the long term. Prejudices and stereotypes in our industry prevent us
- Blog Post How To Build a Data Product with Databricks In today’s data engineering, the focus is primarily on developing modular data products. This article outlines the advantages of modularity over monolithic data pipelines and explains, step-by-step, how to develop data products using Databricks –
- Blog Post Type-safe SQL queries in Java and Rust In recent years, our industry has been in favour of strong typing and build-time verification to make certain classes of bugs impossible. How much influence has this trend had on how we can write SQL queries in Java? Let’s look at how typesafe SQL que
- Blog Post Identification of Team Boundaries How to Identify Boundaries for Autonomous, Cross-Functional Teams Michael Plöd
- Blog Post Type-safe HTML templates in Java and Rust The current fashion in our industry is to use static and strong typing wherever possible. How fashion-conscious is the Java community when it comes to HTML templating, though? Let’s have a look at what approaches at type-safe or build-time verified
- Blog Post gRPC One of the main tasks that business sets for IT as an industry is the creation of effective software, according to criteria that clearly meet the needs of this business. On the other side, one of the main prerequisites for achieving the goals that a business sets for itself is the abi
- Blog Post Type-safe HTTP routing in Java and Rust The Type-Safe Web Stack, Part 1 Daniel Westheide
- Blog Post Where does it go from here? In this (fifth) installment of the mini-series on software architecture, we leave behind the realm of small to medium-sized systems and take a look at large, risky, and complex projects. In other words, we examine the “scaling” of the role of software architectu
- Blog Post Who does it? In this (fourth) installment of the mini-series on software architecture, we explain who might carry out the architecture tasks that were discussed in the previous articles. I also present a number of possible role definitions for software architecture along with their pros an
- Blog Post Communicating organizational changes with “Team Topologies” Jakob Oswald
- Blog Post Automating Dependency Updates with Renovate Regardless of whether we are working on an application or a library, we always have to deal with dependencies. We are dependent on the version of our programming language, on external or internal libraries, and on tools. In addition to the actual
- Blog Post Compliance in hybrid operating environments A socio-technical view Anja Kammer
- Blog Post Technologies for the Integration of Services In the course of an internal study, we asked a number of INNOQ consultants about their experiences in current or past development projects. One interesting topic here was the integration of microservices and self-contained systems (SCS). Asynchr
- Blog Post Tasks and activities – How is it done? Fundamentals of software architecture – Part 3 Dr. Gernot Starke
- Blog Post Combinable Elements for User Interfaces on the Web The way we develop user interfaces on the web has changed significantly in recent years. In this column, we therefore want to examine what a modern approach looks like and which challenges this poses, especially for classic template engine
- Blog Post Extending the OpenTelemetry Java Agent for Spring Auto-Instrumentation OpenTelemetry is great. A few days ago, I was diving a bit more into the intrinsics of the OpenTelemetry standard and the Java auto-instrumentation in particular. Dominik Guhr
- Blog Post The Evolutionist Software Architecture Work on Existing Systems Markus Harrer
- Blog Post Building, purpose, aesthetics Welcome to the first part in the mini-series on software architecture. We start by examining the original source of the term – since the word architecture presumably conjures in most people thoughts of buildings. Dr. Gernot Starke
- Blog Post Terms Welcome to the second part in the mini-series on software architecture. Dr. Gernot Starke
- Blog Post Rate Limiting with Spring Boot, Bucket4j, and Redis Martin Weck
- Blog Post Rate Limiting with Spring Boot Let’s implement rate-limiting protection for your Spring Boot server without the need for any additional dependencies beyond those included in the Spring Boot Starter package. Martin Weck
- Blog Post Compacted State Feeds Event notification vs. Event-carried State Transfer vs. Delta loads. How to design good event architectures for mutable data? Jochen Christ
2023 46
- Blog Post Rooting Out Issues: JPA and Lombok Combination Problems Demystified Tina Schönborn
- Blog Post Automated code maintenance with OpenRewrite With the large number of software development projects in most organisations, keeping these projects up to date with the latest security patches and framework updates can be quite a task. OpenRewrite is a library that provides an automated soluti
- Blog Post Schema Evolution Using Kafka, sooner or later you might want to describe a schema to specify your data structures. Since software continuously changes during it’s lifetime you’ll also have to evolve your schema. In this article we’ll discuss approaches and tools which can guide you in the
- Blog Post Micro Frontends With Ionic And Capacitor We planned and set up a micro frontend architecture using Capacitor and Ionic. In this article, I talk about some of the challenges we faced and the ways we solved them. Christoph Burnicki
- Blog Post Testing your GitLab CI/CD pipeline Jakob Oswald
- Blog Post JDK 21, the next long-term support release The newest JDK release, version 21, appeared on September 19th. A number of developers view it as a long-term support release that will be supported for at least the next five years. As many applications will presumably be updated to version 21 fr
- Blog Post Containers for tests and local development with Spring Boot 3.1 Spring Boot 3.1.0, the most recent minor release of Spring Boot 3, appeared in May. In this article, we will be taking a look at how the new support for Testcontainers and Docker Compose can help us with tests and local develo
- Blog Post Testing in Spring Boot applications Slice it up, please Michael Vitz
- Blog Post How to bootstrap a tech conference with a 100% women+ speaker lineup A tech conference focused on data and AI in the midst of a hype around machine learning, and LLMs in particular. Fair enough. But what we had in mind when planning the first edition of the Women+ in Data and AI summer fes
- Blog Post No future-proof architectures! Architecture: The term itself radiates stability. It seems clear, then, that good architecture should be future-proof. But precisely this goal often leads to problems. Does that mean it is better not to design future-proof architectures? Eberhard Wolff
- Blog Post Is Platform Engineering the new DevOps? Sascha Selzer
- Blog Post Concise Documentation – Revisited You think architecture documentation is cumbersome and takes a long time to create? We will prove you wrong. Dr. Gernot Starke Benjamin Wolf
- Blog Post Remote Mob Programming The entire team is sitting in an online meeting and developing software together. One person types the code while the others discuss. Sound strange? That is remote mob programming, an exciting style of work for distributed teams. Read on to learn what it’s all about
- Blog Post What is a Data Product? Dr. Simon Harrer Jochen Christ
- Blog Post Improve your CSP with Style Nonces in Angular 16 What to do, to enable your Angular application to use style-src: nonce in a CSP for stricter security rules Joachim Praetorius
- Blog Post A natural language calculator In my prior post I’ve written about how to run a chat with a large-language-model on your PC. This time I want to focus on scripting this with Node.js and letting the AI- and the “normal”-world interact with each other. David Kamphausen
- Blog Post Accessibility on the Web Part 2 Accessible Content Dr. Andreas Maier Bayar Abdullah
- Blog Post How we cut our website’s carbon emissions in half Between 2010 and 2030, the environmental impact of the digital world is expected to triple. While network infrastructure and devices get more and more efficient, all of these improvements are eaten up by more and more people and devices bei
- Blog Post Does BI Software Make Sense for Development Teams? Time is a valuable asset, and it is easily consumed by the analysis and preparation of data. In other words, there may be good reason to come to grips with BI software. Daniel Lauxtermann
- Blog Post Accessibility on the Web Part 1 Creating a Web Application Bayar Abdullah Dr. Andreas Maier
- Blog Post Build an internal development platform We are currently breaking down our software into smaller pieces, such as SCS or microservices, and deploying them on cloud platforms to take advantage of their elasticity and flexibility. However, as our technology stack grows more complex, it has bec
- Blog Post AI Tools in Business Environments Currently, the importance of AI tools is growing at a breathtaking pace and has also gained importance in the general public. More and more companies and organizations are relying on the advantages of artificial intelligence to improve their processes, inc
- Blog Post Evolving software like an orchardist Comparing apple trees with software modernization Markus Harrer
- Blog Post Drawers for Product Owners The duties of the Product Owner role are a regular topic of discussion. Because the role is understood in a variety of different ways, new and different terms are regularly encountered. It is time to take a different view that considers the relevant context. Dani
- Blog Post Running an AI Chatbot on Your Own PC Llama.cpp, gpt4all and others make it very easy to try out large language models. Here’s a short guide to trying them out under Linux or macOS. David Kamphausen
- Blog Post Why Your Team Needs Data Products Daniel Lauxtermann
- Blog Post Draw The Diff Software developers have an idiosyncratic penchant for boxes and arrows. Back when we used to go to the office we penned them on whiteboards. Later, as the force majeure accelerated the digital transformation of our economies, we drew them online. Jan Stępień
- Blog Post Babylon as a Feature The Tower of Babylon is a myth meant to explain why the world’s peoples speak different languages. In modern IT systems, it’s often a requirement to support multiple languages. Such internationalization (i18n for short) is a tough challenge – and this post describes a
- Blog Post Assessing the Sustainability Impact of Startups As a startup, caring about sustainability should be a priority for several reasons. Firstly, a sustainable product can differentiate your business from competitors and attract environmentally conscious customers and investors. There are vario
- Blog Post An Introduction to TLA+ and Its Use in Parties You’ll get your pizza eventually Jan Seeger
- Blog Post Property-based Testing with “fast-check” It isn’t exactly news that developers have to write not only code but also tests. Nevertheless, many find this to be burdensome and monotonous work. Plus, it is far from guaranteed that unit tests actually cover all the border and non-border cases.
- Blog Post How to Encrypt a File on the JVM You’ve got a secret password and some bytes you’d like to encrypt. JVM has all the tools you need to get it done. Jan Stępień
- Blog Post Creating data products with Terraform on AWS André Deuerling
- Blog Post Automated code maintenance with OpenRewrite (Part 2) In part 1 of this series, I showed how OpenRewrite can be used to automate code maintenance tasks for software development projects in your organisation. In this post, I will demonstrate how to write your own OpenRewrite refactoring reci
- Blog Post Automated code maintenance with OpenRewrite (Part 1) Piet Schijven
- Blog Post Kustomize Enhancement with KRM Functions For a while, Kustomize has offered the possibility to extend its functionality with plugins that can be implemented in different ways. A new way is to use KRM functions that are not proprietary and can also work with other tools. Sascha Selzer
- Blog Post Round-robin coding Remote mob programming typically means one person takes on the role of typist at the screen with an open IDE, more or less typing what the others tell them to. To ensure that everyone stays on top of the work, the role of typist is frequently changed up and the current s
- Blog Post How to use Apple Shortcuts to integrate GPT-4o in macOS and iOS Hey GPT, what’s this email about? Robert Glaser
- Blog Post Blueprints JavaScript’s approach to object orientation is different from other languages. This hasn’t been changed by the introduction of classes, even if it looks that way at first glance. Read on to learn how this unusual system works. Dr. Lars Hupel
- Blog Post What is Sustainable Software? Environmental sustainability is a very important issue, but software is something virtual, so it doesn’t seem to have an impact, right? Wrong! As software creators, we have a significant impact and can make a difference by incorporating the principles of eco-f
- Blog Post Shortcomings of ISO 25010 Dr. Gernot Starke
- Blog Post How to use and build your own distroless images Security and efficiency are key goals in production systems. This begins when we build our application images and look for a suitable base image. So what are good base images and how do distroless images fit into this picture? Sascha Selzer
- Blog Post How AI will replace my job In late 2022, I decided to try to use ChatGPT, an AI language processor, to do some of my daily software development work. Now, only a few weeks later, I am convinced AI might soon do most of my current work, at least measured by hours. Christoph Burnicki
- Blog Post How to prepare a (not only technical) talk Fabian Walther
- Blog Post Custom Elements are NOT for Templating Custom elements are a main technology included in the Web Components Browser specification. They provide a set of APIs for adding custom behavior and interactions to an HTML element – and they do this very well. However, they often are unfairly compar
- Blog Post Behaviour over structure We, developers, often forget why we even exist. We quite often don’t remember that our purpose is not to write software, but to solve problems. Those come in different forms, but can be generalized as “we need to start doing this”, “we need to stop doing this” or “
2022 30
- Blog Post Frontend integration options Till Schulte-Coerne
- Blog Post Processing medical study data with Data Mesh technologies Together with our customer CluePoints, we evaluated new technologies, tools and standards for data storage, data processing, data versioning, and data lineage. These might become useful for refactoring their self-serve data platform
- Blog Post Modules – Microservices – Monoliths Microservices were supposed to solve every architectural problem conceivable. Not too surprisingly, that was not the case. Now themonoliths thatwe have been developing for decades are supposed to be the solutionagain. Inthis discussion, the foundation fo
- Blog Post Logging in Java Logback, Log4j, SLF4J, and many more. Anyone working with automatic logging in Java will immediately come across an entire range of libraries that, at first glance, seem to do the same thing: issue log messages. So, in this article, we want to look at why there are so many
- Blog Post Direnv: Automatic environment care Jan Seeger
- Blog Post Documenting software architecture with arc42 arc42 is a template for architecture communication and documentation. It is a proven, practical and highly pragmatic approach and takes the pain out of documentation. Dr. Gernot Starke
- Blog Post How I regained concentration and focus For years, I enthusiastically produced content: books, articles, blog posts, and talks – averaging a book and a half plus five articles per year. Since about 2020, my productivity has plummeted – leaving me totally frustrated. There were no external c
- Blog Post Offline with redux We’ve been writing a web application that supports users being offline without using a service worker. We’d love to share how we’ve done that and what we think are the advantages. Joachim Praetorius
- Blog Post Advanced Kustomize features Sascha Selzer
- Blog Post Infrastructure Self-Service with Crossplane Introducing container technology and Kubernetes to the development and deployment process allows developers to independently manage deployments of their services without needing to interact with the platform team. This is true for applications bu
- Blog Post We Are Developers World Congress 2022 in Berlin Our colleagues were on site, staffing the booth, speaking with fellow developers, and delivering two talks. Dr. Lars Hupel Miriam Hofmann
- Blog Post Dependently-Typed TypeScript A look into the depths of the type system for JavaScript Dr. Lars Hupel
- Blog Post cards42 English edition Finally, cards42 is available in English! The cards42 project supports software developers in your daily work with software architectures. 30 cards provide brief food for thought for stuck situations and help shed new light on difficult challenges. This article prov
- Blog Post Rich code documentation with Jekyll Static site generation is a perfect fit for publishing documentation. In a recent project, we chose to use a combination of Jekyll and NGINX to build and host the documentation. In this post, I show how to process and include other types of assets. Dr. L
- Blog Post Customer-specific documentation with Jekyll Dr. Lars Hupel
- Blog Post Data Mesh: Decentralized Data Analytics for Software Engineers The decentralized data architecture approach Data Mesh is designed to enable developers to independently perform cross-domain data analysis. Jochen Christ
- Blog Post Querying DNS and LDAP Using JNDI The Log4Shell vulnerability has also placed JNDI in the spotlight. Although JNDI has been around since 1997, many developers have never heard of it or don’t know exactly what it’s for. To change this, in this article we’ll look at what JNDI is and how we ca
- Blog Post TypeScript – Taming the Complexity of JavaScript Dr. Lars Hupel
- Blog Post INNOQ and Family Is it possible to successfully combine a family and a consulting career? Here at INNOQ we think so. Three of our employees report on how and why this works well. Lena Kraaz Daniel Bornkessel Philipp Schirmacher
- Blog Post Next Please! Despite modern multicore processors, website code usually runs in only one thread. True parallelism therefore does not exist, but a clever programming model still allows “asynchronous” code that is not processed linearly. Dr. Lars Hupel
- Blog Post Managing Kubernetes Resources with Kustomize An introduction to a template-free alternative to Helm Sascha Selzer
- Blog Post Fairness and Artificial Intelligence Classical software testing cannot simply be transferred to AI. Model governance and internal audits are required to ensure fairness. Isabel Bär
- Blog Post Processing JSON in Java In contrast to many other programming languages, JDK for Java does not provide an out-of-the-box solution for the reading and writing of data in JavaScript Object Notation (JSON). So we have to find a suitable library for performing this task. In this article we the
- Blog Post CORS extension “Private Network Access” Understanding the new preflight requests Simon Kölsch
- Blog Post Ethics and Artificial Intelligence Artificial intelligence is forcing its way into many fields of application. Now it is important that it works in a responsible, secure, and transparent way. The regulation of AI systems is a legal, societal, and technical topic that demands broad awarenes
- Blog Post Principles of technical documentation This article collects fundamental requirements for technical documentation, especially software architecture documentation, together with ideas how to satisfy those. Dr. Gernot Starke
- Blog Post Libraries for command-line applications Processing arguments and options in Java Michael Vitz
- Blog Post Awesome presentations deserve beautiful code Occasionally we need to put parts of our source code onto slides for presentations. The common presentation programs (such as PowerPoint or Keynote) fail miserably at this task because they interpret code as normal text. Syntax highlighting is l
- Blog Post MLOps and Model Governance MLOps and model governance are often viewed as separate processes. And yet they rely heavily on one another. In this article we therefore propose the integration of these frameworks and explain the most important principles and technical components of MLOps and M
- Blog Post A Comparison of Java HTTP Clients Many Roads Lead to the Web Michael Vitz
2021 27
- Blog Post Authoring Markdown with Zotero - My Workflow This post describes an authoring workflow that combines the simplicity of markdown (for writing) with the power of a reference manager (for citing and generation of a bibliography). Dr. Gernot Starke
- Blog Post What Does a Bundler Actually Do? Frontend development without JavaScript is rarely possible. Seasoned backend developers are then confronted with a completely new toolchain overflowing with unknown technical terms. But there is method behind the complexity. Dr. Lars Hupel
- Blog Post Data Mesh to Go: How to Get the Data Product You know what a data mesh is? You understand its basic principles? But you don’t know how on earth to get the data product? Then I will show you how to extract your data product from your Domain-driven Design (DDD) artifacts. Philipp Beyerlein
- Blog Post HTTP Feeds Asynchronous Interfaces without Kafka or RabbitMQ Jochen Christ
- Blog Post The Way of the Request The Play Framework is a web application framework for Scala and Java inspired by Ruby on Rails. Although I like the official documentation, I always found it lacking in how requests runs through the framework. This article takes the reader on a journey tracing a requ
- Blog Post Software quality in the context of value chains and evolution Quality goals help to make more informed architectural decisions. However, identifying a set of the most needed qualities is a challenging task. Quality requirements are strongly dependent on the perspective of individuals. The
- Blog Post Injecting environment variables into static websites using NGINX Dr. Lars Hupel
- Blog Post Using feature flags with FF4j, Togglz, and Unleash in Java Feature flags are now a fixed feature of many projects. In this column we will consider which problems can be resolved with their use. In addition to the theory, we also look at the three Java libraries FF4j, Togglz, and Unleash, w
- Blog Post Quality Driven Software Architecture - Revised Quality is the raison d’être for software architects: Our systems should be reliable, performant, scalable and user-friendly. Systems should be build and maintained cost-effective and future-proof. Every IT professional knows that this combina
- Blog Post Test organization and naming Torsten Mandry Theo Pack Jacek Bilski
- Blog Post What’s in a name: Legacy The term “legacy” has a negative connotation in IT, and stands for an old, somehow bad piece of software. In real-life, legacy has a completely different and often positive meaning. Dr. Gernot Starke
- Blog Post Test Strategy In our previous posts, we focused on why and how we write tests. In most of our projects, there will be many of those tests. In the last post about tests granularity, we additionally stated that there usually will be different kinds of tests, on different levels of granularit
- Blog Post Decentralized Architecture: What’s Behind Blockchains? Dr. Lars Hupel
- Blog Post Collaborative Learning with Mobshops First impressions from an online-first teaching technique using remote mob programming at its core Markus Harrer
- Blog Post The (new) Software Architecture Foundation curriculum Want to learn Software Architecture? Look no further – the recently released iSAQB Foundation Curriculum covers all your needs! Dr. Gernot Starke
- Blog Post What’s in a Name: Quality We use the word quality colloquially for something “good” – but we usually leave open what exactly we mean by it. This article illustrates that we should be a little more precise in this regard. Dr. Gernot Starke
- Blog Post Migrating the iSAQB® Mock Examination to AsciiDoc The iSAQB(R) provides a mock-examination for the Foundation-Level certification. This post shows how we moved this exam from docx format to AsciiDoc, facilitating collaboration and enabling automated generation of the required multilingual
- Blog Post iSAQB Advanced Level examination anti-patterns As the “crowning glory” of the iSAQB(R) Advanced Certification, you have to write an approximately 40-page-long paper (AKA architectural solution) to a given problem. During our 5+ years of experience in reviewing such papers, we found several
- Blog Post Just Add Code (Part 2) Using GitHub Catalyst for Progressive Enhancement with Web Components Joachim Praetorius
- Blog Post Is Domain-driven Design overrated? Domain-driven design (DDD) is a useful approach that provides excellent guidelines for modeling and building systems, but it is a means to an end, not an end in itself. While the concepts are valid, you lose a lot if you limit yourself to using them only:
- Blog Post What tracks do we leave behind with technology? Bei INNOQ setzen wir uns immer mehr mit KI und Machine Learning auseinander, allerdings mit ihrem sinnvollen Einsatz bei unseren Kunden und Projekten. Beste Voraussetzungen also für einen spannenden Diskurs. Christine Graf Robert Glaser
- Blog Post Just add Code (Part 1) Using Hotwire Stimulus for Progressive Enhancement with Web Components Joachim Praetorius
- Blog Post Turning a group of strangers into a team A testimonial how five foreigners became a team via Remote Mob Programming in less than a day. Benjamin Wolf Felix Knopf
- Blog Post Defect Analysis using pandas Defect Analysis is a classic analysis technique to get insights into how buggy your system might be. In this blog post, we explore how Defect Analysis works and how we can implement it with a standard data analysis tool from Python: pandas. Markus Harrer
- Blog Post Progressive Enhancement with Hotwire The definitive renaissance of server-side rendering? Joachim Praetorius
- Blog Post Remote Mob Programming at INNOQ At INNOQ, some teams successfully use the methodology Remote Mob Programming in customer projects, some of them even for more than two years. We asked four teams what their experiences with this particular method are and have been. Martin Huber Joshua Töpfer
- Blog Post Deploying a WebAssembly smart contract on Oasis Ethereum One of the cornerstones of Ethereum 2.0 is the migration from the “classic” EVM to a WebAssembly-based virtual machine. In this post, I explain how to deploy a compiled WebAssembly contract to the Oasis Ethereum chain. Dr. Lars Hupel
2020 36
- Blog Post Innovation in the web without sacrificing accessibility We’ve truly stretched the boundaries of what is possible on the web. However, to do this we’ve sacrificed semantic HTML and made our applications inaccessible to a huge amount of different users. Instead of breaking the foundation of
- Blog Post Pragmatic RESTful HAL APIs Kitchen Tricks and Tips Leonardo Ramirez Dirk Lingstädt
- Blog Post Tests Granularity In two previous posts we discussed the benefits of automated tests and the properties of a good test. So far we were trying to avoid differentiating the tests in any way. This time we want to address one way how tests can be classified: tests granularity. Jacek Bilski Tor
- Blog Post Good arguments for SPA frameworks I love SPAs when they are used with a clear purpose. I hate them when they are not. This blog post tries to explain my personal conflict. Falk Hoppe
- Blog Post Anatomy of a Good Test Torsten Mandry Jacek Bilski
- Blog Post Developers are Irresponsible and Childish! If you don’t babysit developers, they’ll do nonsense all day long. How should you deal with them? Eberhard Wolff
- Blog Post Why you should write automated tests This blog post gives an overview of the most common benefits gained by writing automated tests. It starts in a place where most of the projects we’ve seen so far are: tests are written as a last step of the development process. Then it shows additional
- Blog Post Visualizing the progress of a refactoring into a hexagonal architecture using jQAssistant Torsten Mandry
- Blog Post Cookie-based Spring Security Session If you need authentication within your Spring Boot web application, the natural choice is to use Spring Security. It’s easy to use and, as long as you stick close to the defaults, it’s also quite easy to configure. But, by sticking to those defaults, yo
- Blog Post Happy without a Service Mesh The basis for meaningful architecture decisions is the examination of the problem and a good overview of the options. Hanna Prinz
- Blog Post Domain-driven Design in the Large If you know how to classify the concepts of DDD correctly, it will be easy to achieve good results - and there is a structured approach to achieve that! Eberhard Wolff
- Blog Post Does “Broken” Agility Help? Agile software development is often insufficiently implemented and executed. Does it help anyway? Eberhard Wolff
- Blog Post Automating Dependency Updates with GitHub Actions This describes setting up a GitHub Actions workflow from scratch to schedule automated dependency updates. Frederik Dohr
- Blog Post React: Lessons Learned Ludvig Sundström
- Blog Post Injecting polyfills for missing JavaScript functions into WKWebView Hybrid apps often use the WKWebView to display the web app part. Unfortunately there is no console output to being able to debug it. This blog post provides a guide on how to add polyfills to WKWebView with native code int
- Blog Post Integral Evolutionary Organizations Most companies face the major challenge to get as many employees as possible actively involved, that they do not only do service as a small cog in the big gear, but that they contribute actively, creatively with their various skills and abilities. In his
- Blog Post INNOQcon Remote Edition 2020 Virtual conferences – why go Martina Meng
- Blog Post Scraping a Docker Swarm service with Prometheus Scraping a Docker swarm service from a Prometheus server that is outside the swarm is not as easy as it might look at a first glance. You have to fetch the metrics of all running service instances, but how to identify and access them? Torsten
- Blog Post Cross-platform testing of TypeScript code with Jasmine and Karma I like TypeScript. Writing code that already underwent basic checks (i.e. typechecking) before it can even touch an execution engine is a big win in my book. In particular, TypeScript is nice because it integrates well into t
- Blog Post Using Javascript plugins in Go More than the sum of its parts Philipp Haußleiter
- Blog Post Effectively Working from Home For two years, we have been exclusively working from home. In this article, we provide tips on how to become productive working from home through appropriate hardware, software, methods, and communication techniques. And, we show how to stay motivated in the l
- Blog Post Remote work Last week we switched INNOQ to 100% remote work. The reason for this radical (or radical-looking) step was the spread of the novel Corona virus SARS-CoV-2, which needs to be contained. In concrete terms, this means that all our consultants will temporarily work exclusively in t
- Blog Post Requirements Engineering Requirements the basis of efficient software development Martin Weck
- Blog Post About unit and integration tests The terms unit test and integration test are typically used as something different, or even opposite. In this blog post I explain why this is misleading and how I prefer to talk about isolation vs. integration instead. Torsten Mandry
- Blog Post Kubernetes Probes Kubernetes probes are for validating container health and readiness. But how should these probes be used? Do we need both? Can we share endpoints? This post tries to give some recommendations. Christopher Schmidt
- Blog Post Command & Control, SAFe, Domain-driven Design, and Release Trains Large complex projects are difficult to manage. Software release trains are one solution to coordinate such projects. But the approach is not a great fit for self-organization and modern management ideas. Eberhard Wolff
- Blog Post Identification of quality requirements with Quality Storming Collaborative modeling for a cross-skill collection and prioritization of quality requirements Michael Plöd
- Blog Post Don’t tell me I’m not building a web application How do we decide what technology stack that we want to use for any given project? Is it really based on how perfectly well suited the technology is to the problem at hand or do we really just want to use the technologies that we like and are
- Blog Post So you want to compose some functions Let’s say you have a list of functions and you want to compose them. Should be trivial, right? Of course it is, but maybe there’s an elegant way. Dr. Lars Hupel
- Blog Post An Introduction to TypeScript for Backend Development (and Java Developers) Christoph Burnicki
- Blog Post Traefik v2 and Mastodon, a wonderful couple! Traefik and Mastodon are a wonderful combination. However, practical guides for Traefik v2 are rare and Mastodon dropped its guide for deployment using docker. In this blog post I will show an easy solution for setting up a Mastodon instance beh
- Blog Post JavaScript? Yes, but in moderation The benefits of classic architecture decisions for web applications. Lucas Dohmen Stefan Tilkov Joy Heron
- Blog Post Cloud Computing and Carbon Footprint How vendor lock-in can harm a company’s green business plan Christoph Burnicki
- Blog Post What Could Possibly Go Wrong What could possibly go wrong if you put Clojure 1.10 and Scala 2.13 on the same classpath? We’re about to find out. Jan Stępień
- Blog Post code-your-model Some time ago I was looking for some simple, lightweight tool to document a complex, modularized model. I was not able to find anything that fits my requirements or expectations, so I came up with my own idea. Today, a good 15 months later, I want to introduce it to you. To
- Blog Post Automating GitHub Pages Deployments with GitHub Actions Frederik Dohr
2019 25
- Blog Post Animating SVG Icon Transitions This describes options for morphing one SVG icon into another using both SMIL or CSS transforms. Frederik Dohr
- Blog Post Choose Your Docker Base Image Wisely A while ago, I ran into a problem with my application that only occurred in production but not locally. The reason we use Docker both locally and in production is to prevent exactly that from happening. What went wrong? Lucas Dohmen
- Blog Post Type checking JSX: A can of props Dr. Lars Hupel
- Blog Post The many ways of testing Smart Contracts in Ethereum You have implemented a smart contract for Ethereum, and now you are wondering how you can test it under real-life conditions, but without spending money in case there’s a problem? Luckily, there are test networks that can help you with t
- Blog Post (De-)Serializing JavaScript Models with Metaprogramming DIY abstraction for serializing and deserializing JavaScript model instances Frederik Dohr
- Blog Post Familiarity - friend or foe Jacek Bilski
- Blog Post The Perversion of Agile Metaphors Agility is at its core a set of values. Do the typical agile metaphors actually fit the values or do they rather lead to misunderstandings? Eberhard Wolff
- Blog Post How to add Swift functions as polyfills in JavaScriptCore Reusing existing JavaScript implementations of your web app for your iOS app can be a good choice for some complex calculations. Unfortunately anything that is not part of the pure JavaScript language won’t be available. Learn in th
- Blog Post The NUMMI Factory — A Parable About Software Development What We Can Learn from other Industries Eberhard Wolff
- Blog Post Integrating Logback with JLine Logback is a popular logging library for Java. JLine can be used to create nice shell-like applications. Combining both is not as hard as it looks. Dr. Lars Hupel
- Blog Post No Silver Bullets - Except Continuous Delivery? There are no silver bullets. But continuous delivery promises so many advantages that it could be such a silver bullet. So what is true: Do silver bullets actually exist or is continuous delivery overrated? Eberhard Wolff
- Blog Post Verification of smart contracts Dr. Lars Hupel
- Blog Post React App from Scratch This blog post shows how to setup a React App from scratch with express and React Router. Martin Weck
- Blog Post Prometheus Counters and how to deal with them In this article, I want you to join me on my way to understand how Counters in Prometheus work, and how to query them to get the right information. Torsten Mandry
- Blog Post When you have reached Acme Notes on working with a minimalistic text editor/programming environment. Martin Kühl
- Blog Post Faking Surrogate Cache-Keys for Nginx Plus Falk Hoppe
- Blog Post Structured Logging with Structured Arguments How to make better log statements with Structured Arguments Jochen Christ
- Blog Post Aeternity Smart Contract Deployment The Forgae framework offers developments tools to easily test and deploy Aeternity smart contracts, and start a local environment on the developer’s workstation. Alexey Novakov
- Blog Post Aeternity Smart Contract Development Alexey Novakov
- Blog Post Remote Mob Programming Remote Mob Programming is an exciting working model for software developers who enjoy working in their home office as well as in a team. Sonja Schalmey
- Blog Post Ethereum Contracts with Truffle Framework There are many ways of development for new Smart contracts for Ethereum. Truffle Suite is one of them. It gives the developer the power to focus more on business logic than on operations. Alexey Novakov
- Blog Post Functional Service in Scala Alexey Novakov
- Blog Post Cooking with Onions: Inward-Pointing Arrows The onion architecture is an established approach to structuring applications. Jan Stępień
- Blog Post Report Generator in Rust In this blog post, we are going to build a backend application in Rust for converting HTML report into PDF format. Rust is a system programming language which focuses on performance, stability and memory safety. There are thousands of Rust libraries built by its co
- Blog Post Domain Events vs. Event Sourcing Why domain events and event sourcing should not be mixed up Christian Stettler
2018 32
- Blog Post Boring Innovation? Hermann Schmidt
- Blog Post Handling German Text with torchtext There is a growing list of tools that are ready to be used with non-English texts. We show common ways to integrate them in torchtext and use their language-specific options. Michael Krämer
- Blog Post Declarative Data Transformations This describes a declarative approach to validating and transforming inconsistently structured data. Frederik Dohr
- Blog Post Testing is storytelling Jacek Bilski
- Blog Post Continuous Integration Contradicts Features Branches! Features branches are a popular approach to separating the development of different features - but unfortunately this contradicts continuous integration’s goal of continuously integrating all changes. So what to do? Eberhard Wolff
- Blog Post Building a Load Test with Tsung for a Login and Post Session with dynamic url-encoded variables If you want to test your website, app or API endpoint by simulating how it will perform when hundreds or more users visit it, you are probably writing a load test. This blogpost covers a step-by
- Blog Post Do We Worship Complexity? Why Sometimes We Don’t Avoid Complexity. Eberhard Wolff
- Blog Post The Problem With Agility Over twenty years ago, iterative-incremental development processes were already used. They are a forerunner of agile processes that have been around for more than fifteen years. Although agility has existed for quite some time, agile transformation is still an issu
- Blog Post No-Principles Software Architecture The traditional principles of software architecture often lead to problems. Understanding these challenges is the first step towards eliminating them or even avoiding them right from the start. Eberhard Wolff
- Blog Post Code Redundancy or Reuse? Why We Must Not Focus Just on Reuse Eberhard Wolff
- Blog Post Server-sent events in .NET with Akka Server-sent events are an often undervalued technology when sending events is needed. For many languages, there are ready-to-use libraries available. There was practically no library in .NET that supports ASP.NET Core. Stefan Lauer
- Blog Post Blockchain Mining: Embarrassingly Parallel? In this blog post, we are going to look at three different approaches at mining new blocks in a blockchain using Rust, all of them using multiple threads, and we’re going to compare their runtime performances with each other and with that of the
- Blog Post Blockchain Mining with Rust Daniel Westheide
- Blog Post Understanding decomposed I think we can all agree that having our codebases more readable and understandable would make our lives much easier. In this post, I’m trying to point out at least a few ideas that influence understanding. Jacek Bilski
- Blog Post Technical Debt Just Happens “Technical debt” is a great metaphor to reason about the quality of a software project. But a closer look also reveals some problems and shows approaches how to deal with software quality even better. Eberhard Wolff
- Blog Post Microservices? Or Rather Monoliths? Microservices are a hype. Now, critics suggest to return to monoliths. But does that really help? Eberhard Wolff
- Blog Post A Playground for Testing OpenID Connect Solving problems we wish we didn’t have Joy Heron
- Blog Post Native Clojure with GraalVM The newly-released GraalVM changes the status quo in the realm of JVM-based programming languages. In this instalment we’ll explore its impact on Clojure. We’ll start small, but by the end we’ll compile an entire Ring web application into a self-contained native
- Blog Post Spring-less testing Spring is a great project, it helps a lot with common, usually mundane, tasks. But it’s not always unicorns and rainbows. Too much Spring in tests can cause a few issues like long execution time and fragility. Here, I’m showing how to avoid such pitfalls. Jacek Bilski
- Blog Post Secure Kubernetes Cluster Why, even with Docker and Kubernetes, there is still work to be done on security issues Christopher Schmidt
- Blog Post dprox – Declarative Reverse Proxy Reverse proxies don’t have to be a pain when it comes to local development. Frederik Dohr
- Blog Post Taking Screenshots of DOM Elements Now that PhantomJS is dead, we need an alternative. Turns out that Puppeteer, Google’s official remote-control API for Chrome, is just the ticket. Robert Glaser
- Blog Post Mundane Bash Tips Frederik Dohr
- Blog Post Have YOU been pwned? With the V2 release of the “pwned passwords” database came a new feature called range search, which allows to securely check passwords with only minor efforts. Here’s how to use it. Michael Krämer
- Blog Post Enforce strong passwords! Frequent leaks of large user databases highlight how important it is to enforce strong passwords. Let’s discuss what makes a strong password and why it is a good idea to additionally check it against a dictionary. Simon Kölsch
- Blog Post It All Looks the Same to Me Fast Search Through Metric Spaces with Rust and BK Trees Jan Stępień
- Blog Post The language of maths is not the language of your business Abstractions from category theory can be powerful. But there are reasons why you may want to keep your domain model free of them. Daniel Westheide
- Blog Post Formatting with first-class types Programming with stringly-typed APIs is like walking a tightrope; it’s good to have some support in case something goes wrong. Languages with first-class types offer us impressive tooling to guarantee correctness of our code. In this post, we’ll see how Id
- Blog Post That looks oddly familiar In which Rust and perceptual hashing come together. Jan Stępień
- Blog Post Carbon dioxide monitoring with Rust, InfluxDB and Grafana Carbon dioxide monitoring with Rust, InfluxDB and Grafana. Kofi Jedamzik
- Blog Post Media Art Opens Up New Perspectives The more technological developments progress, the more we use digital innovations to shape our lives. Codes and algorithms play a decisive role in determining how we use and perceive information. Media artists do not remain untouched by this phenomenon.
- Blog Post Supporting understanding with simplicity Jacek Bilski
2017 10
- Blog Post What’s in a Name: Evaluate The term evaluation is often used in the context of system and architecture reviews. In my opinion, this term is often misleading and such activities should be named differently. Dr. Gernot Starke
- Blog Post Elm in the wild: A Sandwich Delivery Game New languages often look shiny and cool in their playground examples. But bringing them out into the wild and having to code more than just the examples in the tutorials, often reveals the true value of these new languages. So, in order to evaluate
- Blog Post ROCA-Compliant Table Sorting Philipp Neugebauer
- Blog Post Remain resilient, fail fast Keep your systems resilient to broken connections and unreliable networks. Unless it’s start-up time. Jan Stępień
- Blog Post Marrying Rails, Turbolinks and JavaScript Custom Elements Rails 5.1 just arrived and brought with it a curated setup for webpack. Think what you want about webpack, but it’s the new default for JavaScript module loading and bundling in Rails and therefore here to stay. So here’s a quick po
- Blog Post Rendering Self-Contained Custom Elements Frederik Dohr
- Blog Post Building Component-Based Front Ends with Rails Our latest Ruby on Rails front-end project strongly emphasizes a component-based approach. In this post, we briefly explain how a tiny helper not only helped us render UI components, but also resulted in better components thanks to well-define
- Blog Post How Browsers Load and Process JavaScript This is a rundown of how browsers process JavaScript references within HTML. Frederik Dohr
- Blog Post The Power of the HTML Form The HTML form is a powerful tool for telling a server what you want to do. But does everybody know how it works? With the multifarious JavaScript frameworks currently available today, software developers in the industry today often do not know how to create a web
- Blog Post Simplicity - Fighting Complexity At All Costs Joy Heron
2016 17
- Blog Post FP vs. OO I recently came across a tweet stating that there were no people who “defend OO vs. FP” that actually used FP in real projects. This is not the first time I came across statements like this (like in a blog posts portraying functional programmers as being higher on the “evolutiona
- Blog Post Progressive Web Components This is a write-up of the “Progressive Web Components” presentation at GOTO Berlin. Frederik Dohr
- Blog Post Self-contained Systems: A Different Approach to Microservices Eberhard Wolff
- Blog Post Command Line Tools in Swift: Words Let’s write a simple command line utility in Swift. Martin Kühl
- Blog Post The perils of shared code In this blog article, I want to examine why using a sharing code between microservices may sound attractive in the first place and why it can cause bigger problems than the ones you try to solve. Daniel Westheide
- Blog Post What’s in a Name: Architecture Dr. Gernot Starke
- Blog Post ROCA vs. SPA Currently, a lot of companies are migrating from Desktop applications (mostly written in Java) to Web applications for their products as well as for their internal tooling. When they start with this process they often ask themselves: Which technologies should we use to build o
- Blog Post Error Handling in Go Two commonly perceived problems of the programming language Go are that handling errors is verbose and repetitive parametric polymorphism is not available This post is about the intersection of those problems and Rob Pike’s recommendation on the former. Martin Kühl
- Blog Post Solving the wrong problems Daniel Westheide
- Blog Post What’s in a Name: Transparency The term transparent denotes something translucent, where light can shine through. It is, for example, used in context of economics (transparent markets), meaning markets where much is known by many, and nothing is hidden. Sometimes geeks tend to inverse this
- Blog Post Transclusion in self-contained systems Frontend integration in the web is a huge topic. This post deals with the aspect of transclusion of other systems' content in the DOM of a web page. Till Schulte-Coerne
- Blog Post Triple Booting a Mac Michael Neuweiler
- Blog Post Why RESTful communication between microservices can be perfectly fine Recent debates about REST versus message passing in microservice communication have led to some confusion. What is meant with asynchronous communication in this context and why is REST a perfectly valid choice? Daniel We
- Blog Post Horizontal automation – a waste of time. Automation of server administration tasks is a waste of time. Andreas Krüger
- Blog Post Web Scraping Martin Weck
- Blog Post git pull gotchas The ever-so-convenient git pull isn’t really all that convenient all that often. This piece explains why not, and what to do instead. Andreas Krüger
- Blog Post iOS: Writing to Core Data in your Today extension This blog post gives guidance on how to propagate changes in Core Data made by a Today extension to the host app and handle them properly. Carmen Burmeister
2015 12
- Blog Post Auto Layout in iOS: How to avoid the common mistake Carmen Burmeister
- Blog Post Play 2.4 with Guice and MyBatis The Play Framework is getting more popular and Version 2.4 finally includes Dependency Injection as the default mechanism to access central resources instead of singletons. This blog post explores what is necessary to combine MyBatis with Play using its defa
- Blog Post What’s in a Name: Consistency The term consistency has several different meanings. This post identifies and clarifies those - especially consistency as synonym for conceptual integrity, one of the most important features for long-lasting software systems. Dr. Gernot Starke
- Blog Post Reliable Web Clients Tobias Neef
- Blog Post Declarative HTTP API Testing with gabbi While HTTP APIs are ubiquitous these days, testing and documenting such APIs remains somewhat awkward: Tests usually consist of procedural code that is specific to the respective language or even framework - which is neither very expressive nor easy
- Blog Post A day full of Clojure - organizing the first German ClojureBridge workshop During the last years a lot of initiatives focusing on increasing diversity in IT and getting kids into IT have emerged. Last weekend the first German ClojureBridge workshop took place in Solingen. Another small but
- Blog Post Per request debugging with Log4j 2 filters Customers quite regularly call on me to support them when an application is not behaving as expected. On a development machine there are a lot of ways and utilities to analyse the situation. But troubleshooting the erroneous application behaviour
- Blog Post What’s in a Name: Reactive Dr. Gernot Starke
- Blog Post Using Vector Assets on iOS Vector graphics provide numerous advantages, especially when developing for mobile devices in a constantly expanding array of different screen sizes and pixel ratios. How to get them to work in an iOS app? Robert Glaser
- Blog Post Functional Validation in Scala Validation is something everybody needs eventually when working with domain models. The Scala ecosystems offers a wide rage of tools which can be used for this purpose. This blog post introduces some of the most common approaches by applying them to a domain
- Blog Post Why You Should Avoid a Canonical Data Model Stefan Tilkov
- Blog Post Docker images for developers Docker seems to be all the rage lately. There are docker talks at every conference, hosting Docker containers has become a hosting option with most if not all PaaS providers, and there is hardly a technology left that is not supposed to run better and more flex
2014 2
- Blog Post Scalable Software Systems Scalability has long been one of the hallmarks of quality IT systems. When we hear this term we usually associate it with an upward scalability of the system. Generally, it seems to be about how much more throughput and load our system can sustain through additona
- Blog Post Hystrix – to make your fuse blow just in time Holger Kraus Arne Landwehr
Undated 16
- Privacy Policy
- Podcasts
- Management
- Contact
- Legal Notice
- Architecture Strategy
- Software Architecture and Development
- Data & AI
- IT Security
- Legacy Modernization
- Software Reviews
- Digital Platforms and Infrastructures
- Knowledge Transfer, Coaching and Trainings
- Digital Product Development
- Knowledge transfer, coaching, and trainings
- Get to know more