marcusoft.net - sharing is learning


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

Bash scripting to check the status of 100 repositories


At </salt> we have a lot of labs and tests. Last time I counted we just passed 100 repositories. And it’s dawned on me that all of those need some love and attention from time to time. Stuff moves pretty fast in the JavaScript world and dependencies might start to act up etc.

At least you’d want to check out the code, do an installation of dependencies and then run the test and see that you get the expected behavior. Preferably you’d also wanna see that we don’t have deprecated dependencies or broken stuff. And probably check this, at least once before each course.

This is what scripts are made for, right? Automate the boring stuff.

The only problem is that since we are teaching a lot of different technologies and tools, not two repositories are the same; this one uses Docker and this is actually just text, and over here we have one that is purely for CSS-stuff. In one repository we should have 4 failing tests but no linting errors. In the other, we need 42 liting errors but no failing tests. Etc, etc, etc. It’s nigh on impossible to write a script that checks this for me. It’s pretty much custom code and checks in every repository.

This problem pushed me to investigate how we could automate this process with bash scripts. I learned a lot and wanted to share a bit.

Read on ...

Building teams - where our training starts


At School of Applied Technology, our accelerated career program is running in small teams, using Mob Programming. We have found that this gives us the most and best learning in a short amount of time. In this setup the tight group that you are in becomes both your best teachers but also, from time to time, you will be the teacher others in the group.

Read on ...

Remote work, transparency, and feedback


In these very strange times, we see a lot of change; some are really sad, devastating, and depressing. While others are encouraging and celebrate humankind’s will and capacity to survive and overcome.

Others still, are just interesting to observe and learn from. These last weeks I’ve noticed two new realizations about two of my favorite topics; feedback and transparency. They too, it turns out, are affected by the changes in our ways of life due to the corona pandemic we are living under now.

This post reflects a few thoughts and ramblings that I’ve had in my head for some time. I’m not hoping to solve world problems here, but just get some reasoning down.

Read on ...

Experience report: first week of 2 x 5 mobs going remote


I’ve just experienced something fantastic and a real testament to what amazing people can do when given the room to be amazing (and have an apparent and real reason to do so)

A week back, our accelerated career program; School of Applied Technology - the world’s toughest coding bootcamp were running five mob programming teams (that we call mobs) in two locations. This is how we teach and it has given us amazing results so far.

But it’s not cool being the “let’s sit as close together as possible for 8 h per day”-teacher in times of Covid-19 infection spreading across the world.

So in the middle of last week we started to make plans. Last Friday we had a “just in case”-lecture on tooling for our 5 Amsterdam mobs. Then during the weekend, things escalated in Sweden and we decided to move over the 5 Stockholm mobs as well (yes, without training them). Monday, 6 days ago as I write this, we had moved everyone into our remote-only platform.

And you know what? Just about everyone found it not only useable but actually very useful and, in some reports, even better than before.

In this blog post, I wanted to share our suggested platform setup and some findings that our mobs shared in our weekly retrospective/demo session last Friday.

And before I write a word more: this was not my doing. It was the amazing instructor team of Salt (Mies, Zach, Daniel, Levy, and Adam) setting the stage and then the brilliant developers of Salt building their own applied practices on top of that. Yes - just about every mob did it differently and I loved it.

Read on ...

Listing and cloning private GitHub repos - some fun with bash and curl


My current role is awesome - I get do do some agile coaching, quite a lot of teaching, reading up on new tech and from time to time some programming.

Yesterday evening someone just blurted out: what if all of us died at once?! All the code and documentation would be hidden in a cloud somewhere and we will not be able to get it.

That cloud is GitHub and I’m sure it would be safe and that the risk that we all die at the same time is relatively low. Then again - I have booked a raw chicken tasting for our next offsite …

Just kidding - but when that was said my programmer-self sprung to life and I deviced, in my head, a simple script to make an offline copy.

This post describes that script. Oh - I only had 30 minutes spare time to do it in. That was my timebox and I actually managed to pull it off. The finished script is about 5 lines of code… but I’m still proud.

Read on ...

How do I kanbanize my 300 items backlog - a response


I got a question, on twitter, the other week about how to handle a long list of backlog items on a kanban board. Here’s the original tweet:

And my adequate translation. The tweet by “The Doubter”

Hey @marcusoftnet. We got a backlog of 300+ un-organised and unprioritized stories that will pass through our #kanban board the coming 10 months. How can we “group” stories to simplify refinement and dependencies between stories?

– by epics?

– funktional areas?

I got his permission to repond here on the blog. It’s a response and not an (and even less the) answer.

Read on ...

getcwd: cannot access parent directories: No such file or directory


The other day we started a new course here at </salt> And the first day we are used to seeing some confusion from the developers and the odd strange, wrongly configured computer (by us). But the error in the title of this blog post:

 getcwd: cannot access parent directories: No such file or directory

