Download PDF
P PAOLO OTTANA
Open to fully remote roles

// Curriculum Vitae — 2026

Paolo Ottana

Software Architect & Staff Engineer
Profile

The short version

01

I've spent more than 20 years building software, and my focus has settled where everyday coding meets technical direction: the architecture, and the decisions we still live with years later.

  • The first decade was C++, in a 3D CAD engine. The rest is Balsamiq: product, infrastructure, developer experience, and lately AI.
  • Most of the work now involves AI: in how we build, where I code with agents daily and contribute to the team's agent skills and best practices, so the speed never costs us control, and in the product, where we shipped a custom AI agent handling around 800 real conversations a day.
  • I do my best work close to the product, owning the architecture. Fourteen years fully remote, well before it was the default, taught me to keep distributed teams engaged through long projects.
Experience

Where I've shipped

02

Senior Architect & Senior IC

Balsamiq · Remote
2011 — Present
  • Joined as the second software engineer, when the company ran completely flat. Grew with it through every phase of its bootstrapped, profitable life, treating the company itself as a product and iterating on its culture, processes, and values with a kaizen mindset.
  • Senior architect and IC on Balsamiq's product, shipping across client rendering, server-side services, product features, AI agent design, and MCP.
  • Contributed to evolving the product operating model, a custom Shape Up (shaping, betting, fixed build/cooldown cycles) — and work inside it, writing pitches and running experiments for new developments.
  • Became the team's de facto architecture authority, setting technical direction that others build on, shaping the architecture of others' pitches through review, and coordinating frontend and backend groups on API definitions through to shipped features.

Software Engineer · Code Owner (History & Features)

Think3 · Italy
2001 — 2011
  • Code owner of the history-and-features subsystem, the parametric modeling core, of one of Italy's reference 3D parametric CAD products.
  • Worked in C++ across a very large codebase: a single DLL of 60MB+.
  • Part of a several-hundred-engineer organization distributed across Bologna, Pesaro, and Bangalore.
  • Flew to Bangalore with the VP of Engineering to run a training session for the India team. It was a formative cross-site experience.
C++
Highlights

Selected work

03
Achievements

Took Balsamiq's AI from prototype to production Balsamiq

With the team, I took Balsamiq's AI from a prototype to a shipped production feature — as a core developer and architect, designing and building the backend on a real LLM (Gemini). That meant the LLM-facing backend and its AI workflows, the MCP layer for tool calling so the AI can act on the product's internal model and core logic, and guardrails around what the model returns. It powers AI-assisted creation and editing of wireframes, and it continues the line of work the earlier image-to-wireframe pilot started.

Automated triage of production runtime errors Balsamiq

I built automated triage for production runtime errors. They collect into Elasticsearch, then a two-stage, multi-model LLM pipeline handles them: a first model triages each error, and a copilot agent picks up the issue and attempts a fix.

AI-augmented engineering practices and skills Balsamiq

Early adopter of agentic coding tools (Claude Code, Codex). I built a body of reusable AI "skills" and best practices, shared both at the repository level for the team and in a personal skills repository. They cover JS-to-TS conversion, test-effectiveness review, comment-quality review, PRD creation and PRD-to-task breakdown, and knowledge skills that encode sound architectural practice.

Rendering performance, end to end Balsamiq

Drove rendering performance end to end: client rendering optimization, and a re-architecture of the rendering pipeline to a canvas-based approach. I also created a headless rendering engine on skia-canvas that renders PNGs straight from model files on the Node server, with no browser in the loop.

Core architect of the Balsamiq Wireframes 4 rewrite Balsamiq

I co-designed and built the ground-up rewrite of Balsamiq Wireframes Editor v4: a portable, vanilla-JavaScript core model paired with modular native UI for each platform (web/React, macOS, and Windows), with platform abstraction layers — the shared platform primitives that let the same model run across different platforms, hosts, and environments. A centerpiece was a platform-agnostic rendering engine for the drawing canvas, rendering to SVG on the web and to native Core Animation on macOS. I was one of the main developers on the core model, and I kept driving the editor's frontend architecture while shipping features on top of it. Early R&D included prototyping a precise text-layout engine on Pango/Cairo/HarfBuzz before the team settled on the portable-core approach.

Built and ran Balsamiq's macOS app, end to end Balsamiq

I was the core developer of the Balsamiq Wireframes macOS app, the native macOS shell of the Balsamiq Wireframes v4 architecture, built in Swift with hardware-accelerated Core Animation. I also owned the remote build system on the Mac machines: the macOS build, signing, and release pipeline that ships the app. It's still sold and in production use today.

Large-scale TypeScript migration of the Balsamiq Wireframes v4 codebase Balsamiq

I drove major refactorings on Balsamiq Wireframes v4's large, evolving codebase. Working solo, I rebuilt 80+ UI "control" classes (the app's wireframing components) from JS prototype classes into a full TypeScript class hierarchy — a subsystem of roughly 100K lines — landing it with almost zero regressions. I also pushed the ongoing, batch-by-batch conversion of the whole codebase from JavaScript to TypeScript.

Real-time collaboration server for concurrent editing Balsamiq

