Software development Denmark

Software development for companies whose workflows no standard tool fits.

UnderStack designs and builds business software for companies in Denmark and Europe: internal systems, customer platforms, integrations and SaaS products that follow the way the work is really done.

If you would prefer to talk through more details, we can find a time that works.

01

Who it is for and what it fixes

Software projects usually start with a workaround that has grown too large. An operations manager keeps the real plan in a spreadsheet because the official system cannot express it. A logistics company tracks jobs in email threads and phone calls. A training provider handles enrolments, invoices and certificates by hand in three different tools. An expert-assessment firm depends on an old PHP application that nobody dares to change. A founder has a product idea and needs a first version that real customers can use. What these situations share is double data entry, no single source of truth, permissions that are too coarse, and reports assembled manually every month. We replace the workaround with a system that models the actual process, so the data is entered once and is available to the people who need it.

02

What we build

We take responsibility for the whole product, from the data model to the screen the user sees. The examples below come from our own products and client work.

  • Internal systems and administration tools
  • Dashboards and operational reporting
  • APIs and integrations between existing systems
  • Multi-tenant SaaS products with companies, locations and roles
  • Modernisation of legacy systems, for example PHP to TypeScript
  • Customer portals, such as issue reporting with urgency levels

03

How a software project runs

The risk in a software project is building the wrong thing well. The process is designed to find that out early and cheaply.

  1. 1Scope: we map users, workflows, data and the systems that must be connected. You receive a written scope with the first release clearly separated from later ideas, and a quote for that release.
  2. 2Architecture and UX: data model, roles and permissions, and the main screens as clickable flows. You receive a description of the architecture and the screens to approve before development starts.
  3. 3Development: frontend, backend and integrations are built in short iterations. You receive a working version in a preview environment after each iteration and can test it with real cases.
  4. 4Launch: data migration, user accounts, final tests and deployment to production. You receive the running system and a walkthrough for the people who will use it.
  5. 5Operation and improvement: fixes and new features are prioritised from real use. Clients report issues through a ticket portal with an urgency level, so urgent problems are handled first.

04

Technology and technical decisions

We write TypeScript on both sides of the application: React in the browser and Node.js on the server, so one type system covers the whole product and many errors are caught before the code runs. Data lives in PostgreSQL. GastroApp, our restaurant operations product, uses a REST API, the Prisma ORM, token-based authentication and role-based permissions on a multi-tenant model in which a company has several locations and each user is authorised for selected ones. Lighter APIs, such as the order and account endpoints of this website, run on Cloudflare Workers with serverless Postgres. Payments, transactional email and file storage are integrated through the providers' own APIs rather than plugins. Automated tests and a type check run before every deployment, and deployment happens from the Git repository. We choose proven components over novelty, because business software is maintained for years.

React
TypeScript
Node.js

05

What a good first release looks like

The first release should be small enough to finish and complete enough to be used every day. In practice that means one core workflow from start to end, the roles that take part in it, the data it needs and the one integration without which it would create double work. Everything else goes on a list for later. This is not a way of delivering less. A system that is used daily produces better requirements than any workshop, and the second release is planned from what people actually do in the first. It also keeps the budget under your control, because each step is quoted and approved separately.

06

Budget, timeline and when not to build

Cost follows the number of user roles, the data model, the integrations and how much of the process has to be handled in the first release. We do not publish price ranges, because a number without a scope would mislead you. Our guide to software development costs in Denmark describes the drivers and how to budget in stages. Custom software is also not always the answer: if a standard product covers the process well, buying it is cheaper and faster, and we will say so. The comparison of custom software and SaaS explains where the line usually falls.

Questions and answers

How much does software development cost in Denmark?

It depends on scope, user roles, integrations, data and how long the system must be maintained. We define a small first release, quote that, and expand based on real use. The cost guide linked below explains the main drivers.

Can you take over or modernise an existing system?

Yes. For ASEPCO in Mendoza, Argentina, UnderStack is modernising the Peritar platform from legacy PHP to TypeScript, including frontend, backend and interface. The work is ongoing and is done step by step while the platform stays in use.

Who will work on our project?

Diego Posleman designs and builds the system himself. You talk directly to the person who writes the code, without account managers or handovers between teams.

Can we see your code quality before we decide?

Yes. Selected code is public on GitHub under UnderStack-Dk, including the code of this website. You can read it before signing anything.

How do we start if the requirements are not clear yet?

Send a short description of the problem, the people involved and the tools you use today. The first step is a scope phase in which the requirements are written down and the first release is cut to the smallest version that is useful.

What happens after the system is launched?

Work continues as improvement iterations based on how the system is used. Issues are reported through a ticket portal where each report gets a reference and an urgency level.