had me scratching my head for quite some time. Until I realized that the error message states what was wrong.

Read on ...

How we start with trust and vulnerable in our developer training


In the </salt> accelerated learning program we emphasizes learning in groups throughout the entire boot camp. We do this through the use of mob programming that is not only a great way to solve problems together but also puts learning front and center. I’ve yet to sit down with any mob and not learn a new thing (I’ve tried 40+ so far.)

But there’s a thing that needs to be in place in order for the learning to be allowed to flow freely; psychological safety. We try to create a psychological safe space through two tools:

  • Trust
  • Vulnerability

Let me, very breifly, expand on how we use this in our training.

Read on ...

Applied learning - things noticed


I work for a developer accelerated career program. I have (together with Jakob Leczinsky) created a training material that takes people with no professional development experience into professional developers in 3 months. We have now run 4 courses and found jobs for about 100 people. All of them have got rave reviews from our clients, top-line software companies in Stockholm.

But how?! This is quite provocative, even for me. I spent 4 years in university (Go DSV!) - surely you can’t learn as much in 3 months.

How can this work? Because it quite obviously does. I have 100 devs telling me so.

I was pondering this as I picked up the book Antifragile by Nicholas Nassim Taleb for a reread. And things clicked. Our method is antifragility applied to training. And we create antifragile developers.

Read on ...

How do you get so much done?


How do you get so much done? Where do you find the time?

This is a question that I often get asked and it always catch me off guard. I don’t have a recipe (or do I?) and I don’t think I get more done than others.

But last time when I was asked this question I stopped for awhile and thought to myself - what do I do, and is that something others don’t?

In this particular case I referred to a blog post I’ve written and the question back was:

How do you find the time to write blog posts?

In this blog post I share a couple of my … tricks.

Read on ...

Scraping with Google Sheets for fun and profit


Yes, yes … I know. I do way too much Google Sheets for my good. But that tool is SO amazing. It’s becoming my first go-to-tool when it comes to small simple tasks at the office. And it allows us to be more data-driven and visual.

And it’s very easy to build aggregation tools for people around the office. For example; the other day we were wondering what kind of technologies that was hot in different cities in Sweden.

From that question, until I’ve created a simple but powerful tool to scrape data from Indeed.com, presented it with a simple filtering function and got it in the hands of the sales team was 45 minutes.

In the process, I learned about two new friends; IMPORTXML and the slicer-feature of Google Sheet.

Let me show you what we did.

Read on ...

Summarizing data over several Google Sheets - an exercise in stats and formulas


In my current job, as Head of Quality and Curriculum at </salt>, my thirst for being data-driven is frequently useful. In particular when it comes to test results for the developers in our courses. We test the developers every weekend (for 10/13 weeks) and we have now run 4 courses using the same tests… A gold mine of knowledge if you can mine it.

To help each developer and us, understand how they are doing we produce a diagram that compares their results to the result of their class (ca 30 people) but also compared to all classes (to date 4 x 30 people).

In the end we want to produce charts that looks like these:

But getting there has been quite tricky but oh so rewarding. At the end of this blog post, the whole thing is fully automated and kept updated. I only need to add new scores… and one extra configuration row for a new class.

Let’s go!

Read on ...

Metrics on 'well-defined' projects - and what I learned about uncertainty


I’ve just finished a huge project here at work. I have recorded reference recordings of all the lectures in the </salt> bootcamp. It was quite fun, quite exhausting but also quite rewarding as it basically drained me of every system development knowledge I have in me. And some that I didn’t have in me (there’s CSS in there, my friends…)

Obviously, I cannot share the result - but what I can share is what I learned.

I am a fan of embracing uncertainty since I first heard Dan North all those years ago. Most of the work I do is development hence naturally uncertain, as learning is the main constraint. This has led me to ditch the idea of being able to estimate how long a task or project will take before we start.

But still I and teams I’ve coached are often asked this. Before the project starts?! When I know absolutely the least about what we are going to do. What a crazy time to ask for estimates.

Ok - this has led me to seek other ways of making predictions and prognosis, without me having to estimate (aka guess).

This particular project was a bit different and hence perfect to make a point about uncertainty with:

  • I knew exactly what needed to be done - record 63 lectures
  • I knew exactly what went into each part - the material and slides was created before I started
  • It was an area in which I was an expert - I’ve created the entire boot camp together with Jakob Leczinsky and I have made many screencasts and presentations over the years. Some are recorded

But still, the uncertainty bit me and it was bigger than I (we) thought, took longer in some regards and shorter in others and in general revealed a lot about things we didn’t really think about.

In this post, I wanted to share how I tracked the data and lessons I learned from it.

Read on ...

Why the retrospective prime directive is paramount


I’m about to run a few retrospectives with a group of people with little to no experience of agile previously. In doing my preparations I went back to the core and start of retrospectives, why we do them, their purpose and meaning, etc.

