Technical leadership · Software architecture · Product engineering · Applied AI

I design, build and rescue software products.

From architecture and technical leadership to the code itself. I work with founders and teams when they need an experienced technical lead who can make the decisions and then make them real.

20+
years engineering
10+
years independent
Architecture production
One line of responsibility

You probably need me when…

  1. 01

    The MVP has customers, and now it needs to behave like a production system.

  2. 02

    The product has outgrown its original architecture—but “rewrite it” is not yet an answer.

  3. 03

    Everyone owns a part of the system, but nobody owns the complete technical picture.

  4. 04

    The team is busy shipping while consequential structural decisions keep being deferred.

  5. 05

    You need CTO-level technical ownership before a permanent CTO is the right hire.

  6. 06

    A difficult existing system needs to be understood and stabilised before anyone can change it safely.

One person. Four working modes.

An engagement can move between all four. The point is not to hand a strategy to somebody else and disappear before the difficult part.

  1. 01

    Fractional CTO & technical leadership

    Technical ownership, architecture, sequencing, engineering standards and team leadership—turning business requirements into decisions engineers can act on.

  2. 02

    Architecture & product engineering

    Design systems around the actual product and its likely evolution. Use the smallest architecture that is genuinely sufficient, then add complexity only when it earns its keep.

  3. 03

    System assessment, rescue & modernisation

    Understand the system before changing it. Find the real constraints, reliability and security risks, architectural debt and expensive assumptions. Stabilise first; rewrite only where it is justified.

  4. 04

    Hands-on engineering

    Prototype, build, review, diagnose and ship difficult or important parts directly. Recommendations should survive contact with the code and production behaviour.

AI, where it earns its place.

I integrate AI models into products, analysis and internal workflows, and design agent-assisted development systems around real teams and codebases. The surrounding engineering still matters: evaluation, security, observability, cost control, human review and fallbacks. Calling an API and declaring victory is not a production strategy.

Start with the responsibility you need covered.

Responsibility, decisions, delivery and the operating reality.

Client and product details stay anonymous where the work is confidential. These accounts use only facts that can be stated publicly.

01 Anonymised · SaaS

A self-service SaaS product, from first account to production operation.

Situation
A SaaS product needed a coherent route from customer onboarding and payment through data collection, analysis and reporting, delivered across web and mobile and operated on AWS.
Úlfur’s responsibility
Design, build and technically lead the platform across product decisions, architecture, application engineering, integrations, AWS deployment and ongoing operation.
Important decisions
Keep product decisions, architecture, implementation and AWS operation under one line of technical responsibility, so self-service onboarding, billing, integrations, analysis and reporting were designed as one operating product.
Delivered
Self-service onboarding, subscriptions and billing, data collection, third-party integrations, reporting, AI-assisted analysis, web and mobile delivery, and AWS production operation.
Operational state
Deployed on AWS as a production SaaS platform, with web and mobile delivery and ongoing operation.

02 Robolobo · Project bootstrap

From a brief to a guarded production URL.

Situation
Starting a small web project repeatedly meant reconstructing the repository, architecture, cloud deployment, CI/CD, domain setup and account-safety decisions before useful work could reach production.
Úlfur’s responsibility
Design and implement a reusable brief-to-production workflow, then prove it by using ulfurk.com as its first real consumer.
Important decisions
Use a small static-site archetype with TypeScript CDK, private S3 and CloudFront Origin Access Control; deploy through GitHub OIDC; and fail closed unless immutable GitHub and AWS account identities match the project configuration.
Delivered
Project initialisation, canonical agent instructions, Codex-assisted development, AWS CDK, GitHub CI/CD, guarded DNS adoption and production smoke checks.
Operational state
ulfurk.com is live as the first consumer, deployed from a private personal GitHub repository into the intended personal AWS account.

Broader professional experience includes SaaS, startups, banking, insurance, travel/search, media/streaming and government.

A few principles that survive real systems.

  1. 01

    Understand before prescribing.

    Start with the business constraint, the product and the system as it actually behaves—not the fashionable answer.

  2. 02

    Make consequential decisions explicit.

    Record the trade-offs, the assumptions and what would cause the decision to change.

  3. 03

    Let complexity earn its place.

    Prefer the simplest architecture that is genuinely sufficient. Complexity has a permanent operating cost.

  4. 04

    Ship in useful increments.

    Reduce risk by putting coherent, maintainable slices in front of real users and real operating conditions.

  5. 05

    Verify against production behaviour.

    Architecture diagrams are hypotheses. Logs, failure modes and user behaviour are evidence.

  6. 06

    Leave the work easier to operate.

    The system should be safer to change, and the engineers should understand it better, after the engagement.

Still close to the code.

The stack is not the service. It is how decisions get tested and turned into working software.

Python · Django · PostgreSQL · JavaScript · Vue · AWS

APIs · Distributed systems · SaaS · Infrastructure · Production operations

AI integrations · Agent-assisted development · AI product workflows · Evaluation

Python
since 2004
Django
since 2008

I started as an engineer and never stopped being one.

I’m Úlfur Kristjánsson. My work began in software engineering and widened over time: architecture, product decisions, infrastructure, engineering teams and eventually whole technology organisations.

These days I work where those layers overlap. Sometimes that means acting as a fractional CTO. Sometimes it means designing a system, interrogating an existing one or spending the afternoon in the code fixing the thing everybody thought required a rewrite.

I work independently and remotely with companies internationally. Consulting services are provided through Robolobo OÜ.

Have a product to build, a system to untangle, or a technical decision that has become expensive?

Let’s talk.

The first step is an email. Tell me what you are building, what is difficult, and what needs to happen next.