My Remote Training Setup

2020-11-09

A fellow trainer asked me some questions about my remote training setup, especially:

  • The technical setup (hardware and software)
  • How I keep the training interactive, even though it is remote

So, here is my setup and how I currently run those trainings…

Read More...

The Business Case for Improving Agile Engineering Practices

2020-10-24

Should companies invest in agile engineering practices—training people on their engineering teams and giving them time to improve? And if they should do that, how much should they invest?

In this article, you will learn why it makes sense for companies—from a business point of view!—to allow their developers to grow professionally, to help them grow and to invest time and money in ways to improve the skills and practices of their teams.

Read More...

Using Mocks to Test Untestable Code - Don't do That!

2020-07-20

When we write interaction-based tests, using mocks or spies, we make it harder to change those interactions later (*). We make it harder to do some kinds of refactoring! But does it matter?

Not necessarily - there are ways to use those test doubles so that the benefits outweigh the cost. But when you use them to write tests for a bad design - for code that’s hard to test - you are doing it wrong.

And your tests will come back and bite you later.

Read More...

Git Commit Messages: What is Different Now?

2020-07-07

Over the years, I have been trying different ways of writing commit messages - And I now think that it’s best to write a present tense commit messages that describes the new capabilities of the system I am working on.

Let me explain…

Read More...

Naming Intermediate Results, Shortcut Operators and Closures

2020-06-24

In the chapter “Naming Things” of my book about “Agile Engineering Practices”, I wrote that you should name intermediate results (I will link the whole sample chapter at the end of this blog post).

But sometimes, it’s not that easy…

Read More...

TDD: Too Simple to Break

2020-04-20

In my TDD trainings, I sometimes say that I do not test code that is “too simple to break”; Code where:

  1. The chance of the code breaking is very low
  2. If the code breaks, we would see immediately

What do I mean by that? In this blog post, I’m going to explain…

Read More...

Spring and Isomorphic React 4: Render Data on the Server Side

2020-04-06

In the last three parts of this series, I wrote about how one can use the webpack’ed version of a ReactJS application as a template engine for spring boot, how routing and navigation can work on the server side and how to improve the first-load performance of this app.

There is one thing missing in this application: The server side rendering does not use any dynamic data at all yet. With this blog post, I want to change that: I want to show you how the server can pre-render data that the client would usually fetch dynamically.

Read More...

Spring and Isomorphic React 3: First-Load Performance

2020-03-30

In the first two parts of this series, I wrote about how to use reactjs together with spring boot on a GraalVM and how to use the same routing / navigation on the server side and in the browser.

Today, I want to look into whether rendering on the server side is even worth it. TL;DR: Out-of-the-box, the improvement in time-to-first-render was not that that much. But with a few tricks, I was able to reduce the time by ~60%.

Read More...

Spring and Isomorphic React 2: React Router

2020-03-25

In my last blog post, I wrote about how I am using ReactJS as a template engine for spring boot. I am running the server side application on GraalVM, and my Spring controller uses ReactJS to render HTML. In the browser, the JavaScript will hydrate the components that have been rendered by the server.

This worked well for the simple example app that I had. But what about navigation? We need the same routing on the server side and on the client side, otherwise the server would render the wrong content when the user reloads a page.

And here’s how I did that with react-router…

Read More...

Spring and Isomorphic React 1: Setup with GraalVM

2020-03-17

Since our country is in lockdown now and I cannot (and do not want to) continue with my usual videos, here’s a “normal” blog post about some fun thing I was trying recently. I wanted to use reactjs (TypeScript) as a template engine for server-side rendering in spring boot (Kotlin) so that…

  • I can use the client-side app created by create-react-app (almost) without modification
  • I can still run the react-app in standalone mode with npm start
  • The app works exactly the same when I open it from the spring boot server
  • I can use all modern JavaScript features
  • Routing works exactly the same on the server-side and on the client side
  • REST calls are only done when the JS scripts are running on the client side, otherwise they are direct calls to Java methods

I am not there yet. But I already got the first four bullet points covered, and I am working on the fifth. So, here is what I did so far…

Read More...