Before long I stumble onto something that I have had some issues with; the Retrospective Prime Directive. But as I read it and was thinking about how to introduce the whole concept to retrospectives to my friends I realize that without the Retrospective Prime directive being agreed on - retrospectives are not worth the time. Or at least not interesting in the long run.

Let me explain what I mean.

Read on ...

Talking about what really matters to us - what I learned from a spiritual day


No - this post will not be about Christianity per se. You don’t have to worry.

That said I am a Christian and proud member of the Salvation Army and I wanted to share something I observed during two (actually) spiritual days. Something that I think is sorely missing in business today. Something crucial.

I’m not talking about God now - although he’s often out of the picture too :)

Read on ...

Prioritizing and sequencing are not the same things


Having an (any) work in process (WIP) limit to your workload is the best way I know to improve speed, quality and focus on value in what we do. This goes for individuals, teams and whole organizations alike.

As you apply a limit of how many things you will work on at the same time, you very soon will start to prioritize among your work. (Psst - I’ll let you in on a secret: if you don’t have limit you still prioritise, because at any one given time you are only working on a thing … but that is a topic for another post)

Being nudged to do this prioritization is a Good Thing (TM) if you let it. It starts moving you towards knowing WHY you are doing something NOW and away from ensuring that you are kept busy (or keeping people busy)

Ok but inevitable very soon we enter into the land of prioritization, and before long you will hear the laments;

Prioritizing is hard

Who does the prioritization here?

We need to get better in prioritizing, that is the only problem we have really?

I think there’s a misconception at the core of what prioritizing means (or at least how it is used). In this post, I wanted to clarify one distinction

Prioritization and sequencing are not the same thing

Read on ...

Fun with scripting - running a test suite against 30 different solutions


In my current job (School of Applied Technology) we give out weekend tests each weekend of the 10 first week of each course. With 30 developers in each class, it means that on Monday after each weekend we have a lot of work to do to correct the developer’s tests.

We have basic validation through a suite of tests that we run against the developers’ code. And we run linting. The real value, however, comes from comments and suggestions for improvements that we could give to the developer.

To speed the tedious part of the work up we have created a script that helps us:

  • Get the developers code into the correct place. The developers upload their solutions to a shared Google Drive and we have the Google Backup tool to synchronize those folders down to our local disk.
  • Run the linting and test towards each developer’s code. Each test has a separate test.js file and quite often different scripts and dependencies to be installed for it to run well. We just want to replace the developers’ code when running the tests against the test suite.
  • Report the errors in a nice way

It took some time but now we have a nice script that makes this a one-command exercise. And in the process, we learned a lot. I wanted to share this with you.

Read on ...

When was Lars happy?


One thing that I love in coaching and consulting is when things stick. My way to try to get there is to tell stories (psst - there’s a book on that) to try to emphasize or bring out certain points.

What I find very rewarding is to hear people relate these stories to each other later on, when (they thought) I was not listening.

Just the other day I walked passed two people and I heard:

Yeah, exactly. Remember: when was Lars happy?

This is one story that I’ve told many times and I wanted to share it here too. It was a powerful lesson on true value, customer focus and lead vs flow time for me.

Read on ...

3 mindset shifts for agile transformations


I have been involved in many agile so-called transformations over my, let’s face it, long career. And the more I get to do that the less I care about the word agile. Because agile is “just” a way to behave - it’s not an outcome. The outcomes are what we are after, the effects, the values. I’ve found it much more fruitful to discuss what those values are and means, than to argue whether Scrum holds up for scaling or not.

In this post I wanted to discuss three shifts in mindset and culture that I found: Important - as these shifts in thinking will or will not, hold your agile efforts back.

  • Fundamental - as in; goes beyond (below?) being agile or not.
  • Not talked about or understood in the same way
  • Start asking some tough questions and hence rapidly increase learning.

These topics are:

  • Shift focus from activities and utilization to value and flow
  • Realize that software development is not manufacturing and start managing in a suitable way
  • Monitor success for products or value streams rather than project or functional silos

My feeling is that if we discussed and changed this, half of the agile journey is already done. Also, if you are not ready to change any of these, then any agile transformation will give local improvements, at best.

Read on ...

Scraping functionally - to save my inheritance


Many years ago I wrote a little site to keep track of fun things that my (then only one) son Albert said. I called it Abbe Says and it has been granting us and our friends great joy.

At its core, it is a very simple blog/content management system that I wrote in .NET (3.5 I think) and published on the first serverless offering I heard about - AppHarbor. I didn’t even know the term back then it was more like: HEY! Give them your codez and they'll make it run on Internet My feeble brain exploded.

Anyhow - I cannot update it for various reasons and I need to move it to a more modern stack. Thinking of Svelte and to run it from some static served …

I’m getting ahead of me - first we need to get the data. This post describes how I salvaged the data from the site.

Read on ...