Functions in programming languages are incredibly useful: They are designed to take input parameters, do something with them, and output a result. This conforms to the well-known IPO model (Input, Process, Output). However some developers tend to interrupt that process, making it harder to follow and thus understand a function, and risking evil and nasty bugs.

Let’s see why not always all roads lead to Rome.

Picture by Markus Winkler (text modified by me)

Understanding functions of other developers

Imagine you need to understand the source code of someone else’s function. This is totally not rare, because whenever you add something to a project, or even use an external library, you have to…


Being a huge fan of Alpine Linux, I’m using it in a lot of my built Docker images. The resulting images are very small and minimal, so ideal for containerized environments.

Recently I wanted to build Docker images for a dated project. But Alpine’s package manager apk failed, and the reason surprised me.

What’s one of the biggest benefits of Docker? Clearly reproducibility: It doesn’t matter where you run your images, or when you run them: The result will always be the same.

Reproducibility isn’t only important at runtime, though. …


I’m a software developer, and part of that is receiving requests for all kind of things, including ideas, feature requests and bugs — all day long.

I generally try to stay away from phones or voice communication in general, because they block my focus 100%. Instead I enjoy text communication the most, mainly through Slack and Trello. Rarely e-mail too, but that’s almost only used for receiving invoices and other “legal” stuff.

Arghhh the bubbles!

The thing with text communication is receiving notifications. My dilemma with it is that when I turn notifications off, I fear that I miss important information. …


In this article you’ll learn how to create one Django settings.py file that you can use everywhere and that you don’t have to touch across runtime environments. No matter if you are targeting production, staging, development, Docker deployments or whatever: configuring your apps won’t be a factor anymore. Let’s start!

Popular configuration approaches

Let’s quickly take a look at two very popular approaches at first.

From what I’ve seen the most popular approach is using one settings file for each runtime environment: development.py, staging.py, production.py…

Not a bad thing to do at all. However you get a lot of duplicated code in your…


I’m in love. Still. And for almost 10 years already. We’ve been through thick and thin. Oh my dear Vim code editor, you never let me down, and I promise I will continue on my conversion mission for growing our beloved family, for making more people feel the absolute enlightment.

What is Vim?!?!

I’m sure you must be kidding … No? Head over to Vim Casts and get yourself an idea of Vim (the best editor in the world).

Isn’t this a bit nerdy?

You are so right, and I sincerely ask you to not tell my wife about this article. She might question our marriage.

But in…


Developers usually like to make their lives easy, so tons of libraries and helpers exist to assist with development, iteration speed and code safety.

In some cases, though, you pay a price for that, and in my case it’s Apollo Client that I put my hope into, but from which I stepped back again after trying it.

Read on!

My use case for Apollo Client

I’m in the middle of creating a new online course (check my Udemy profile if you’re German) that’s about creating nice GraphQL backends, and I want my future trainees to have a nice web app that they can use to test…


The REST paradigm is a very popular way of writing web APIs nowadays. But what’s so great about it? Here are some important reasons:

  • Easy to understand.
  • Makes use of the well supported and standardized HTTP.
  • Simplicity due to a very limited amount of possible operations.
  • Focuses on resources, not on actions.

To avoid commonly made mistakes or bad design decisions and improve the overall design and effectiveness of your REST APIs, I’ve written down my personal “golden” rules when it comes to designing my REST APIs. Enjoy!

1. The choice of verbs matters


You all know about GraphQL, right? It’s the “new” (actually not new, but things that hype recently just feel like that) hotness when it comes to data exchange through APIs on the web .

I’ve got a pretty good understanding of RESTful APIs, and I’m very used to my current backend stack: Python + Django + Django REST Framework. I created some nifty utility classes that allow for saving nested resources in one go (because we all love transaction safety) and retrieving nested resources contextually — “GraphQL Lite”, so to say.

Why I hate-love REST

Basically everything works, if there weren’t the well-known flaws:


Update: As Stefano Crosta mentioned in the comments, you can simply compare the dictionaries like you would with everything else:

equal = {"a": "b"} == {"a": "b"}

That said, the following solution is useless. :-)

Today I was in need of comparing two Python dictionaries with each other — including nested dictionaries.

I searched the web for solutions on how to do that properly, and found a lot of recursive approaches, all trying to respect the various data types Python provides (especially lists and dictionaries, optionally (deeply) nested).

If you are not concerned too much about super lightning-fast speed (read: time-critical environments), you can simply serialize the dictionaries to JSON and compare them. …

Stefan Schindler

Pythonista & Vim addict

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store