Entwicklung & Code
Die Produktwerker: Anwendungsnahe Weiterbildung für Product Owner
Die Weiterbildung als Product Owner ist mehr als das nächste Zertifikat im Lebenslauf. In dieser Podcastfolge sprechen Tim Klein und Sohrab Salimi darüber, was gute Weiterbildung heute ausmacht – und warum viele Angebote an der Realität der Produktarbeit vorbeigehen. Sohrab Salimi bringt dabei nicht nur seine langjährige Erfahrung als Trainer mit, sondern auch den Mut zur Veränderung: Nach zehn Jahren als zertifizierter Trainer bei der Scrum Alliance hat er sich entschieden, neue Wege zu gehen. Mit der Agile Academy hat er ein offenes Weiterbildungsmodell mitentwickelt, das praxisnäher, systemischer und flexibler ist als vieles, was es bisher gab.
Im Gespräch geht es um den Unterschied zwischen theoretischem und anwendungsnahem bzw. erfahrungsbasiertem Lernen. Viele Product Owner haben ein Foundation-Training besucht – ob als CSPO, PSPO 1 oder Ähnliches. Doch was kommt danach? Genau da setzt anwendungsnahe Weiterbildung an: Lernen durch echte Beispiele, durch Austausch mit anderen Praktikerinnen und Praktikern sowie durch das Reflektieren eigener Herausforderungen. Sohrab Salimi schildert, wie wichtig es ist, dass Trainerinnen und Trainer nicht nur Inhalte vermitteln, sondern auch Erfahrungen aus der eigenen Produktpraxis teilen. Wer selbst Produktverantwortung erlebt hat, stellt andere Fragen – und gibt Antworten, die in der Realität Bestand haben.
Weiterbildung für Product Owner: Die Produktwerker als Agile Academy Ambassador
Gemeinsam mit einem Netzwerk aus erfahrenen Coaches, Trainerinnen und Trainern sowie Praktikern entwickelt Sohrab Salimi mit der Agile Academy neue Lernpfade für Product Owner – von den Grundlagen bis hin zum anspruchsvollen Sparring auf Augenhöhe. Tim Klein bringt die Perspektive der Produktwerker ein, die diesen Weg aktiv mitgehen werden – als Teil der Agile Academy, aber auch aus Überzeugung, dass Weiterbildung immer dann wirksam wird, wenn sie anschlussfähig an den Alltag ist. Mit Formaten, die sich an dem orientieren, was Produktmenschen wirklich brauchen: Austausch, Reflexion, Anwendung.
Deswegen haben sich alle drei Produktwerker – Oliver Winter, Dominique Winter und Tim Klein – entschieden, als Botschafter (Agile Academy Amabassador) bei diesem neuen Weiterbildungsnetzwerk mitzuwirken. Oliver Winter wird sogar der Track Owner für den Lernpfad „Product Owner“ und ist damit die zentrale Stelle, die über die Lernziele aller Product-Owner-Trainings der Agile Academy entscheidet. Dominique Winter übernimmt als Track Owner den Lernpfad „Agile UX“. Die Produktwerker werden sich somit prägend und mit viel Gestaltungswillen in dieses neue Weiterbildungskonstrukt einbringen. Teilnehmende können davon ausgehen, dass man die Handschrift der Produktwerker in diesen Tracks erkennen wird. Der Product-Owner-Track dürfte zum Beispiel von einem guten Schwung Produktmanagement-Themen in den Lernzielen profitieren.
Jeder neue Lernpfad (Track) unterscheidet zwischen Verstehen (Understand), Anwenden (Apply) und Vermitteln (Teach). Das eröffnet neue Möglichkeiten – für erfahrene Product Owner, für Neulinge mit echtem Lernwillen und für Organisationen, die Weiterbildung nicht nur als Pflicht, sondern als Chance sehen. Zugleich ist das Modell offen für verschiedene Vorerfahrungen: Wer bisher über Scrum.org oder Scrum Alliance gelernt hat, kann problemlos in die weiterführenden Ausbildungsschritte einsteigen. Und wer sich lieber im eigenen Tempo weiterbildet, findet Self-paced-Kurse. Der deutschsprachige Product Owner Online Course lässt sich über die Agile-Academy-Website buchen.
Weiterführende Links
Die bisherigen Episoden mit Sohrab Salimi:
Wer mit Sohrab Salimi direkt in Kontakt treten möchte, kontaktiert und folgt ihm am besten über sein LinkedIn-Profil. Weiterführende Infos zum neuen Zertifizierungsansatz der Agile Academy gibt es auf deren Website.
Auch Oliver Winter bietet bereits Zertifizierungstrainings an (Level 1 und Level 2, also der weiterführende Lernschritt, wenn Teilnehmende die Foundation wie CSPO oder PSPO schon besitzen).
Die aktuelle Ausgabe des Podcasts steht auch im Blog der Produktwerker bereit: „Anwendungsnahe Weiterbildung – für mehr Erfolg als Product Owner„.
(Bild: deagreez/123rf.com)
So geht Produktmanagement: Die Online-Konferenz Product Owner Day von dpunkt.verlag und iX geht in die achte Runde. Am 13. November 2025 können Product Owner, Produktmanagerinnen und Service Request Manager dort ihren Methodenkoffer erweitern, sich vernetzen und von den Good Practices anderer Unternehmen inspirieren lassen.
Vergünstigte Blind-Bird-Tickets sind bis zur Programmveröffentlichung erhältlich. In der Rückschau finden Interessierte das Programm des Vorjahres.
(mai)
Entwicklung & Code
Projektmanagement: Darf das Product Backlog sichtbar sein?
Moin.
(Bild: Stefan Mintert )
Stefan Mintert arbeitet mit seinen Kunden daran, die Unternehmenskultur in der Softwareentwicklung zu verbessern. Das derzeit größte Potenzial sieht er in der Leadership; unabhängig von einer Hierarchieebene.
Die Aufgabe, dieses Potenzial zu heben, hat er sich nach einem beruflichen Weg mit einigen Kurswechseln gegeben. Ursprünglich aus der Informatik kommend, mit mehreren Jahren Consulting-Erfahrung, hatte er zunächst eine eigene Softwareentwicklungsfirma gegründet. Dabei stellte er fest, dass Führung gelernt sein will und gute Vorbilder selten sind.
Es zeichnete sich ab, dass der größte Unterstützungsbedarf bei seinen Kunden in der Softwareentwicklung nicht im Produzieren von Code liegt, sondern in der Führung. So war es für ihn klar, wohin die Reise mit seiner Firma Kutura geht: Führung verbessern, damit die Menschen, die die Produkte entwickeln, sich selbst entwickeln und wachsen können.
Für Heise schreibt Stefan als langjähriger, freier Mitarbeiter der iX seit 1994.
Neulich haben wir in unserem eigenen Team darüber gesprochen, ob das Product Backlog innerhalb einer Firma öffentlich sichtbar sein darf. Da wir als externe Berater, POs und Coaches mit verschiedenen Kundenteams zu tun haben, hat jeder von uns andere Erfahrungen gemacht. Deshalb war es gar nicht so einfach, eine gemeinsame Antwort zu finden.
Nach dem Gespräch habe ich folgende Sichtweise: Es sollte das Ziel sein, dass das Product Backlog und damit die Arbeitspakete des/der Entwicklerteams für jede Person im Unternehmen einsehbar sein sollen. Vorbehalte gegen diese Transparenz können sein:
- ein unbestimmtes Gefühl des Teams, sich nicht in die Karten schauen zu lassen,
- die Sorge, sich angreifbar zu machen,
- die Angst vor häufigen Eingriffen in den Arbeitsablauf.
Alle drei Punkte rechtfertigen aus meiner Sicht, das Backlog vertraulich zu behandeln. Allerdings ist mit jedem einzelnen Punkt auch eine Erkenntnis verbunden: Hier muss sich etwas ändern.
Wenn sich Teams dadurch angreifbar machen, dass jemand sehen kann, woran sie arbeiten, stimmt etwas nicht. Vielleicht hat die Person die Priorisierung oder die Roadmap nicht verstanden. Das kann man hinterfragen und klären.
Vielleicht wird aber auch die Rolle des Product Owners, der das Backlog maßgeblich verantwortet, nicht ausreichend respektiert.
Egal, was zu den Vorbehalten gegen die Transparenz anzuführen ist: Die Ursachen müssen erkannt und ausgeräumt werden.
Hat man das geschafft, dann darf das Product Backlog sichtbar sein. Ob es überhaupt sinnvoll ist, den Stakeholdern jedes kleine Bugticket und jede technische Aufgabe zu zeigen, ist eine andere Frage. Eine Darstellung des Entwicklungsfortschritts über Meilensteine, Epics oder (echte) User Stories dürfte in der Regel besser und ausreichend sein.
Erst lesen, dann hören
Im Podcast Escape the Feature Factory greife ich ausgewählte Themen des Blogs auf und diskutiere sie mit einem Gast. Durch den Austausch lerne ich eine zweite Perspektive kennen. Wenn Du auch daran interessiert bist, findest Du den Podcast bei Spotify, Deezer, Amazon Music und Apple Podcasts. Wenn Du die Themen, die ich im Blog anspreche, in Deiner Firma verbessern möchtest, komm’ in unsere Leadership-Community für Softwareentwicklung.
(rme)
Entwicklung & Code
Neu in .NET 9.0 [26]: Die Persistierung dynamischer Assemblies kehrt zurück
Im modernen .NET konnten zur Laufzeit erzeugte Assemblies bisher nur im RAM gehalten werden. Mit .NET 9.0 ist es nun auch wieder wie im klassischen .NET Framework möglich, zur Laufzeit erzeugte Assemblies im Dateisystem zu persistieren.
Dr. Holger Schwichtenberg ist technischer Leiter des Expertennetzwerks www.IT-Visions.de, das mit 53 renommierten Experten zahlreiche mittlere und große Unternehmen durch Beratungen und Schulungen sowie bei der Softwareentwicklung unterstützt. Durch seine Auftritte auf zahlreichen nationalen und internationalen Fachkonferenzen sowie mehr als 90 Fachbücher und mehr als 1500 Fachartikel gehört Holger Schwichtenberg zu den bekanntesten Experten für .NET und Webtechniken in Deutschland.
In .NET 9.0 Preview 1 hatte Microsoft die aus dem klassischen .NET Framework bekannte Möglichkeit wieder eingeführt, dynamisch zur Laufzeit erstellte Assemblies im Dateisystem oder einem beliebigen Stream zu persistieren.
In Preview 3 änderte Microsoft die API aber erneut: Anstelle der zuvor verwendeten Klasse AssemblyBuilder
AssemblyBuilder ab = AssemblyBuilder.DefinePersistedAssembly(new AssemblyName("Math"), typeof(object).Assembly);
nutzt man nun die neue Klasse PersistedAssemblyBuilder
:
PersistedAssemblyBuilder ab = new PersistedAssemblyBuilder(new AssemblyName("Math"), typeof(object).Assembly);
Folgender Code zeigt den Einsatz der neuen Klasse. Weitere Beispiele zur Anpassung der Metadaten wie dem Einstiegspunkt finden sich in den Release Notes.
using System.Reflection;
using System.Reflection.Emit;
using System.Reflection.Metadata;
using System.Reflection.Metadata.Ecma335;
using System.Reflection.PortableExecutable;
using ITVisions;
using Microsoft.NET.HostModel.AppHost;
namespace NET9_Console.FCL90;
internal class FCL9_Reflection
{
///
/// Im modernen .NET konnten zur Laufzeit erzeugte Assemblies
/// bisher nur im RAM gehalten werden. Mit .NET 9.0 ist es mit
/// PersistedAssemblyBuilder nun auch wieder möglich, zur Laufzeit
/// erzeugte Assemblies im Dateisystem zu persistieren.
/// siehe auch
///
public void CreateAndSaveAssembly()
{
// TODO: Bei RTM-Version anpassen!
var currentVersion = "9.0.0";
CUI.Demo(nameof(CreateAndSaveAssembly));
string AssemblyName = "App42";
string AssemblyNameWithExtension = AssemblyName + ".exe";
CUI.H2($"\nErzeuge {AssemblyNameWithExtension}");
string referencePath = @$"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Ref\{currentVersion}\ref\net9.0";
PathAssemblyResolver resolver = new(Directory.GetFiles(referencePath, "*.dll"));
using MetadataLoadContext context = new(resolver);
Assembly coreAssembly = context.CoreAssembly!;
Type voidType = coreAssembly.GetType(typeof(void).FullName!)!;
Type objectType = coreAssembly.GetType(typeof(object).FullName!)!;
Type stringType = coreAssembly.GetType(typeof(string).FullName!)!;
Type int32Type = coreAssembly.GetType(typeof(Int32).FullName!)!;
Type stringArrayType = coreAssembly.GetType(typeof(string[]).FullName!)!;
Type consoleType = coreAssembly.GetType(typeof(Console).FullName!)!;
// --> NEU in .NET 9.0: PersistedAssemblyBuilder
//
PersistedAssemblyBuilder assemblyBuilder = new(new AssemblyName(AssemblyName), coreAssembly);
TypeBuilder typeBuilder = assemblyBuilder.DefineDynamicModule(AssemblyName).DefineType(AssemblyName, TypeAttributes.Public | TypeAttributes.Class, objectType);
#region Methode Sum() erzeugen
var mb = typeBuilder.DefineMethod("Sum", MethodAttributes.Public | MethodAttributes.Static,
int32Type, new Type[] { int32Type, int32Type });
var ilSum = mb.GetILGenerator();
ilSum.Emit(OpCodes.Ldarg_0);
ilSum.Emit(OpCodes.Ldarg_1);
ilSum.Emit(OpCodes.Add);
ilSum.Emit(OpCodes.Ret);
CUI.Cyan($"Sum() wurde erzeugt");
#endregion
#region Methode Main() erzeugen
MethodBuilder methodBuilder = typeBuilder.DefineMethod("Main", MethodAttributes.Public | MethodAttributes.Static, voidType, [stringArrayType]);
ILGenerator ilMain = methodBuilder.GetILGenerator();
// Aufruf von Console.WriteLine("Die Antwort auf Ihre Frage ist:")
ilMain.Emit(OpCodes.Ldstr, "Die Antwort auf Ihre Frage ist:");
ilMain.Emit(OpCodes.Call, consoleType.GetMethod("WriteLine", [stringType])!);
// Aufruf von Console.WriteLine(Sum(40,2))
ilMain.Emit(OpCodes.Ldc_I4, 40); // Load the constant 40
ilMain.Emit(OpCodes.Ldc_I4, 2); // Load the constant 2
ilMain.Emit(OpCodes.Call, mb);
var writeLineMethod = consoleType.GetMethod("WriteLine", [int32Type]);
ilMain.Emit(OpCodes.Call, writeLineMethod);
ilMain.Emit(OpCodes.Ret);
CUI.Cyan($"Main() wurde erzeugt");
#endregion
#region Metadaten und PE-Header erzeugen
typeBuilder.CreateType();
MetadataBuilder metadataBuilder = assemblyBuilder.GenerateMetadata(out BlobBuilder ilStream, out BlobBuilder fieldData);
PEHeaderBuilder peHeaderBuilder = new(imageCharacteristics: Characteristics.ExecutableImage);
ManagedPEBuilder peBuilder = new(
header: peHeaderBuilder,
metadataRootBuilder: new MetadataRootBuilder(metadataBuilder),
ilStream: ilStream,
mappedFieldData: fieldData,
entryPoint: MetadataTokens.MethodDefinitionHandle(methodBuilder.MetadataToken));
CUI.Cyan($"Metadaten und PE-Header wurden erzeugt");
#endregion
#region Speichern der DLL
BlobBuilder peBlob = new();
peBuilder.Serialize(peBlob);
using (FileStream fileStream = new($"{AssemblyName}.dll", FileMode.Create, FileAccess.Write))
{
peBlob.WriteContentTo(fileStream);
}
CUI.Cyan($"{AssemblyName}.dll wurde gespeichert");
#endregion
#region AppHost und runtimeconfig erzeugen
HostWriter.CreateAppHost(
@$"C:\Program Files\dotnet\packs\Microsoft.NETCore.App.Host.win-x64\{currentVersion}\runtimes\win-x64\native\apphost.exe",
$"{AssemblyName}.exe",
$"{AssemblyName}.dll");
CUI.Cyan($"{AssemblyName}.exe wurde gespeichert");
File.WriteAllText($"{AssemblyName}.runtimeconfig.json",
$$"""
{"runtimeOptions": {
"tfm": "net9.0",
"framework": {
"name": "Microsoft.NETCore.App",
"version": "{{currentVersion}}"
}
}
}
""");
CUI.Cyan($"{AssemblyName}.runtimeconfig.json wurde gespeichert");
#endregion
CUI.Success("OK");
#region Testen
CUI.H2($"\nStarte {AssemblyName}.exe");
System.Diagnostics.Process.Start($"{AssemblyName}.exe");
#endregion
}
}
Der Code gibt die einzelnen Schritte beim Erzeugen und Persistieren der Assembly aus.
(Bild: Screenshot (Holger Schwichtenberg))
(Bild: coffeemill/123rf.com)
Das nächste LTS-Release steht an: Auf der Online-Konferenz betterCode() .NET 10.0 am 18. November 2025 – ausgerichtet von iX und dpunkt.verlag in Kooperation mit IT-visions.de – präsentieren der Autor dieses Artikels, Dr. Holger Schwichtenberg, und weitere Experten die wichtigsten Neuerungen. Dazu zählen die Updates im .NET 10.0 SDK sowie in C# 14.0, ASP.NET Core 10.0, Blazor 10.0, Windows Forms 10.0, WPF 10.0, WinUI 3, .NET MAUI 10.0 und die Integration von Künstlicher Intelligenz in .NET-Anwendungen.
Das Programm ist noch nicht veröffentlicht – bis dahin sind vergünstigte Blind-Bird-Tickets bereits im Online-Shop erhältlich. Das Vorjahresprogramm lässt sich im Archiv einsehen.
(rme)
Entwicklung & Code
Testing Unleashed: KI-Agenten und die Zukunft des Testens
In dieser Episode seines englischsprachigen Podcasts „Testing Unleashed“ spricht Richard Seidl mit Szilárd Széll über die Herausforderungen und Chancen, die mit der Integration von KI-Agenten in Unternehmensprozesse verbunden sind. Szilárd Széll, ein Experte in der Test- und DevOps-Transformation, beleuchtet die Notwendigkeit eines Vertrauensaufbaus in KI-Systeme, insbesondere wenn diese zunehmend zentrale Geschäftsentscheidungen treffen.
Die Diskussion behandelt Fragen, wie die Qualitätssicherung in einer Welt erfolgt, in der KI ständig lernt und sich anpassen kann.
Dieser Podcast betrachtet alles, was auf Softwarequalität einzahlt: von Agilität, KI, Testautomatisierung bis hin zu Architektur- oder Code-Reviews und Prozessoptimierungen. Alles mit dem Ziel, bessere Software zu entwickeln und die Teams zu stärken. Frei nach dem Podcast-Motto: Better Teams. Better Software. Better World.
Richard Seidl spricht dabei mit internationalen Gästen über modernes Software-Engineering und wie Testing und Qualität im Alltag gelebt werden können.
Die aktuelle Ausgabe ist auch auf Richard Seidls Blog verfügbar: „KI-Agenten und die Zukunft des Testens – Szilárd Széll“ und steht auf YouTube bereit.
(mdo)
-
Social Mediavor 2 Wochen
Aktuelle Trends, Studien und Statistiken
-
Social Mediavor 1 Woche
LinkedIn Feature-Update 2025: Aktuelle Neuigkeiten
-
Online Marketing & SEOvor 2 Wochen
Aus Marketing, Medien, Agenturen & Tech: Diese 40 klugen Köpfe unter 40 müssen Sie kennen
-
UX/UI & Webdesignvor 1 Woche
Wie gelingt eine einwandfreie Zusammenarbeit?
-
UX/UI & Webdesignvor 2 Wochen
Kunst & KI begleitet die Münchner Standort-Eröffnung › PAGE online
-
Online Marketing & SEOvor 2 Wochen
Influencer Marketing: Warum Influencer Vertrauen verlieren und klassische Medien gewinnen
-
Künstliche Intelligenzvor 2 Wochen
Amazon soll Werbung bei Prime Video verdoppelt haben
-
Social Mediavor 2 Wochen
“Wir haben doch nichts zu erzählen…” – 3 Tricks für neue Social Media Content Ideen