- sharing is learning

function share(knowledge){ return share(++knowledge) }

Testing a Koa application with supertest using async/await

I’ve been playing around with refactoring a Koa application to use modern JavaScript constructs like async, await => and do away with generators etc.

In doing so I had an epic battle with mocha, monk and supertest to use async / await etc. I finally found a good structure for this purpose that I wanted to share.

Read on ...

Refactoring a Koa app (part V) - refactoring the root app

This is the fifth and last post in a series where I refactor an old (4 years) code base (an API written in Koa) to modern Javascript and tools.

Here are all the posts in the series

Read on ...

Refactoring a Koa app (part IV) - update the production code

This is the fourth post in a series where I refactor an old (4 years) code base (an API written in Koa) to modern Javascript and tools.

Here are all the posts in the series

Read on ...

Refactoring a Koa app (part III) - async tests

This is the third post in a series where I refactor an old (4 years) code base (an API written in Koa) to modern Javascript and tools.

Here are all the posts in the series

Read on ...

Refactoring a Koa app (part II) - refactoring the tests

This is the second post in a series where I refactor an old (4 years) code base (an API written in Koa) to modern Javascript and tools.

Here are all the posts in the series

Read on ...

Refactoring a Koa app - or how I learned a lot about modern JavaScript while refactoring an old app

I have learned so much by following the Koa Js community and framework over the years. My first post on the topic was written in March 2014, when Koa was just a little tiny bird trying out its wings (look up that reference…).

From that point I’ve written many posts, done a few screencasts for fun and other for profit.

4 years (MY GOD!) is a long period but in the JavaScript world it’s eons of time. I noticed that the other day when I refactored one of my later Koa applications into something more modern. I learned so much about the topics that I ran into, while upgrading my code and the resulting code was much more elegant, functional and understandable.

So… I thought I’d do it again. This time you can tag along. This post will be long, but hopefully worth it.

Read on ...

What are you going do when it's really important, then?

I have a very particular set of memories from my childhood, that revolves around me falling, hitting or otherwise hurting myself. If it was just a bruise my father often said to me:

How bad is it? Is it worth crying for, like you do now?

(I was probably exaggerating quite a lot). Of course, it was!

Tell me, what are you going to do if it really hurts, then?

That was maybe not pedagogically correct for a child in pain but it at least got me thinking. Indeed… what comes after screaming and crying? Could I turn this up? Would it make a difference? Would I get … yes, what was it I wanted, really? Maybe just a hug or comfort. Could I get that by other means of communication that the display I was putting on now?

Of course, 7-year old Marcus didn’t reflect on his behaviour this deeply. Hey, 44-year old Marcus barely does that. But at some clients, that thought comes back to me from time to time. In the way deadlines are communicated.

Read on ...

Thinking in flow - some recent thoughts

I talk a lot about flow these days and I’m continuously fascinated how many good things follow by shifting our focus to supporting a better, faster and smoother flow.

In this post, I just wanted to share a few thoughts that have been on my mind lately.

Read on ...

Priority 0 - we meet again

I once worked at a large company where they had so many priorities 1 features that they decided to introduce … bam-bam-ba-baaaa … Priority 0. But after a few minutes, we ended up with about 5 items in that category and we realized the ridiculousness of continue to do Priority -1 etc.

Today I saw this pattern in action again, and a new realization about a missed teaching opportunity washed over me. I wanted to share this with you in this post.

Read on ...

A simple diagram and some conversations on flow efficiency

The last couple of weeks I have been re-discovering an old diagram (eerm … sketch really). You can find it scribbled on close to every whiteboard in our office now. Because it opened a lot of interesting discussions on flow, flow efficiency and optimizations for value delivery.

I wanted to share this with you here, in a few iterations and also share some of the discussion that it triggered.

Read on ...

My top 10 books

I often give out a lot of books tips in lectures and workshops, so instead of me typing and find links everywhere, I thought I’d put together a list of them here.

There are only 10, so if one is added another one needs to leave. That said - they are in no particular order.

For each, I’ve given a short little review and comment on why I like the book.

Read on ...

Futurespective - put the past in front of you

“Wow - this release was awesome. So fast, almost no manual testing and only one bug found in testing,” Sarah exclaimed in joy.

“Yeah, but there was that one bug. It should be zero, huh?”, Marcus responded grumpily from his corner, without looking up from the screen.

“Also - there are still manual testing going on. It should be all automated,” John chimed in, unimpressed.

“Fast and fast … still our build runs in 8 minutes. That is a long time. Way too long if you ask me!” Alex sighed as she pointed to the build log on the screen.

Sarah went back to her desk. Her enthusiasm was gone.

