Connect with us

Entwicklung & Code

Interview zur „SaaSpocalypse“: Das Zeitalter der Wegwerfsoftware naht


Die Diskussion um eine mögliche „SaaSpocalypse“ treibt die Softwarebranche seit Monaten um. Der Begriff bringt die Sorge auf den Punkt: dass generative KI und vor allem autonome KI-Agenten das klassische Geschäftsmodell von Software-as-a-Service infrage stellen. Wir sprachen mit dem Tech-Analysten Philipp Klöckner darüber, wohin die Entwicklung geht.

Weiterlesen nach der Anzeige

iX: Derzeit wird viel über die SaaSpocalypse gesprochen, selbst große Anbieter wie Salesforce oder SAP stehen an der Börse unter Druck. Ist das eine Überreaktion oder ein fundamentaler Wandel des Softwaremarkts?


Ein Foto des Tech-Analysten Philipp Klöckner

Ein Foto des Tech-Analysten Philipp Klöckner

Philipp Klöckner arbeitet seit mehr als zwanzig Jahren im Berliner Tech-Ökosystem und ist einer der bekanntesten Start-up-Investoren Deutschlands. Der Tech-Analyst teilt seine Erfahrung im Doppelgänger-Podcast und als Keynote-Speaker in seiner Vortragsreihe „Beyond the AI Hype“.

(Bild: Hubert Boesl)

Philipp Klöckner: Beides. In einigen Bereichen ist die Reaktion übertrieben, in anderen Fällen sollten Unternehmen tatsächlich vorsichtig sein. Besonders unter Druck geraten Firmen mit klassischen „Per-Seat“-Modellen – also Anbieter, die pro Mitarbeiter abrechnen. Dazu zählen typische Kollaborations- und Projektmanagementtools wie Asana, Monday.com oder Teile der Atlassian-Suite wie Jira.

Der Hintergrund ist weniger, dass KI bereits massiv Jobs ersetzt, sondern dass viele Unternehmen das Overhiring der Coronazeit korrigieren und ihre Organisationen verschlanken. Weniger Mitarbeiter bedeuten automatisch geringeres Wachstum für solche SaaS-Modelle. Zudem lässt sich ein einfaches Kollaborationstool mit Nutzerverwaltung heute relativ schnell KI-gestützt entwickeln. Dadurch steigt der Wettbewerbsdruck erheblich.

Gleichzeitig halte ich manche Marktreaktionen für überzogen. Wenn etwa Anthropic ein neues Feature ankündigt und daraufhin Cybersecurity- oder Observability-Aktien zweistellig fallen, verwechselt das die Realität des Unternehmenseinkaufs mit Tech-Euphorie. Unternehmen wechseln ihre Kernsoftware nicht kurzfristig. Vertrauen, langfristige Verträge und hohe Lock-in-Effekte spielen eine enorme Rolle.

Was allerdings schwieriger wird: Neukundengewinnung. Start-ups, die heute beginnen, werden sich häufiger fragen, ob sie klassische SaaS-Produkte überhaupt noch kaufen oder bestimmte Lösungen selbst bauen. KI senkt die Einstiegshürden erheblich. Trotzdem sollte man die Wirtschaftlichkeit bestehender Software nicht unterschätzen. SaaS-Unternehmen arbeiten oft mit Rohmargen von 80 bis 90 Prozent. Wer Software selbst entwickelt, muss inklusive Wartung, Sicherheit und Zuverlässigkeit günstiger sein als eine bestehende Lizenzlösung – und das ist keineswegs trivial. Ich glaube deshalb nicht, dass Fortune-500-Unternehmen ihre ERP- oder CRM-Systeme kurzfristig durch Vibe-Coding-Lösungen ersetzen werden.

Low-Code- und No-Code-Plattformen haben schon früher versprochen, dass jeder Software bauen kann. Was ist diesmal anders?

Der Unterschied liegt vor allem in den Anforderungen an den Nutzer. Bei No-Code brauchte man oft noch relativ fortgeschrittene Produktmanagement- oder Toolkenntnisse. Mit generativer KI reicht heute Sprache als Interface: Wer ein Problem gut beschreiben kann, kommt deutlich schneller zu funktionierender Software.

Weiterlesen nach der Anzeige

