• Simple service, complex system

    Microservice architecture is good in forcing the implementation to have clear interfaces and clear responsibilities. Extending the system is straightforward and interruption less. The system is easy to make scalable and highly available. Updating a service can be done independently and in ways that has no impact on the rest of the system. But microservice…

  • One test to rule them all

    To test a unit thoroughly, one has to throw different sort of things at the unit to make sure it behaves well in different situations. Throw it with some – or all – normal things, with a bunch of abnormal things, and finally with a few why-on-earth-would-you-do-that things to see how it reacts. With all…

  • The constraints of everything

    in

    To build a pyramid, you need resources like employees, tools, and huge rocks. And then you need time. Even with unlimited resources it will take time to build the pyramid, although more resources might reduce the time. Then there’s the target – what sort of pyramid is to be built. The effort to build a…

  • The number of pieces in a software puzzle

    One of the fundamental architectural decision when designing software is to decide how the software is delivered. Is it delivered in a single, complete, self-sufficient package or will it be delivered in multiple small packages that are independent but interacting with each other. This is the decision between monolithic and microservice architecture. Both of the…

  • Scaled agile or shrunken waterfall

    in

    As agile gained popularity, for example with the popularity of scrum framework, people started to realize that it is not that simple to apply agile frameworks in a corporate world. One of the biggest problem was, of course, what to do with all the project and program managers. That’s why god created scaled agile frameworks…

  • Software architecture – wait what?

    Architecture. An important, although confusing and vague, but still commonly used, term in software. architecture: The fundamental organization of a system embodied in its components, their relationships to each other, and to the environment, and the principles guiding its design and evolution. Every software has an architecture, whether it’s well thought or not, well defined…

  • Follow your own targets

    in

    Metrics are a good tool for data-driven decision making. Standardized metrics and metric sets, such as DORA, have become popular with tech-managers. Maybe the idea of the metrics has been spread with (the same) consultants in the field, or maybe the managers just like comparing their things to the things of others… Well-defined metrics enable…

  • The trouble with isolation

    A mock object is by definition not a real object. It implies that it’s possible that the expectations set in the mock object for a unit test do not correlate with the real object, and that means that the test may be making sure that the tested unit is malfunctioning. This may happen with the…

  • The expectation of mocks

    Mocks in unit testing are quite popular in at least some circles. Mocks are surely a powerful tool for unit testing, and they really enable having a great unit testing code coverage, but there’s a catch or a few with using them. Mocks may introduce a burden of maintenance if the mocks have bad expectations…

  • The stuntmen of unit testing – the test doubles

    Test doubles are fake implementations which are used to replace real implementation during testing, for example to isolate the tested entity from the rest of the system. This enables testing without the use of real databases, services, and other complex and fragile dependencies – and let’s one focus the testing to the entity one is…