I think we often miss the improvements we made by not looking back and appreciate the journey we made. If we only talk about what is still not great we lose track of how far we have come. This is in particular common among developers I’ve noticed, and even more so in teams that have been under a lot of pressure since they never got around to fixing that thing that we got promised to do 4 months ago….

I wanted to share just a thought about this that has proven helpful for some of those teams that I had the opportunity to talk to.

Read on ...

Review - The art of coaching

Just finished “The Art of Coaching”, by Jenny Bird and Sara Gornall, that taught me a great deal so I thought I’d write down some thoughts and comments.

I honestly don’t remember putting this book into my basket and was quite surprised when it arrived among some other books in my package. Hence I read the book with very open mind and curiosity.

Read on ...

Some thoughts on organizing a team of developers

Got a question in an email the other day, asking some advice. Nowadays when that happens I ask permission to publish the answer here to not waste keystrokes into the email-bin.

The question was from my friend Jonas, that works in a start-up that is growing rapidly. He kindly granted me permission to answer here. He was asking this (my translation):

We are on the brink of a substantial expansion and I was wondering if I could pick your brain on experiences and best practices for how to organize a team of developers.

We’re thinking about a team of 4-6 people that has responsibility for a specific part of the product. What roles and responsibilities should be in, or out, of the team?

And in a follow-up mail:

In particular, the product owner role and what that role does and doesn’t do. I like the PO very local and present, but many people seem to have the PO outside the team as an ordering function. For me, the PO is the one that maximizes the customer value, prioritize the backlog but also helps the team to reach their full potential.

Well… that was a very thoughtful and great question. Thank you for asking me. I’ll try to match the question with an answer at the same level.

Read on ...

Flow and dependencies

I’m talking less and less about agile and even lean, these days. Instead, the poison I’m selling now is flow. In all honesty, it might be better to put it like this:

Opening peoples eyes for the benefits focus on flowing work smoother and faster, alleviates discussions about lean and agile later.

Flow is an eye-opener and shifts your perspective. Things that previously was paramount (ensuring people are not idle, for example) becomes irrelevant or uninteresting. New ways, practices, and innovation quickly spur.

But also new problems occur. One of the most common ones is the fact that flow is severely hurt by tasks that have many dependencies. I think I talk to teams about 4-6 times a week about this.

In this post, I will offer a few thoughts on how to handle this type of situations.

Read on ...

Values and living them

As a consultant, you get to see many, different organizations and look deeply into what makes them tick. This is a great benefit of my job, but at the same time quite hard to find from time to time. The reason for that is that most organizations have very lofty and worthy values but what is lived out is something else.

But I’ve found… who am I kidding … stolen a way that make values more tangible and important in our everyday life. It’s a simple trick that you can start using tomorrow.

Read on ...

Summarizing and filtering data with QUERY and a Google Sheet drop-down

I had another opportunity to learn a thing or two about Google Sheets and it’s internal functions. Again. On a similar topic as last time.

This time around I had to summarise the data from 4 different sheets and then let the user filter the data dynamically.

To do this, I had to look up a lot of things, learn a little bit about the QUERY-function and then jump through some hoops. I write this down here so that I don’t have to learn this again. You can read it if you want to.

Read on ...

Some thoughts on backlogs

I was asked to join a team for a backlog grooming session. We went into the room and opened the backlog in JIRA. It was exactly 99 items long. Not too shabby, but still… 99!? Ninety-nine items of work we hadn’t done. Yet.

This of course triggered this jolly team to start singing and we soon where humming along:

In this post, I wanted to share how we cut the backlog in half in 45 minutes. And then share some thoughts on backlogs that I have running in my head.

Read on ...

Respecting slack time

As a consultant and coach, I find it very fascinating to see how the same topic has a tendency to arise in many different place and conversations I’m in. All of sudden everyone needs to chat about flow, or estimation or what-have-you.

I like telling stories, as a mean to teach and explain abstract concepts. Often when I’ve told a story once it has a way to surface back into conversations in the near future. I partly blame it on my limited imagination, but when it fits the conversation it’s interesting to notice how you tell the same thing several times a day.

The last couple of days people have been asking me about slack, and I’ve related a story about the pastor that married me and Elin. He was excellent in manage his own time and respected a good slack!

Read on ...

Create a dynamically updated chart in Google Sheets

When I started my blog, almost 12 years ago, I often wrote posts of things that I would need to look up again. Sure enough, I sometimes stumble into my own posts when searching for solutions to problems I have.

This post is one of those posts. I was asked to conduct a survey throughout our department and needed to do some slicing and dicing of the stats. I used Google Forms to collect the data and then did the analysis in Google Sheets.

It all came out pretty nice and allowed people throughout the department to drill down into the data in a quick and simple way.

Read on ...