Zoran Horvat
Principal consultant at Coding Helmet s.p.r.l.
Belgrade, Serbia
Actions
Zoran is a principal consultant at Coding Helmet Consultancy, an author at Pluralsight, Udemy, and YouTube, a speaker and author of 100+ articles, and an independent trainer on the .NET technology stack. You can find him speaking at conferences and user groups, promoting object-oriented and functional development styles, clean coding practices, and techniques that improve the longevity of complex business applications.
Area of Expertise
Topics
Functional Thinking with C# 15: The Missing Parts
Functional programming had crossed paths with C# years ago, adding a lot to the language's specification. We have functional sequences with LINQ, built on top of list comprehension. There are lambdas and closures, support for tuples, records, and pattern matching. We can build our own functional extensions. Yet, some crucial parts are still missing. Common functional types, such as Option and Either, are not available, and there is no supporting syntax. We are finally getting the union types, but will the programmers know how to use them effectively?
In this presentation, you will gain a wider picture of using functional concepts in modern C#, without having to step back to the traditional, imperative coding style. The goal of the game: Stay within C#, keep thinking functionally, and don't worry too much about missing types or syntax.
This talk was presented at conferences a few years back. The current state of this talk is mostly the evolution of introductory demos available on my YouTube channel: https://www.youtube.com/playlist?list=PLSDYwLgFqaX78eEg_YKs0wHmOMi7_ggZr
Produce Embarrassingly Simple Design with Advanced C# 15
Mixing functional programming and metaprogramming into good-old object-oriented C# is not new. Still, so many programmers don't see it clearly yet: Those paradigms are not additions to an established programming model; they are genuine parts of a unified programming method, support for which is progressively being added to the C# programming language.
In this session, we will demonstrate the use of the latest functional additions to C# - records, tuples, union types, deconstruction, nullable reference types, LINQ, extension methods, and a few others - which will be integrated with object-oriented and even procedural elements into a unified design that effectively solves a practical problem.
This session was presented several times (under different titles): IT Konekt 2021, Sinergija 2021 in Belgrade, NDC Porto 2022, Techorama Antwerp 2022, and Sinergija 2022.
I have written the entire demo and script from scratch several times to always include the latest syntax relevant to the topic.
Workshop: Gradually Improving Software Design (a.k.a. Applying the Emergent OOD)
Success is the greatest curse in a software project. The success that becomes unsustainable so quickly, that everything beyond the initial period of happiness becomes an endless maintenance and extension nightmare.
The primary motivation for this workshop is to help teams take control back and start making further progress in their (primarily) object-oriented designs, software projects that are often a couple of years old, and which are currently very hard to maintain and develop any further.
In this workshop, we are guiding developers through a series of experiments on pre-existing object-oriented designs modeling critical parts of business applications. Each of the designs is either exhibiting issues that are common to many object-oriented applications or is on the verge of becoming yet another object-oriented design ridden by problems: Lack of flexibility in the face of new requirements, inability to add more features and extend existing ones, desperate entanglement of all elements that cause further development to grind to a halt.
In each of the experiments, attendees will improve the design by removing one obstacle at a time. By the end, all those experimental designs will be turned into clean, extensible, and maintainable pieces of domain-related code.
Most of the examples that will be developed are ASP.NET Core applications in .NET 7 and C# 11. The particular choice of UI technologies is not relevant to the ability to participate in this workshop - all the code that is the subject of the workshop is in the domain-related classes. There is no preferred IDE - Visual Studio Code or Visual Studio 2022 (any edition) are fine, but any other that supports .NET 7 and C# 11 will suffice as well.
Table of contents:
Modeling emergent objects 50m
Modeling branching and looping 1h 30m
Implementing the map-reduce principle 2h 20m
Designing strategies 2h
Avoiding null references 2h 20m
Pattern matching (C# 7-11) and null operators 1h 20m
Modeling optional objects 2h 20m
Modeling Value Objects 2h 20m
Intermediate to advanced level.
I have been holding this workshop (both in the form of a 1-day workshop, 2-day workshop, or 1-day training) since 2014 to several dozens of teams, and also at some conferences. The content has sustained numerous evolutions and several complete rewrites.
The entire set of lectures is now in the form of an ASP.NET Core business application using EF Core, though UI & database technologies are not relevant for the content - even backend-only developers with little knowledge of EF core or UI had no problems participating.
The latest edition of this workshop was included in the SDD London 2023 conference.
Prerequisites:
- Proficiency in C#
- Proficiency in developing ASP.NET Core applications with EF Core is a plus, but not strictly required
- All attendees need their own laptop
Below are the tools and technologies required to develop the application. Each participant should have these installed on their laptop prior to attending the workshop:
- .NET SDK 7.0 or later - downloaded from https://dotnet.microsoft.com/enus/download/dotnet,
- An appropriate IDE, such as Visual Studio Code or Visual Studio (any edition,
including Community),
⎯ SQL Server support - all demos include a connection string to a LocalDB
database; support for LocalDB is installed as part of SQL Server Express (https://learn.microsoft.com/en-us/sql/database-engine/configure-windows/sql-server-express-localdb); any
other SQL Server edition would suffice but with the additional requirement
that the attendee would need to manage the connection string,
- SQL Server Management Studio (https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms) or any other tool to easily browse and
query the database, including tools and extensions built into the IDE
- Git client, any
Beyond AI Hype: Where do Code Generation Tools End?
Generative AI hype might be receding a bit these days, and we can finally assess how the landscape is changing for hands-on programmers.
While some developers still worship AI and its power to develop entire features on a whim, others notice design flaws, persistence errors, mismatched legal reports, and outright delusional implementations! What shall we do about it?
In this talk, we will try to look beyond generating a portion of code. Can we keep maintaining generated code in the upcoming years? Can AI generate unit tests that won't turn out to be a white lie about our product's quality? Can a tool trained on myriads of lines of mediocre code still write quality code?
And we didn't even touch on the process of specifying precise requirements...
Those are the hard questions we will try to answer in this talk.
This talk is a 100% coding session using C# in VS Code with Claude Code and Codex.
This talk is the result of several years of experiments I ran and documented in a series of YouTube videos: https://youtube.com/playlist?list=PLSDYwLgFqaX4Ke4h0bVzgadqOesECqKj2
This session was presented at Developer Week 24 conference, Nuremberg (no link available).
1-day Workshop: Functional Domain Modeling with C# 15
Domain modeling is probably the hardest part of modern software development and, beyond doubt, the most complicated process of them all. The complexity we observe in domain modeling comes from the intrinsic complexity of the domain itself - there are no simple businesses anymore. We must accept that.
Software developers have already observed that domain modeling benefits from functional programming. The reasons are manifold, but the most important ones have to do with how the functional modeling process is aligned with how businesses evolve (along with the software that models them).
It is beneficial to model the data separately from the rest of the system, and consequently to possess the domain state isolated from any processes. It is also beneficial to design functions separately from the data because behaviors are many and their stakeholders are often disconnected, often with little sympathy to the needs of others. Both these principles are orthogonal to object-oriented programming, but native to functional programming.
Hence this workshop, in which you will learn the benefits of functional modeling, on an example of a realistic ASP.NET Core Web application, as well as the practices and techniques we apply to implement the fully operational application.
Table of contents:
- Modeling the data separate from behavior,
- Modeling behavior on top of the data model,
- Using value objects and values; using records,
- Modeling discriminated unions,
- Modeling function composition,
- Optional objects and railway-oriented programming.
Prerequisites:
- Proficiency in C#; programmers mainly dedicated to other programming languages will probably not be able to follow through the workshop
- Proficiency in developing ASP.NET Core applications with EF Core is a plus, but not strictly required
- All attendees need their own laptop
Advanced level.
I have been holding this workshop (both in the form of a 1-day workshop, 2-day workshop, or 1-day training) since 2014 to several dozens of teams, and also at some conferences. The content has sustained numerous evolutions and several complete rewrites.
The entire set of lectures is now in the form of an ASP.NET Core business application using EF Core, though UI & database technologies are not relevant for the content - even backend-only developers with little knowledge of EF core or UI had no problems participating.
Where Is C# 15 Heading (and Why, Exactly?)
We have witnessed a gradual but substantial shift over the years in how the C# language is meant to be used. Between the lines, C# is becoming progressively functional, and for a reason!
In this session, we will demonstrate the use of the latest functional additions to C#, which are necessary to address the challenges in modern software development. We will outline the reasons why such a paradigm shift is a necessity in the cloud-first, reactive, parallel, event-driven, and whatnot world we are casting in software these days.
To adapt, some programmers will have to learn C# over again!
This session was presented (on C# 14 at the time) at Sinergija 2023 Belgrade (November 2023), .NET Conf 2023 Bulgaria (December 2023), Peak IT 006 Brasov (May 2024). No links available.
AI Tools Make Incremental Coding More Important Than Ever
One of the sure signs of an experienced programmer is the ability to develop a feature in small increments, whereas a less experienced programmer would struggle to keep all the desires in their head all at once, which often leads to incoherent, needlessly complex implementation. But the times, they are changing again. How will the advent of generative AI affect our core habits?
In this talk, we shall analyze the benefits of using generative AI tools in small increments. You will witness how that approach can empower every programmer with the knowledge of the finest techniques in programming.
This is the AI-powered version of the talk I have been giving in different forms over the course of 10 years. The talk has always been accepted well by the audience, often quoted as "eye-opening".
Where is Generative AI Taking Us: A Senior Programmer's View
Artificial intelligence is rapidly evolving from a background tool into an "algorithmic colleague". It is already fundamentally transforming the nature of work, both for senior and junior programmers, though not in the same way. This session provides a critical overview of how AI approaches software development, establishing the indispensable role of a human-in-the-loop. We will inevitably dive into the new division of labor, discussing the evolving roles, and identifying the emerging jobs of the AI era alongside those that are now retiring or just fading out.
This is a no-code session, but with deep technical insight into the working principles of LLMs, deep neural networks, and generative AI tools. The talk ends in an attempt to understand how generative AI tools are changing and will change software development, from the developer's perspective.
Presented at PeakIT Brasov in April 2026.
Please note that Sessionize is not responsible for the accuracy or validity of the data provided by speakers. If you suspect this profile to be fake or spam, please let us know.
Jump to top