Previously I described a process for developing software while trying to provide as much value and create understanding as early as possible.

How would one iteration of this process look like?

I’ll walk you through one iteration using the Go programming language while deliberately showing the steps more explicitly. In practice, many of these steps could be replaced by some external tools or libraries.

I’ll continue with the example from the previous post, an Issue Tracker.

The Simplified Process

  1. Structure Follows Value: find out what is the most valuable thing to implement right now.

Beginners often overwhelm their brain with decisions and things they need to do. Which usually turns into a mess of trying to implement everything at once. Alternatively, programmers end up making very short-sighted decisions that end up becoming problematic later.

The most important part of programming is that you cannot do everything at once. The human mind is very limited in how much it can process at a time. To combat this limitation, we need to build things piece-by-piece to ensure that everything will fit together nicely.

Speaking as a builder, if you start something, you must have a vision…

Why do we write programs in the first place? It’s easy to get lost in the technological details, but this is not the primary goal. This might sound obvious but, we need to provide value to people.

There is a central quality which is the root criterion of life and spirit in a man, a town, a building, or a wilderness. This quality is objective and precise, but it cannot be named.

- Christopher Alexander, “The Timeless Way of Building”

Understanding Value helps us understand why we are doing things in the first place. …

I’ve been optimizing Go code for a while and trying to improve my benchmarking game.

Let’s take a look at a simple example:

func BenchmarkReport(b *testing.B) {
for i := 0; i < b.N; i++ {
r := fmt.Sprintf("hello, world %d", 123)

Running go test -bench . will give us the result:

BenchmarkReport-32      20000000               107 ns/op

This might be enough for getting a rough estimate where you stand in terms of performance, but a more detailed output is required for optimization. Condensing everything into a single number is bound to be simplistic.

Let me introduce…

for Software Developers

I often get asked for recommendations. Here is a list of books and resources I vouch for because I’ve found them invaluable in my journey as a software engineer or have seen them greatly help others.

If you’ve never coded before, then my main recommendation is:

Learn Code The Hard Way course by Zed Shaw is one of those great starting places when you have never seen code before. It has plenty of good tips, tricks and exercises to get you started.

For little ones, playing around with Scratch and Sonic Pi is also great.

A few recommendations specifically for…

There are many ways code could be structured. I was pondering a lot what is the best way. I rather reached an unsatisfying conclusion — depending on the situation one could be better than some other. Structuring code means to slice up the program in different ways for better comprehension.

One of my major insights was:

When the code-base is less than 30,000 lines of code, then code organization isn’t a big hindrance in getting work done.

This number also suggests that you cannot draw any significant conclusions from code-bases that have less than 30K LOC (lines of code).


All the code can be found here

On reddit there was a question:

Before diving into answering it’s always useful to first dive into the question. It’s easy to lose track on what the actual problem is. Often by creating a better underlying model we can simplify or eliminate the problem altogether.

After a few questions I got that the input JSON looks like this (slightly simplified):

The goal of the program is to write code that computes with these values according to names. For example:

"Alpha" + "Gamma" = 25 float

We’ll ignore the multiplier in…

Yesterday my frustration meter with Medium-s code editing finally hit the limit. The problem has been described in multiple places. Just to describe why I’m annoyed with it.

First of all, there are quite a few ways of adding code to a, however all of them are frustrating or lacking in some way.

Code Blocks

First of all the integrated code blocks. In essence they look like this:

package mainfunc main() {
println("Hello World")

At least in theory. When you use tabs, this happens:

package mainfunc main() {
println("Hello World")

When you copy-paste from Visual Studio Code…

I have seen quite a few questions on how to setup a basic server and database in Go. I’ll show few versions, with each one handling more variability and more complex situations.

We are going to take a really small website, where you can submit comments and it will display them. We will cover interaction with the server and database, however we will mostly ignore the different ways of rendering the content and writing business logic. Also, you should probably have some familiarity with Go databases and servers.

You can imagine this as an example of “Infinite Possibilities” exercise.



This question was bothering me a long time. I mean there are often suggestions for readability such as, don’t mix business and database layer or don’t mix abstraction layers.

On the surface, it seems like an easy question, and it looks like there are answers to that question:

In object-oriented design, a layer is a group of classes that have the same set of link-time module dependencies to other modules. In other words, a layer is a group of reusable components that are reusable in similar circumstances. In programming languages, the layer distinction is often expressed as “import” dependencies between…

Egon Elbre

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