As part of the design team, I helped design the RTC (real-time collaboration) server on Node.js that opens a project and lets multiple editors make concurrent edits while keeping the project archive consistent — correctness of the shared state under concurrent edits was the core design constraint. The editor integrates with it through dedicated npm packages.

Technical liaison across editor, integrations, and Cloud teams Balsamiq

I worked across the core/editor team, the integrations team, and the Cloud web-app infrastructure, aligning API calls, configuration parameters, and contracts so the pieces fit together.

Flagship editor features in Balsamiq Wireframes v4 Balsamiq

I designed and built major features in the Balsamiq Wireframes 4 canvas editor: search-and-replace, a new snapping system (equal spacing, equal sizes, snapping inside and outside, controls snapping to columns), and smart arrows.

Built Balsamiq's e-commerce, billing, and licensing backend (Olio) Balsamiq

I redesigned the purchase flow and integrated the payment gateway (e-junkie) with pricing management, then designed and built Olio, the e-commerce backend that handles purchases, upgrades, invoicing, billing, license keys, and the licenses database — up to $4M a year in subscription and desktop-license revenue. I helped run its deployment on early Amazon AWS (EC2 Linux images and load balancers), and learned Groovy and Grails from scratch to build it.

Owned Balsamiq's Atlassian integrations Balsamiq

I built and owned Balsamiq's integrations with Atlassian Jira and Confluence against their APIs in Java, plus shorter-lived FogBugz and XWiki integrations.

Feature work on Balsamiq's flagship editor (Mockups) Balsamiq

I built features in Balsamiq Mockups, the flagship graphics and wireframing editor, written in Flex/ActionScript. It was the product the Balsamiq Wireframes v4 rewrite later reimagined.

Early image-to-wireframe AI pilot Balsamiq

I built an early pilot for turning images into wireframes, combining classic computer vision with ML-based OCR. I trained and fine-tuned a YOLO model (Python/Colab) to recognize UI elements such as buttons, inputs, and rectangles. It was ahead of its time, and it ran into the data and developer-bandwidth limits of the day. The project pivoted to a less ambitious but useful version of the idea.

One-command local orchestration of the full stack Balsamiq

I built a script that spins up the entire infrastructure locally in one go: the web app, the editor, the RTC (real-time collaboration) server, the AI server, and the auth server. The whole system can then be run and developed against on a single machine.

Software projects

ariostea Python

Local-first RAG over my Obsidian notes, exposed to AI agents as an MCP server: hybrid retrieval (multilingual embeddings + BM25, reciprocal-rank fusion) on sqlite-vec, fully offline.

skills Claude Code

Personal collection of Claude Code skills: reusable AI workflows and best practices for agentic coding.

claude-session-manager JavaScript

Claude Code plugin to track and resume parallel development sessions across repo copies: auto-captured sessions, resume briefings, a cross-repo dashboard, knowledge search, and a web management UI.

morphogen Zig

A GPU learning playground: growth simulation in Zig where cells self-organize into branching, tree-like structures through local rules and volumetric raymarching.

Toolkit

Skills

04
Languages
TypeScriptJavaScriptSwiftJavaC++
Frameworks
Node.jsReact
Tools
Claude CodeModel Context Protocol (MCP)GeminiCodexAWSGitLinuxPlaywright
Practices
AI System DesignLLM EngineeringSoftware architectureAI-augmented engineeringReal-time & distributed systemsAPI design & integrationsObservabilityCode review & technical mentorshipApplied ML / computer vision (pilot)Graphics & rendering performanceLarge-scale refactoring & migration
How I work

Traits

05

Clear and on the level

Be transparent, be clear. Most problems are miscommunication, not too little of it. Ambiguity and byzantine process are where trust goes to die.

Cross-functional partnership

Works hands-on alongside product, design, and user research, turning shared questions into shipped features.

AI-augmented engineering, without giving up control

Uses AI as a team multiplier while staying deliberate: tools serve the goal, they don't replace judgment, and they aren't a bandwagon to chase. Sometimes switching AI off and pairing with real people is the way to regain touch.

Learn-it-all over know-it-all

Things change fast, in tech more than anywhere, and plenty of it is momentary trend. What I know today will be obsolete in months, so the thing worth cultivating is the ability to learn: look at what's new with a balanced eye, drill into the details when that's what it takes to grasp the sense of it. What sticks are principles and the learning attitude.

Team play, and a few hard-won principles

The real multiplier is the team, not the lone genius. Argue hard, then commit fully once the call is made; stay long enough to go deep.

Calm beats frantic

Sustainable pace over grind. I've been through high and low tides, and steady wins. Not everything is ASAP, and burning people out was never a plan.

Bias to action

When in doubt, do. I lean toward shipping and learning over deliberating, especially where friction is low and trying something is cheap.

Breadth over over-specialization

Deliberately stays broad rather than over-specializing, to keep working where technical judgment, product sense, and execution all matter at once.

Continuous improvement, beyond the code

Brings a kaizen mindset to everything, not just the codebase, treating how a company works (its culture, vision, and values) as things a team keeps iterating on together.