Torben Norling
Senior Software Engineer · Architect · Tech Lead
Java · Agentic AI · MCP · Distributed systems
Sollentuna, Stockholm · gnilron.com/contact · linkedin.com/in/torbennorling · gnilron.com · github.com/gnilron
Profile
Hands-on architect and senior engineer with more than 30 years of delivering software, 28 of them in Java. I started as a developer at Ericsson and have since been the technical lead in large deliveries at the Swedish Tax Agency and Unibet, where I have been part of the architecture team since 2011. In recent years I have gone deep into AI engineering: agentic workflows, MCP servers with OAuth 2.1, and AI-driven migrations that run in production, not just in demos. I prefer to own a problem end to end, from the design decision to the last performance fix.
Key strengths
- Delivery and leadership. A long track record of shipping large systems on time as technical lead: guiding teams on the how, helping product managers order the work, and setting the architecture together with key people. From the national online tax return at the Swedish Tax Agency to Unibet's expansion into new regulated markets.
- Agentic AI and MCP. I build MCP servers in Java and Spring AI with OAuth 2.1, giving LLM clients such as Claude and ChatGPT controlled access to a user's own private data. I use Claude Code skills and spec-driven workflows to run migrations across whole service fleets.
- Java in depth. 28 years of Java, from the late 1990s to Java 25 and Spring Boot 4 today, including Spring Security, Spring Authorization Server and Spring AI.
- Sharing knowledge. Over the years I have given geek-session talks to the entire tech organisation on the technical efforts I have driven, from messaging and security to Backstage and AI-accelerated migrations.
- Architecture that holds up. Messaging and event platforms (Solace, NATS), security and identity (BankID and other national e-IDs), performance, observability and cost-efficient cloud.
Experience
Architect, Enterprise Architecture team·Unibet (Kindred Group / FDJ United)
2011 – present · Stockholm · Consultant via Gnilron AB
- As enterprise architect, lead the development teams at Unibet through the platform's expansion into new regulated markets and recurring technical modernisations.
- Led the introduction of Backstage as the developer portal, from setup, integrations and rollout to getting the teams on board and making it something they actually want to use. Built custom extensions on top of it, including an MCP server in Spring AI that serves the catalog with a good number of custom extras for further AI insights, so AI assistants can answer questions about the whole landscape.
- Built the event platform that drives internal state across the microservice landscape, with shared libraries on Solace as the backbone. Migrated messaging from ActiveMQ to Solace (appliance and software brokers) and have done many years of performance work on it.
- Refactored the security platform and the authentication and authorization layers, for both end users and internal systems, including national e-IDs such as BankID and DanID.
- Run fleet-wide version migrations of Java, Spring Boot and dependencies. The Spring Boot 3 → 4 migration was driven by reusable AI skills, and I presented the approach to the whole tech organisation.
Developer and architect·Swedish Tax Agency (Skatteverket)
2001 – 2011 · Stockholm · Consultant via Bluefish, from 2005 via Gnilron AB
- Part of the team that built Internetdeklarationen, the online income tax return that Swedes still use every year.
- Developer and architect for the web application and the mobile web, with a strong focus on performance and peak load.
- Introduced the first tax return apps and filing by SMS.
Systems developer·Ericsson Telecom / Ericsson Data
1993 – 2000 · Stockholm
- Developed and delivered administrative systems for internal use across Ericsson.
- Cobol, C, C++ and Pascal, then Java from the late 1990s.
Earlier assignments
- Mind (2000 – 2001) · Java and web development at a portal consultancy, "We do portals".
- IBM and KTH Royal Institute of Technology · Shorter consulting assignments via Gnilron AB between the Tax Agency engagements.
Selected project
Liztor·Own product, built and run end to end
Flutter (iOS, Android, web) · Spring Boot microservices · Java 25 · PostgreSQL · NATS · OpenTelemetry
- Realtime-synced shared lists over a custom WebSocket sync protocol, in production with real users.
- Remote MCP server (Java 25, Spring Boot 4, Spring AI) that lets Claude, ChatGPT and other MCP clients read and edit a user's own private lists. Complete OAuth 2.1 with PKCE, dynamic client registration (RFC 7591), protected resource metadata (RFC 9728) and an embedded Spring Authorization Server. The user approves access by scanning a QR code in the app. A token exchange then gives the agent a scoped session, and its changes appear live on the user's devices. 27 annotated tools, including a long-poll tool that lets an agent react to edits made in the app.
- AI features: generated recipes with AI-generated dish images (Spring AI, OpenAI) and LLM-assisted catalogue enrichment.
- Moved from AWS to Hetzner and Cloudflare (Terraform), and from MongoDB to PostgreSQL in a spec-driven, AI-assisted migration. Running costs dropped by about 87%, and the work took about a week of evenings with Claude Code.
- Multi-repo workflow in custom Claude Code skills that split specs per repository and hand them to agents.
Rust
I have built a number of tools used in integration work around Backstage, and an experimental tool for visualising Backstage and Kubernetes with Bevy, a Rust-based game engine. Rust is now an obvious part of my toolbox, and one I use more and more.
Skills
- Java and Spring: Java 25, Spring Boot, Spring Security, Spring Authorization Server, Spring Cloud, Spring AI, Spring Data JDBC, Flyway, Testcontainers, Gradle, Maven
- AI: MCP servers and clients, Claude Code (skills, agents, spec-driven workflows), Anthropic and OpenAI APIs, RAG and embeddings, Ollama
- Architecture and integration: microservices, event-driven design, Solace, NATS JetStream, Kafka, Hazelcast, WebSocket, OAuth 2.1 / OIDC, Keycloak, Curity, BankID
- Cloud services: AWS, Hetzner, DigitalOcean, Cloudflare and more
- Operations and platform: Kubernetes, Terraform, Docker, Jenkins, GitHub, GitLab, OpenTelemetry, Grafana, Backstage
- Databases: PostgreSQL, Oracle, MongoDB and others
- Other languages and clients: Rust, TypeScript, Dart and Flutter, Swift, Vue, React
Certifications and languages
- AWS Certified Solutions Architect – Associate (2018, expired)
- Swedish (native), English (fluent, my daily working language at Unibet since 2011)
Where it started
Self-taught. I started programming in the C-64 and Amiga demo scene in the late 1980s, writing demos in 6510 and 68000 assembler (an old interview on c64.com).