Das heißt aber noch nicht automatisch, dass daraus professionelle Produkte entstehen, die man problemlos anderen Unternehmen verkaufen kann. Besonders schwierig bleibt die Integration in bestehende Legacy-Systeme. Die eigentliche Stärke von KI liegt momentan eher darin, neue und vergleichsweise einfache Lösungen „from scratch“ zu entwickeln – insbesondere in Nischenmärkten, für die sich früher kein eigenes Softwareunternehmen gelohnt hätte.

Gehen wir damit in die Richtung hyperindividualisierter Software und hin zu Mikromärkten?

Ja, das halte ich für wahrscheinlich. Vor einigen Jahren tauchte auf der OMR-Messe der Begriff „Disposable Software“ auf – also Wegwerfsoftware. Früher lag der Fokus darauf, möglichst modular und wiederverwendbar zu entwickeln. Künftig könnte Software viel stärker situativ entstehen.

Mit KI kann man für relativ geringe Kosten kleine Anwendungen generieren, testen und später wieder verwerfen oder komplett neu bauen. Dadurch verändert sich auch die Architekturphilosophie: Statt hochgradig modularer Systeme könnten häufiger Monolithen entstehen, die bei Änderungen einfach neu generiert werden. Das könnte bedeuten, dass Software künftig stärker „on demand“ entsteht und weniger langfristig gepflegt wird.



Source link

Entwicklung & Code

Fable 5: Anthropic stoppt verdeckte Eingriffe


Anthropic reagiert auf die Kritik an den Schutzmechanismen seines neuen KI-Modells Fable 5. Das Unternehmen will umstrittene, verborgene Sicherheitsmaßnahmen künftig sichtbar machen und entschuldigt sich ausdrücklich für deren bisherige Umsetzung. Konkret geht es um Schutzmechanismen gegen sogenanntes Distillation – also den Versuch, die Ausgaben eines leistungsfähigen Sprachmodells zum Training konkurrierender KI-Systeme zu nutzen.

Weiterlesen nach der Anzeige

Die Kontroverse entzündete sich an einem Schutzverhalten von Fable 5, bei dem das Modell verdeckt auf Distillation-Anfragen reagierte. Anthropic sah ursprünglich einen unsichtbaren Mechanismus vor, der solche Versuche zur Modellentwicklung im Hintergrund erkennt und die Antworten gezielt verändert oder verschlechtert. Die Nutzer sollten davon nichts mitbekommen. Forscher und Entwickler kritisierten das als intransparent und warnten, dass solche verdeckten Eingriffe auch Tests und wissenschaftliche Untersuchungen des Modells verfälschen.

In einem Beitrag auf X kündigt Anthropic nun eine Kurskorrektur an. Künftig behandelt das Unternehmen erkannte Distillation-Anfragen sichtbar. Statt Antworten heimlich zu verändern, fällt Fable 5 in solchen Fällen auf das ältere Modell Claude Opus 4.8 zurück – genau wie es bereits bei den Schutzmaßnahmen für Cybersecurity und Biologie der Fall ist. Die Nutzer sollen dabei jedes Mal einen entsprechenden Hinweis sehen.

Für API-Kunden will Anthropic zudem den Grund einer Ablehnung explizit zurückgeben. Ein serverseitiger Fallback für API-Anfragen soll in den kommenden Tagen folgen. Damit lässt sich künftig erkennen, ob eine Antwort von Fable 5 oder vom Fallback-Modell stammt.

Das Unternehmen gibt zu, mit dem ursprünglichen Ansatz falsch gelegen zu haben. Sichtbare Schutzmechanismen lassen sich zwar leichter analysieren und gezielt umgehen, weshalb ihre Absicherung mehr Zeit kostet. Unsichtbare Schutzmaßnahmen lassen sich dagegen enger auf bestimmte Szenarien zuschneiden und verursachen weniger Fehlalarme. Aus diesem Grund habe man sich zunächst für den verdeckten Ansatz entschieden, um Fable 5 schnell und sicher bereitzustellen.

Lesen Sie auch

Rückblickend sei das die falsche Entscheidung gewesen, schreibt Anthropic. Die Nutzer sollten nachvollziehen können, welche Schutzmaßnahmen aktiv sind und warum. Dafür entschuldigt sich das Unternehmen ausdrücklich.

