Arkiv for Kategori: dev

The NRK logo and the Terraform logo side by side.

The road to NRK’s private Terraform registry

NRK is a large technology organisation with its own platform team that runs all the shared IT infrastructure and helps other teams being able to operate their own. To make all the infrastructure as code (IaC) repositories across the organisation simpler and up to standards, we develop and share reusable Terraform modules. This is a […]

Output from Quibble.Xunit

Quibbling over JSON

I work with JSON a lot. For instance, I write tests for the TV Streaming API that serves JSON to our clients. In those tests, I typically want to verify that the API returns a JSON response that matches my expectations. For instance, say I expect the JSON response for given a TV show to […]

Feature toggling transient errors in load tests

tl;dr; When testing resiliency we seek to understand how an application reacts to simulated transient errors under high load and how it can gracefully recover. If we tie the configuration of transient-error simulation to the application in such a way that we have to redeploy to change configuration, we will reset memory, TCP state, threads […]

How our 99th percentile response time went from 4000 ms to sub 10 ms

Performance. We all know the importance of it. We all have this innate sense that any system can and should do better. Yet again, so many questions arise. Where do you start? How do you measure it? Do you aim at it deliberately or do you bet on improved performance as a side effect? Let […]

Sign language interpreation of the Eurovision Song Contest

On architecture, sixth post: Technically correct

Tl;dr; We tried to solve a problem related to interpreted TV-shows with a purely technical perspective and ended up causing modelling debt and confusing ourselves and our users in the process. We had to delete the solution, collaborate with UX and redo the entire feature.      The problem at hand NRK is producing content […]

Instrumentation Testing of Android Apps

Mobile applications are not easy to quality control. As the system grows in complexity, it becomes increasingly easy to break a portion of the app and overlook this during manual testing sessions. This holds true for both UI elements and the data they present. I will be focusing on how we do instrumentation testing at […]


On architecture, fifth post: How I got programming to an interface wrong

tl;dr API documentation is about defining an interface rather than documenting an implementation. We write API documentation by hand using OpenAPI and it is working well for us. The NRK TV team spent quite a long time finding a way to write documentation that works for us. I think there are mainly three misconceptions about […]

On architecture, fourth post: A change of perspective

Tl;dr; In the previous blog-posts I have argued for a functional decomposition strategy. Now I will look at an example of how not partitioning by functionality, but rather by entities, has lead to a rapid growth in complexity in our API. As I discussed in my previous post, our philosophy for new API endpoints is […]

Photo by Ricardo Gomez Angel

On architecture, third post: Composing bounded contexts

Earlier I discussed how we identify bounded contexts. The example I used was implementing a system that only deals with the subdomain of desking the frontpage in a single bounded context. In this post I will discuss how we unite bounded contexts with HAL. We attempt to split the application into bounded contexts to better […]


Improved developer experience with Roslyn Code Analyzers

Lately I have been experimenting with Roslyn Code Analyzers and Code Fixes with Einar W. Høst, and we have found it to be a very nice addition to unit tests and static code analysis with NDepend. What I particularly like is the immediate developer feedback and possibility to add code suggestions for other developers. tl;dr […]

How we talk about things in systems

– Max, it’s time for dinner!
Suddenly the kid next door is at your doorstep ­– along with half the neighborhood’s dogs.

Without naming things, we’re unable to communicate. This article discusses different methods for providing identifiers to objects in systems.

On architecture, 2nd post: Desking of NRK Radio

The first post I wrote on architecture is really abstract, vague and lacking of context. In this blog post I will discuss the principles of alignment between problem space vs solution space, autonomous teams and how strategy should be the driver for architecture. Instead of being general I will discuss a recent case-study from NRK Radio. […]

Lean Enterprise: How High Performance Organizations Innovate at Scale

On architecture, 1st post: The pretentious post

The architect is possibly the most disputed and poorest understood role in software. We do not even agree what architecture is, so how could we possibly agree on what an architect is supposed to do. Developers frequently challenge the idea that we need architects at all. If we do not really know what an architect […]

Undoing the harm of layers

As we approach a new problem we look for strategies to decompose that problem. The primary axis we choose for decomposition is fundamental to the architecture of the system we build. Technological boundaries are easy to identify in the codebase, and as such it is a tempting decomposition strategy. Strategies such as domain-driven design argue […]

Securing whistleblowers

Thanks to the Tor network, sources wary of surveillance may get in touch with NRK anonymously. By using our SecureDrop whistleblower service, people can contact us without being easily traced by a third party.