🇨🇳 FLMN kindly translated this to Chinese here.

I’ve been programming since 1999 and this year I’ve officially coded for 20+ years. I started with Basic but soon jumped into Pascal and C and then learned object oriented programming (OOP) with Delphi and C++. In 2006 I started with Java and in 2011 I started with JavaScript. I’ve worked with a wide range of businesses from robotics, fin tech, med tech to media and telecom. Sometimes I had a different hat as a researcher, CTO, TPM (technical product manager), teacher, system architect or TL (technical leader) but I’ve always been…


Any complex and flexible algorithm reacts to configs to customize software behavior. In this article we look at different types of config and when to use each. We also touch on a light weight auditable runtime configuration system that has been in production for several years configuring millions of web requests per day.

Static config

The simplest and most predictable configs are the ones that are statically baked into the code. These are usually easy to unit test because they don’t change after the software is deployed.

Static configs provide great predictability. For example in the case of an incident, one can…


A tale of evolution

When the software is successful, it usually grows in size and complexity but the brain of humans behind it, doesn’t!

Adding more humans may slightly improve the situation but it has its limits. A better solution is to divide the software into logical pieces small enough for a few humans to cope with and conquer the complexity by integrating all these pieces together.

There’s a limit to how much complexity even a group of humans can handle

This division is usually guided by two main tenets:

  • Separation of concerns: group relevant pieces together
  • Loose coupling: minimize the interaction surface between those parts to allow internal change with minimal external consequences


a person refusing a meal with a title “Risk Appetite”
image source: wikipedia

Over the past 2 decades I’ve had the chance to develop software for a wide range of businesses: robotics, insurance, telecom, online retail, fintech, medtech, media and my own startup. Regardless of the diverse range of products and technologies, in my observation there’s a symbiotic relationship:

  • Products shape the people: The type of product has a strong influence on what type of professionals find meaning in contributing to it. Sure people join and leave all the time, but the type of person who stays longer or has an influence usually has an interest deeper than the paycheck. This is more…


I work at the Core team behind some of the top 10 most visited sites in Scandinavia (Sweden & Norway). The product itself is a white label platform to build news sites. Its implementation is governed as an inner source with a community of around 150+ employees and consultants (I have previously written about how this community came to be).

In less than 3 years we went from 1 site to 20+. This growth had deep implications from the way we collaborate to the way we ensure scalability, security and reliability.

Setup

Traditionally the developer teams and DevOps teamd live in slightly different worlds with different concerns

Before digging into the processes, one fact needs to…


I joined Schibsted back in 2016 when the relatively new Products and Technology (SPT) unit was filled with ambitious, smart and visionary people. There was a special energy in the company those days. I was happy. I learned a lot over the past 5 years. Anyone who has been at the same place for too long would tell you:

The pace of learning slows down over time.

I artificially prolonged this period by swtiching teams a couple of times to work on new challenges.

Changing internally can improve learning

Media

Schibsted has many business areas from news sites to marketplaces to financial services and even a…


Using the potentials of a big company to solve some of its collaboration challenges

Large companies are usually comprised of many teams — each focusing on a subset of the problem domain.

Autonomy vs collaboration

To increase agility the company may give autonomy to the teams to decide their work process, tooling, or even defining their own scope. The side effect is that if there is too much autonomy, the teams may grow apart from each other and develop “silos”.

At its extreme, domain knowledge hardly leaves the borders of the team silos and external ideas are dismissed with the “Not Invented Here” syndrome (NIH).

Stuck employees

If the company is doing well for many years, it’s possible for…


Image sourced from Pexels.com

A Array.map() is a very useful function but, unfortunately, it only works with synchronous functions. A simple workaround for using async map functions is to use Promose.all() or its more tolerant brother Promise.allSettled():

It works like this: the .map() will convert each array item to a promise, so we’ll end up with an array of promises to resolve. There are two ways of doing this:

  • Promise.all() throws if the map function throws (MDN)
  • Promise.allSettled() runs the map function for the whole array even if sometimes it throws (MDN)

Therefore, the output of the .allSettled() is an array of objects…


A visualization of anti-growth mindset

Career ladder is a great tool for cultivating growth mindset in an organization:

  • It clarifies the promotion criteria transparently and advocates meritocracy
  • It aligns personal growth with organizational growth
  • It reduces churn by challenging long term employees
  • It sets examples of good behavior and inspires leadership

Unfortunately many companies fail to take full advantage of this tool. Let’s visualize some of the common mistakes.

Hidden


a snapshot of the terminal showing the output of env dash dash help command

JavaScript is an interpreted language and its source code needs to be fed to some interpreter to run. If you want to run a JavaScript file using Node.js, you normally run this command:

$ node yourfile.js

By typing the name of the interpreter (node), you are explicitly telling the shell how to run your script.

But that knowledge can be put inside the script itself so it can be run directly as if it was a binary:

$ ./yourfile.js

This will work only if you have execution permission on that file (you can set that with chmod u+x yourfile.js

Alex Ewerlöf

Knowledge Worker, MSc Systems Engineering, Tech Lead, Web Developer

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