Weiterlesen nach der Anzeige

Die Umstellung hat allerdings Nebenwirkungen. Um die Systeme trotzdem vor Jailbreaks abzusichern, müssen die zugrunde liegenden Klassifikatoren zunächst konservativer arbeiten. Das führt vorübergehend zu mehr Fehlklassifikationen.

Solche False Positives entstehen, wenn das Modell harmlose Anfragen fälschlich als riskant einstuft. Genau hier setzt ein Großteil der bisherigen Kritik an.

Die Ankündigung folgt nur wenige Tage auf heftige Kritik von Sicherheitsforschern an Fable 5. Mehrere Experten beklagen, dass die Cybersecurity-Schranken des Modells nicht nur brisante Anfragen erfassen, sondern auch alltägliche Aufgaben aus Softwareentwicklung und IT-Sicherheit. Genannt wurden unter anderem Code Reviews, das Schreiben sicheren Codes, Schwachstellenanalysen, Incident Response oder schlicht das Lesen sicherheitsrelevanter Fachartikel.

Fable 5 ist die öffentlich verfügbare Variante von Anthropics neuem Spitzenmodell Mythos 5. Letzteres bringt keine vorgeschalteten Schutzmechanismen für Cybersecurity, Biologie, Chemie und Distillation mit.

In seiner Stellungnahme verspricht Anthropic auch Änderungen an den Cyber- und Bio-Safeguards. Die entsprechenden Klassifikatoren stelle man derzeit so ein, dass sie seltener bei harmlosen Anfragen anschlagen. Nutzer, die eine Fehlklassifikation vermuten, sollen diese melden – über Feedback-Funktionen in Claude Code und Claude.ai sowie über ein Einspruchsformular für API-Anfragen.

Ob die Anpassungen ausreichen, bleibt abzuwarten. An den Schutzmaßnahmen selbst hält Anthropic ausdrücklich fest – diese hatten die Kritiker allerdings auch nicht infrage gestellt.


(fo)



Source link

Weiterlesen

Entwicklung & Code

Neu in .NET 10.0 [26]: Weitere Überladungen in der Klasse OrderedDictionary


Die erst in .NET 9.0 eingeführte generische Klasse System.Collections.Generic.OrderedDictionary bot bisher schon eine Methode TryAdd(), die versucht, ein Element hinzuzufügen. Neben der bestehenden Variante TryAdd(TKey key, TValue value) gibt es nun in .NET 10.0 auch die Methode mit drei Parametern TryAdd(TKey key, TValue value, out int index). Diese neue Überladung liefert im dritten Parameter den Index zurück, falls es das Element in der Menge schon gibt.

Weiterlesen nach der Anzeige


Der Dotnet-Doktor – Holger Schwichtenberg

Der Dotnet-Doktor – Holger Schwichtenberg

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.

Analog dazu gibt es für die Methode TryGetValue() nun ebenfalls eine neue Überladung, die nicht nur den Wert eines Eintrags liefert, sondern auch die Position des gefundenen Elements per Index.


.NET 11

.NET 11

(Bild: King / stock.adobe.com)

Das ist neu in .NET 11.0: Dr. Holger Schwichtenberg und weitere Experten präsentieren am 17. November 2026 auf der Online-Konferenz betterCode() .NET 11.0 die Änderungen für Entwicklerinnen und Entwickler in .NET SDK, C# 15.0 und mehr. Bis zur Veröffentlichung des Programms sind vergünstigte Blind-Bird-Tickets verfügbar.

Folgender Beispielcode nutzt TryAdd(TKey key, TValue value, out int index) in der Klasse OrderedDictionary:


