Ten platforms cover most of what we ship — from the data platform to the products on top to the Terraform underneath. We'd rather know a short list in production than a long one on slides. Same discipline across all of them.
This isn't a list of things we've read about. Every platform on this page has been carried through real engagements — migrations, lakehouses, payment systems, governed AI surfaces — and each comes with its own accelerator: reference architectures, reusable modules, deployment patterns, test scaffolding and operations playbooks built up over years of shipping.
Moberg is a Microsoft Solutions Partner for Data & AI and for Digital & App Innovation (Azure), and a Databricks Consulting & Solution Implementation Partner, with Databricks Certified Data Engineers and Platform Architects on the team. Microsoft and Databricks have both independently audited this body of work — this page is the substance.
The depth is the offer: when we deploy one of these accelerators, you're not paying for a first attempt — you're paying for the version that already learned its lessons.
Fabric folds Data Factory, OneLake, Data Warehousing, Notebooks, Data Science / Copilot and Power BI into a single SaaS workspace. We adopt it where the client already lives in the Microsoft estate and where reducing the moving parts is worth more than maximum platform flexibility.
Copilot in Power BI for first-draft visuals and DAX. Fabric Data Agents for natural-language Q&A over the semantic model. Used as an accelerator and a self-service surface — never as the source of a regulated number.
Fabric Git Integration to source-control workspace items (notebooks, pipelines, semantic models, reports). Deployment Pipelines for promotion through dev → UAT → prod. Pull requests reviewed by a senior engineer before merge to main.
Power BI sits on top of all our platforms — Fabric, Databricks, Synapse, on-prem SQL Server alike. The discipline is the same regardless of source: a properly modelled semantic layer, measures that mean exactly one thing, and a separation between "the model" and "the report" that survives a change of designer.
Copilot in Power BI for report-authoring acceleration. Q&A natural-language layer on the modelled semantic model — only as good as the model under it. AI assistants read from the semantic model, not from raw tables. Spec-driven: AI proposes the measure; the engineer reviews and approves before release.
.pbip project format under Git. Tabular Editor scripts for semantic-model unit tests and metadata checks. Deployment via XMLA endpoint or Power BI Deployment Pipelines API. Power BI Activity Log monitored so unused reports get retired, not preserved.
Databricks is the platform when data volume, workload variety or an existing Spark footprint make Fabric the wrong answer. We hold Databricks Certified: Data Engineer Professional and Associate, plus Platform Architect accreditation across the team. Production work, not notebook prototypes.
Databricks Assistant and SQL editor copilot for ad-hoc query authoring. Mosaic AI for the model lifecycle when ML is in scope. Lakehouse Monitoring with built-in drift detection. AI applied where it has an auditable home — Unity Catalog lineage covers prompts, inputs and outputs alongside data.
Databricks Asset Bundles for everything — notebooks, jobs, pipelines, clusters, permissions — all as code. Azure DevOps or GitHub Actions pipelines for build → test → deploy. Bundle deployment per environment (dev / UAT / prod) with environment-specific variables. PR validation runs notebook tests and Delta Live Tables checks before merge.
dbt is how we keep SQL transformations honest. Models versioned, tested, documented and lineaged like any other engineering artifact. We use it on top of Databricks (dbt-databricks adapter), Fabric Warehouse, Synapse and Snowflake — anywhere the transformations are SQL-first and need to live alongside proper engineering practice.
sources → staging → intermediate → marts.stg_, int_, fct_, dim_.not_null, unique, relationships on keys.LLM-assisted model authoring with the project context loaded — useful for boilerplate and first-pass docs. We never accept AI-generated SQL without test coverage on the model and a reviewer signing off. AI doesn't get to write a model and the tests for that model.
Slim CI on every PR — only changed models and their downstream are built and tested. dbt run + dbt test required before merge. dbt docs generate + publish on every main-branch deploy. Manifest comparison between branches surfaces breaking changes. Production runs orchestrated from Airflow / Databricks Workflows / Azure Data Factory depending on the wider platform.
Claude is how more of the business gets to ask questions of the data without learning Power BI, SQL or Python. Through the Model Context Protocol (MCP) we plug Claude into the same governed semantic models, lakehouse tables and document stores that already power the reports — so the answer is the same one the dashboard would give, just reached through a conversation. The point isn't a smarter chatbot. The point is putting the correct drivers for a decision in front of more of the people who actually make decisions.
An analyst's morning starts with a written briefing, not a blank dashboard. A non-technical manager can ask why a number moved without filing a ticket. Cross-document research that used to take an afternoon happens in a conversation. The reports don't go away — but the audience for the underlying numbers gets several times larger.
MCP servers versioned and deployed as services — Terraform for infrastructure, GitHub Actions or Azure DevOps for build and release. Prompt patterns and tool definitions reviewed like code. Evaluation suite for accuracy, hallucination rate and refusal behaviour run before each release. Production conversations fed back into the evaluation suite to catch drift.
Terraform is the layer underneath everything else. Networks, identity, capacity, storage, Databricks workspaces, Fabric capacities, Key Vaults, the lot — all expressed as code, versioned in Git, deployed through reviewed pipelines. The reason it's on this page is simple: the difference between "we can stand up a client environment this week" and "we need a month" is almost always whether the infrastructure is in code or in someone's browser tab history.
LLM-assisted module authoring with the project context loaded — useful for boilerplate and first-pass documentation. AI-generated infrastructure changes do not bypass plan, review or approval.
Azure DevOps or GitHub Actions. terraform fmt + terraform validate + terraform plan on every PR. Apply only on merge to main, with environment-specific approvers gating dev → UAT → prod. Policy-as-code (Azure Policy, Open Policy Agent) blocks dangerous changes. State backed up, locked and audited.
.NET is the backbone of our product engineering — the platform behind Netgíró (since 2013, now on .NET 9) and Straumur (50M+ transactions in its first 18 months). ASP.NET Core for APIs and portals, EF Core for data access, Hangfire for background processing, MSSQL or PostgreSQL underneath. The reason it's on this page: when a payments platform has to survive a decade of feature growth, regulator scrutiny and traffic spikes, the framework choice matters less than the discipline around it — but a mature, typed, long-supported platform makes that discipline much cheaper.
LLM-assisted code generation under spec-driven development — specification first, tests second, generated code third. Adversarial review on anything an LLM produced; nothing merges without a senior engineer.
Azure DevOps or GitHub Actions. Build + unit tests + integration tests on every PR; Docker images promoted dev → UAT → prod with environment-specific approvers. Database migrations applied through the same gated pipeline as code.
Warp is a distributed job processing and message queue for .NET 10 built by Moberg. Pub/sub messaging, orchestrated background jobs, and in-memory request dispatch — integrated with an existing EF Core DbContext via the transactional outbox pattern, so business data and jobs commit in the same transaction. No Redis, no RabbitMQ, no separate scheduler — just PostgreSQL or SQL Server.
IAsyncEnumerable<T> for async sequences.LISTEN/NOTIFY or SQL Server Service Broker./warp — live throughput, job detail, exception traces, batch progress, recurring history. Dashboard front-end built in React.React is our default for product front-ends — merchant portals, admin consoles, customer-facing web apps. Straumur's entire portal suite runs on it. We treat the front-end as a first-class engineering artefact: typed, tested, componentised — not a styling afterthought bolted onto an API.
LLM-assisted component scaffolding and test generation within the design-system constraints. Generated UI code goes through the same review and accessibility checks as hand-written code.
Lint + type-check + unit tests on every PR. Preview deployments per branch for design review. Production builds promoted through the same gated pipeline as the backend.
Native is the right call when the product depends on the platform itself — biometrics, secure enclave, NFC, deep OS integrations, App Clips / Instant Apps, background processing that has to actually work. Swift / SwiftUI on iOS, Kotlin / Jetpack Compose on Android. Same payments-grade discipline as our .NET work: typed contracts with the backend, offline-tolerant flows, signed builds out of CI only.
UserDefaults or SharedPreferences.LLM-assisted scaffolding for SwiftUI / Compose screens, view models and unit tests within the existing design system. On-device intelligence (Core ML, ML Kit) when the data shouldn't leave the device. Generated code reviewed adversarially — nothing ships without a senior engineer.
Xcode Cloud / GitHub Actions for iOS, GitHub Actions / Gradle for Android. Lint + unit tests + UI tests per PR. Signed builds produced in CI only — signing keys never on a developer laptop. TestFlight / Play Internal Testing for UAT; staged rollouts to production gated by crash-free-session thresholds.
Cross-platform mobile from one C# codebase — the Netgíró consumer app, used daily across Iceland, runs on it. MAUI lets the mobile app share models, validation and API clients with the backend, which is exactly what you want when the backend is the system of record for payments.
LLM-assisted UI and binding code generation, plus test-device matrix triage. Same rule as everywhere: generated code is reviewed adversarially before it ships.
Build + unit tests per PR; signed builds produced in CI only. Store deployments via staged rollout with crash-rate gates before full release.
Opinionated defaults. Adversarial review of anything AI-generated. CI gates that don't negotiate.
Whatever is on your mind — a plan, a question, a challenge — we're happy to think it through with you.
Get in Touch