public void Run()
{
 CUI.Demo("OrderedDictionary: TryAdd() mit Index and TryGetValue()");

 OrderedDictionary websites = new();
 websites.Add("Heise", "www.Heise.de");
 websites.Add("Software & Support", "www.entwickler.de");
 websites.Add("IT-Visions", "www.IT-Visions.de");
 websites.Add("Microsoft", "www.Microsoft.com");

 var key = "IT-Visions";
 var value = "www.IT-Visions.de";

 foreach (var item in websites)
 {
  CUI.OL(item.Key + " -> " + item.Value);
 }

 CUI.BR();

 // --- ALT: TryGetValue() mit 2 Parametern
 if (websites.TryGetValue(key, out string? value1))
 {
  int index3 = websites.IndexOf(key); // Nochmals nachschauen nach der Position
  CUI.Success($"Element {value1} wurde gefunden an der Position {index3}.");
 }

 // --- NEUE Überladung bei TryGetValue() mit Parameter index
 if (websites.TryGetValue(key, out string? value4, out int index4))
 {
  CUI.Success($"Element {value1} wurde gefunden an der Position {index4}.");
 }

 // --- ALT: TryAdd() mit 2 Parametern
 if (!websites.TryAdd(key, value))
 {
  int index1 = websites.IndexOf(key); // Nochmals nachschauen nach der Position
  CUI.Warning($"Element {value} ist bereits vorhanden an der Position {index1}!");
 }
 else
 {
  CUI.Success($"Element {value} wurde hinzugefügt.");
 }

 // --- NEUE Überladung von TryAdd() liefert jetzt auch den Index (Position) zurück
 if (!websites.TryAdd(key, value, out int index2))
 {
  CUI.Warning($"Element {value} ist bereits vorhanden an der Position {index2}!");
 }
 else
 {
  CUI.Success($"Element {value} wurde hinzugefügt.");
 }
}



Screenshot

Screenshot

Ausgabe des Beispielcodes (Abb. 1)


(rme)



Source link

Weiterlesen

Entwicklung & Code

.NET 11.0 Preview 5 vereinfacht das statische serverseitige Rendering in Blazor


Die fünfte Vorschauversion der kommenden .NET-Version 11.0 ist gestern Abend erschienen. Parallel dazu gab es auch die Version 11904.113 der für .NET 11.0 notwendigen Insiders-Variante von Visual Studio 2026. Alternativ ist eine Arbeit mit Visual Studio Code und dem im SDK mitgelieferten Kommandozeilencompiler möglich.

Weiterlesen nach der Anzeige


Dr. Holger Schwichtenberg

Dr. Holger Schwichtenberg

Dr. Holger Schwichtenberg hat Fachbücher zu .NET 10.0, C# 14.0, Blazor 10.0 und Entity Framework Core 10.0 veröffentlicht. Er arbeitet als Berater und Trainer bei www.IT-Visions.de.


betterCode() .NET 11.0

betterCode() .NET 11.0

(Bild: King / stock.adobe.com)

Das ist neu in .NET 11.0: Dr. Holger Schwichtenberg und weitere Experten präsentieren am 17. November 2026 auf der Online-Konferenz betterCode() .NET 11.0 die Änderungen für Entwicklerinnen und Entwickler in .NET SDK, C# 15.0 und mehr. Bis zur Veröffentlichung des Programms sind vergünstigte Blind-Bird-Tickets verfügbar.

Bei dem in .NET 8.0 eingeführten statischen serverseitigen Rendering (Blazor Static SSR), das als eine Ablösung für ASP.NET Core MVC und ASP.NET Core Razor Pages verstanden werden kann, funktioniert das Tabellensteuerelement QuickGrid, das Microsoft im NuGet-Paket Microsoft.AspNetCore.Components.QuickGrid liefert, bisher nur eingeschränkt. Lediglich bei den interaktiven Varianten Blazor Server und Blazor WebAssembly sowie Blazor Hybrid stehen alle Funktionen des QuickGrid-Steuerelements zur Verfügung.

Seit Blazor 11.0 Preview 5 ist es möglich, dass das QuickGrid-Steuerelement auch in statisch serverseitig gerenderten Blazor-Seiten sortieren und blättern kann. Wenn das Grid nicht interaktiv ist, werden die sortierbaren Spaltenüberschriften und die Seitennavigation als erweiterte HTML-Formulare gerendert, die ihren Zustand über URL-Abfrageparameter (Query String) übertragen. Lädt eine Nutzerin oder ein Nutzer die Seite neu oder kopiert die URL und öffnet sie erneut, bleiben Sortierung und aktuelle Seite erhalten. Dadurch lassen sich diese Zustände einfach per URL teilen oder als Lesezeichen speichern.

Lesen Sie auch

Im Schnelltest zeigte sich: In Zusammenarbeit mit Entity Framework Core als Datenquelle mit Paging in der Datenbank erzeugt das Blättern einen Laufzeitfehler: „InvalidOperationException: A second operation was started on this context instance before a previous operation completed. This is usually caused by different threads concurrently using the same instance of DbContext.“

Weiterlesen nach der Anzeige

Das folgende Beispiel funktioniert aktuell nur korrekt, wenn es immer alle Datensätze lädt und das Paging im RAM ausführt via

private List flightSet => context.Flights.ToList();


@page "/QuickGridSSR"
@using Microsoft.AspNetCore.Components.QuickGrid
@using Microsoft.EntityFrameworkCore
@inject IDbContextFactory DbFactory
@implements IAsyncDisposable
 
QuickGrid SSR
 

 

  p.FlightNo)" Title="FlugNr" Sortable="true" />
  p.Departure)" Title="Abflugort" Sortable="true">
 
  p.Destination)" Title="Zielort" Sortable="true">
  
  p.FlightDate)" Title="Datum" Format="dd.MM.yyyy" Sortable="true" />
  p.FreeSeats)" Title="Freie Plätze" />

 

 
@code {
 private readonly PaginationState pagination = new() { ItemsPerPage = 15 };
 
 private DA.WWWings.WwwingsV1EnContext context;
 private IQueryable flightSet => context.Flights;
  
 protected override void OnInitialized()
 {
  context = DbFactory.CreateDbContext();
 }
 
 // IAsyncDisposable implementieren, um den DbContext korrekt zu verwerfen, wenn die Komponente nicht mehr benötigt wird
 public async ValueTask DisposeAsync()
 {
  if (context != null)
  {
   await context.DisposeAsync();
  }
 }
}


Listing: QuickGrid mit Blazor Static SSR mit Zugriff auf eine Datenbank via Entity Framework Core


Das vorherige Listing zur Laufzeit (Seite 1)

Das vorherige Listing zur Laufzeit (Seite 1)

Das vorherige Listing zur Laufzeit (Seite 1)

Blazor Static SSR unterstützt seit der Einführung in .NET 8.0 die in ASP.NET Core verfügbaren serverseitigen Sessions (Cookie .AspNetCore.Session mit Session-ID, Speicherung der Daten im RAM oder einem persistenten Speicher) zur Datenübergabe zwischen Seiten. Bisher mussten Entwicklerinnen und Entwickler dafür das Session-Objekt im HttpContext-Objekt verwenden und komplexe Objekte selbst per JSON serialisieren:


@inject IHttpContextAccessor HttpContextAccessor
…
var HttpContext = HttpContextAccessor.HttpContext;
var json = System.Text.Json.JsonSerializer.Serialize(regForm);
HttpContext.Session.SetString("Formulardaten", json);


beziehungsweise


BO.RegistrationData daten = 
    System.Text.Json.JsonSerializer.Deserialize(
        HttpContext.Session.GetString("Formulardaten") ?? string.Empty);


In .NET 11.0 Preview 5 hat Microsoft nun die Annotation [SupplyParameterFromSession] eingeführt, die die Handhabung von Session-Variablen genauso einfach macht wie von Query-String-Parametern [SupplyParameterFromQuery], Form-Daten [SupplyParameterFromForm] und TempData-Werten [SupplyParameterFromTempData], wobei letztere Annotation erst in .NET 11.0 Preview 4 eingeführt wurde.

Entwicklerinnen und Entwickler annotieren in einer Seite eine oder mehrere Properties mit der Annotation [SupplyParameterFromSession]. Dabei sind einfache und komplexe Datentypen möglich, während [SupplyParameterFromTempData] auch in Preview 5 weiterhin nur mit einfachen Datentypen funktioniert:


[SupplyParameterFromSession]
public string Message { get; set; }
[SupplyParameterFromSession] 
public BO.RegistrationData RegData { get; set; }


Session-Werte werden dabei automatisch mit System.Text.Json in JSON serialisiert.

Analoge Properties deklarieren Entwicklerinnen und Entwickler in den Folgeseiten und können dann auf die Werte ohne weiteres Zutun zugreifen. Voraussetzung ist wie bisher, dass in der Startseite die Sessions aktiviert wurden:


builder.Services.AddDistributedMemoryCache();
builder.Services.AddSession();
…
app.UseSession();




Source link

Weiterlesen

Beliebt