Categories
Arbetsliv Internet och IT

An AI-powered workflow without the slop

This is an article I wrote for LinkedIn in November 2025, published here for posterity.

I initially counted myself among AI skeptics because a lot of what was being said about this technology simply seemed too good to be true; my critical reflexes kicked in. Now, I use generative AI tools almost every day, and they’ve massively improved both my individual productivity and the quality of my work. As it turns out, I was simply using these tools the wrong way, preventing me from reaping the full benefit.

My mistake was trying to use AI tools to produce the bulk of the work for me, and then reviewing the results, making corrections where needed. Not only was this more mentally taxing, my productivity actually dropped because I had to spend so much more time reviewing and correcting. I had essentially used AI to just shift the work I had to do myself to be more difficult and time-consuming, without actually delivering better results at the end.

The solution is obvious in hindsight. When I started using AI to review what I had written and suggest improvements, my initial skepticism quickly faded. I started treating AI as an editor, not a ghostwriter. After all, the writing itself was never the hard part. Almost anyone can produce a great quantity of code or text, especially if they haven’t set a high quality bar. AI tools are great for mundane, repetitive work, but anyone who is doing that in software engineering – or writing – is probably doing it wrong.

Let me share some things that I find boring and repetitive: Combing through thousands of lines of product documentation to confirm one critical detail. Reviewing a suite of unit tests to try and find the missing edge cases. Re-reading and re-reviewing a document five times over to try and really make it shine. Now, tasks like these have been made much more expedient, and issues that might previously have been resolved by taking up a colleague’s time, I can now handle myself.

I found an issue with this approach. Sometimes I need to write code to do something that I don’t already know how to do, and it can be tempting to just have the AI generate it. After all, people have been sharing solutions on sites like StackOverflow for a long time, so what’s the harm? But again, this actually ended up a net negative for me because I’m again left with more of a hard problem to solve: that of accountability. My first duty is to the customer, and I hold myself accountable for meeting their expectations as well as I possibly can. To do that, I must know what I’m delivering to a considerable level of depth.

And so instead, I partner with a helpful colleague who has encyclopedic knowledge of the specific technology I’m trying to use, will instantly step to help me whether it’s 02 or 14, will never complain that I’m wasting his time (not that any of my human colleagues would!) and will tirelessly teach me what I need to solve the problem myself. This way, I can confidently hold myself accountable for delivering to the highest standards.

Categories
Internet och IT

Migrating a WordPress blog to Amazon CloudFront

This is an article I wrote for LinkedIn in November 2025, published here for posterity.

Throughout the many jobs I’ve had developing software, we’ve talked a lot about technical debt. Usually this is in reference to legacy systems that are so very vital to the business that they can’t be replaced, or architectural choices that only made sense at the time. Recently, I’ve been struggling with another type of tech debt altogether: the ghosts of past hobby projects. I’m talking about things I built some 15 years ago that I still use regularly. Seeing that old code still doing what it’s doing is a source of comfort and concern in equal measure.

Sometimes, it’s easy. Just recently, I needed an app that I had written in 2016 and hadn’t touched since. Thankfully, it was .NET, and if there’s one thing you can count on our friends at Microsoft for, it’s backwards compatibility. When I opened up the Jurassic-era source code, I was cheerfully suggested to upgrade it to the latest framework, and Visual Studio did so without a hitch, the app whizzing back to life. An altogether different experience to the time that I tried to modernize an app originally built with AngularDart. What was I thinking?

I used to build a lot of sites using WordPress, because the low cost and ubiquity of LAMP (Linux, Apache, MySQL, PHP) hosting made it an attractive choice. Even today, it’s still a very popular way to get content on the web. Unfortunately, WordPress has a poor – and mostly undeserved – reputation when it comes to security. Major flaws in WordPress itself are historically rare, and unless running shady plugins, keeping up to date with the latest version has usually kept one out of harm’s way.

However, if the interactive element of running a blog-type site isn’t necessary – as it rarely is nowadays, with discussions having moved to social media – hosting a WordPress blog as a static site on AWS can be more cost-effective than even traditional LAMP hosting, and a very effective way to alleviate security concerns. So, this last weekend I decided to convert a couple of my old WordPress instances.

Finding a good step-by-step guide that covered the whole process was difficult, so I wrote one myself. Please have a look if you’re interested.

As for that venerable AngularDart app – I’m very slowly rewriting it in Flutter, and the backend for it is eventually going to get a microservice makeover. Until then, like all the other legacy code out there, it’s continuing to do what it was designed to do, unbothered.

Do you have a piece of old software that you wrote yourself, and still depend on? Or is that just a me thing?

Migrating a WordPress blog to Amazon CloudFront

This guide is intended to take you through the process of migrating an existing live WordPress blog to a static website hosted on Amazon CloudFront. Typically more cost-effective than traditional hosting, replacing dynamically executed PHP code with static HTML pages also considerably improves your security posture. You will no longer have to worry about keeping WordPress, or any other component of the stack up to date with security patches. The disadvantage is that any interactive elements of your blog – such as comments, pingbacks, and many plugins – are lost.

Necessary information: I work at Amazon Web Services, but this guide is based purely on my personal opinions and experiences. Where specific products such as plug-ins are mentioned, they are merely the ones I personally decided to use, and not official endorsements or recommendations by AWS.

Prerequisites

  • You have an AWS account.
  • You understand that following this guide will incur costs on your AWS account.
  • You have a live WordPress site, with admin rights.
  • You have a domain name for your site, where you control the DNS records.

Creating a static copy of your WordPress site

  1. On your live site, install and activate the WP Migrate Lite plug-in.
  2. Use this to create a backup of your site. You will typically only need to include the database, uploads, and themes. If you have made extensive customizations, you may need to select additional files.
  3. After making the backup, deactivate the plug-in on the live site.
  4. Install Local on your local machine and run it.
  5. Import the backup into Local, creating a new site. I had issues using nginx as the web server for my sites, even though it’s the preferred choice; I had better luck with Apache.
  6. Trust the SSL certificate generated by Local, otherwise you won’t be able to open the WordPress admin console.
  7. Click “Open site” and browse through the site, observing that everything is working as it did when the site was live. If not, troubleshoot.
  8. Open the admin console by clicking “WP Admin”. You will probably want to make some changes. For example, you should remove WordPress’s built-in search, disable comments, and so on. No worries; if you make a mistake, you can revert changes by deleting the site from Local and re-importing the backup.
  9. Install and activate the Simply Static plug-in.
  10. Configure Simply Static according to your needs. I mainly had to adjust the crawlers in order to get all the pages I needed generated.
  11. In the Deploy menu, select a local directory as your deployment destination. If you bought Simply Static Pro, you can directly select an S3 bucket here, but I will assume you’re manually uploading to S3.
  12. Generate the static export. This can take a fair bit of time, and the Activity Log does not update immediately. Simply Static generates a detailed debug log (in the wp-content/uploads/simply-static folder) that you can check to see what’s going on.

You now have a static export of your site. You can repeat the export with different settings later, if need be.

Setting up static website hosting in AWS

  1. In the AWS console, ensure you have selected your preferred region. Most services we’ll use are global, but not all. The preferred region will typically be the one closest to you.
  2. If you didn’t do so already, go to Billing and Cost Management and create a budget. While the costs of this solution should be modest, you always want to remain in control of your cloud spend.
  3. Go to S3 and create a general-purpose bucket. The bucket name should, by convention, be the same as your website domain name. You do not need to enable public access, since we’ll be using CloudFront.
  4. Go to Route 53 and create a public hosted zone for your domain name. You can use your existing registrar if you don’t want to transfer the domain to Route 53, as long as your registrar will let you change the DNS records.
  5. Go to Certificate Manager and change the region to us-east-1 (N. Virginia). You must use us-east-1 for the certificate used by CloudFront, which is what we’re creating now.
  6. Create a public certificate request for your domain name and any other names you want to use (like www.*).
  7. To validate the request, you will have to create CNAME records. If your domain is already hosted in Route 53, the AWS console can create them for you, otherwise you’ll have to copy-paste. Note that if you change the NS records of your domain to point to Route 53 before the static site is up and running, the site might temporarily become unavailable, so I set the validation CNAME records on my former DNS provider prior to changing the NS records over to AWS.
  8. Wait for the certificate to be validated. This typically takes less than a minute.
  9. Go to CloudFront and create a distribution. Enter your domain name for both the distribution name and description (some list views only show the description). Also enter and check your domain name as the Route 53 managed domain for the distribution. Click next.
  10. Select the Amazon S3 origin type and select your S3 bucket by clicking Browse S3. Click next.
  11. I recommend enabling Web Application Firewall, even though your site will be static. More thoughts on this below. Click next.
  12. Select the certificate you created for your domain. Click next, review and click Create distribution. CloudFront will provide the bucket security policy needed for CloudFront to access it.
  13. Now, open the distribution and click Edit. Add any alternate domain names (again, like www.*) that your site uses. Enter index.html for the default root object. If you do not need global distribution, change the price class. Save changes.
  14. Click the shortcut to route the domains to CloudFront, this will create the necessary records in Route 53.
  15. Make note of the CloudFront distribution ID and the distribution domain name (*.cloudfront.net).
  16. Go to Functions in CloudFront. Create a function to rewrite paths to index.html, as you need this behavior for WordPress – you can simply copy the official sample. Publish the function, and associate it with your distribution.

Your site is now set up, but the bucket is still empty, and if your domain isn’t already hosted by Route 53, the domain is not resolving to your CloudFront distribution. This is fine. Next, we’ll import the files.

Syncing your local site to the S3 bucket

  1. In the AWS console, go to IAM and create a user that you’ll be using to sync the files to S3. It’s a good practice to not use your root user, or an IAM user with broad administrative rights, for this.
  2. Create permissions policies for the user that allow list/get/put/delete actions on your bucket and its contents, and invalidate rights on your CloudFront distributions. I have provided policy samples below that you can edit for your use.
  3. Create an access key for the IAM user, for use with the CLI. Save the Access key and the Secret access key for later, or download the .csv. To follow best practices for security, you should rotate this key regularly.
  4. Install the AWS CLI on your local machine.
  5. Open a terminal in the folder where you deployed the static export of your local WordPress site.
  6. Create a profile based on your IAM user and the access key you created by running aws configure –profile <profile> (docs). The profile name is the name of your IAM user. The CLI will prompt you for values. Enter the region where you created the S3 bucket.
  7. Now sync the files to S3. Always start with a dry run to make sure you got everything right: aws s3 sync <local folder> s3://<bucket name> –delete –profile <profile> –dryrun (docs)
  8. If you encounter errors, troubleshoot. If not, run the command without –dryrun and wait for the site to upload.
  9. Invalidate the CloudFront distribution: aws cloudfront create-invalidation –distribution-id <distribution id> –paths “/*” –profile <profile> (docs)
  10. Now, open the distribution domain name in your favorite browser and verify that the site is displaying correctly.

Any time you update the site, you will need to re-run the sync and invalidation commands – so putting these in a script can be helpful. From now on, you’ll update the site by running it in Local, exporting it using Simply Static, and then syncing it to S3.

Invalidating the CloudFront distribution on every update isn’t necessary, it will simply make your changes appear faster.

Updating your former DNS provider’s records

  1. In the AWS console, go to Route 53, open your domain in Hosted zones, and make note of the NS records.
  2. Update the NS records with your DNS provider/domain registrar to be the same as those in Route 53. Typically, your DNS provider or domain registrar will remove all other records at this point, so if you made any customizations, take note of them first so you can re-apply them in Route 53.
  3. If your domain used DNSSEC, you will need to take additional steps to enable signing in Route 53, otherwise the new records will be rejected.
  4. Once the DNS changes propagate, you should be able to access your new static site using your domain name. This can take between a few minutes and several hours, depending on the TTL of the former records.

Everything should be happily working now, so consider the following supplementary reading; there are nuances to how you set this up that can have an impact on the cost and performance of the solution.

Notes on S3 Static Hosting vs. CloudFront

When researching this, many of the guides I found suggested hosting the website directly out of the S3 bucket, not using CloudFront. While this is certainly a possibility, the main issues I had with this are that the bucket must have public access, HTTPS isn’t supported(!), and Web Application Firewall (WAF) isn’t available. However, because you’re using fewer services, it’s going to cost you even less. While HTTPS is arguably not technically necessary for static content, it is practically a necessity these days for a public-facing web site.

Another important note is that traffic between S3 and CloudFront is not charged, so by using CloudFront, you get global distribution from a single S3 bucket sitting in a single region. You can even change the object storage class of the items in your bucket to a lower cost option, if you wish.

Notes on Web Application Firewall

You might wonder why WAF is needed for a purely static site. The short answer is: it’s not! But, it’s a cost-effective way to protect against the so-called Denial Of Wallet Attack, where malicious crawlers are looking around your site for non-existent vulnerabilities, wasting bandwidth. There is a fixed charge for enabling WAF and if your site sees very limited traffic, it might look like a large portion of your overall cost. However, remember that CloudFront does not charge you for requests blocked by WAF, so instead of the unknown variable cost of malicious traffic, you have a known fixed cost for the Web ACLs and rules in your WAF, and a very small cost per request that is controlled by WAF.

Sample IAM policies for a CLI user

This policy will allow your user to run aws s3 sync:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowS3Sync",
      "Effect": "Allow",
      "Action": [
        "s3:PutObject",
        "s3:GetObject",
        "s3:ListBucket",
        "s3:DeleteObject",
        "s3:GetBucketLocation",
        "s3:PutObjectAcl"
      ],
      "Resource": [
        "arn:aws:s3:::<BUCKET NAME>",
        "arn:aws:s3:::<BUCKET NAME>/*"
      ]
    }
  ]
}

This policy will allow your user to run aws cloudfront create-invalidation:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "AllowCloudfrontInvalidate",
      "Effect": "Allow",
      "Action": "cloudfront:CreateInvalidation",
      "Resource": "<DISTRIBUTION ARN>"
    }
  ]
}

Categories
Arbetsliv

The silo is where know-how goes to die

This is an article I wrote for LinkedIn in September 2025, published here for posterity.

If you receive a DM asking for support from a coworker, simply helping them right away might not be the best course of action. Let me explain.

One of the most common and damaging organizational antipatterns is the ‘silo’. A silo is a place where knowledge assets go in, where they are used by those who happen to be in the same silo, but never benefit anyone outside, even when doing so would be more valuable for the org as a whole. Organizational silos are found in all sizes, even as small as one person – you know, that one engineer who ends up being the “go-to guy” for an entire component that everyone else is scared to touch.

As a senior engineer you will want to do everything in your power to avoid becoming part of a silo, and as a leader you should try to break them down whenever they are found. This can be an excruciatingly hard task in practice, so let’s start small. A positive practice that almost everyone can exercise is to push conversations from DMs to public channels, in Slack or whatever tool you happen to be using.

The setup is simple and many orgs will already have some variant on this: Every team, project or product has a public “support” channel and it is the default forum for all pertinent communications. If someone DMs me for help, I will push the conversation to the public channel, unless it’s clearly confidential in nature. This has a number of key advantages:

Transparency – Our first instinct when asked a question is often to just provide a straight answer. Someone else might see the question and consider: “Why are they asking this in the first place? How can we solve their problem in a better way?”

Knowledge sharing – If conversations are shared, indexed and searchable, they become a knowledge base that continues to create value even after the conversations are long over. Analyzing them can bring valuable insights.

Better collaboration – Anyone can join the conversation, contributing their knowledge and perspective. If the person you had in mind isn’t immediately available, instead of shotgunning DMs in the hopes of finding someone who is, you need only post once.

I’ve found it quite hard to break down silos in orgs where they’ve become part of the company culture, perhaps for reasons of (often imagined) confidentiality, intra-org competition or politics. But once you start, the benefits will be almost immediately obvious, hopefully driving long-term change.

Categories
Arbetsliv

Agile rituals, ain’t

This is an article I wrote for LinkedIn in September 2025, published here for posterity.

Having worked in many teams that practice some variant of Scrum, one thing that irks me is its fondness for daily, weekly or sprint’ly rituals. Necessary disclaimer: the number of teams that actually do Scrum “by the book” seems to be quite small. Every organization has its own take on it, so what I’m observing might not apply everywhere. However, what I’m really annoyed about is not Scrum itself, but rather work that is slowed down by a self-imposed schedule.

Let’s take the nearly ubiquitous daily standup: by the book, the team should plan the day’s work, identify any impediments and adjust the sprint backlog. Why plan for just one day when the immediate goal is always to tackle the highest-priority item in the backlog? And if you have impediments, or the backlog needs changing, why would you wait for a certain point in the day to do that? Simply do it when the need arises.

If, as a developer, I had my daily standup at 08:00, and I have an impediment that I need help with at 08:30 – am I going to wait for the next standup to raise it with the team, merrily twiddling my thumbs until then, or am I going to ping the team Slack channel right away? Obviously, it’s the latter. As for positive reporting, if I have a status update, I’m not going to wait for the standup, either – I’ll update the task right away, and the PM can see the current status at any time using the project dashboard.

Is it just me, or doesn’t it feel like these rituals where invented for a world where tools that are now considered basic necessities (like Jira, Slack or their many alternatives) didn’t yet exist, and so the only way for the team to communicate was face-to-face?

The sprint retrospective is another ritual that makes no sense to me. If I have feedback on what the team is doing, why would I wait to raise it? Especially if there is a noteworthy event early in the iteration, why would I wait to discuss it until later, when it’s no longer fresh in memory? Worse, sprint retros tend to include exercises like “team health checks” which are nearly useless for learning how your colleagues are actually feeling.

The only grounded argument I’ve heard for these rituals is that many engineers don’t have the discipline to do this work unless there’s a calendar item for it. As an engineer myself, I find this slightly demeaning, and I think it is an issue that would be resolved by better leadership. If you are part a team that is still doing time-bound rituals – what’s stopping you from going on-demand?

Categories
Arbetsliv

“Don’t bring me problems?”

This is an article I wrote for LinkedIn in September 2025, published here for posterity.

“Don’t bring me problems, bring me solutions” is a phrase that I, as a junior engineer, felt empowered by. It told me that I was trusted to do the job for which the company had hired me, without asking the boss for permission when faced with a problem I thought I could solve. At the very least, I knew that even if I failed, I would be able to show what I had tried, saving some time.

Much later, I learned that this phrase is often considered controversial. Rather than empowering employees to be proactive, some felt that it sent the message: “Don’t bother asking me for help; if you’re not capable of solving every problem independently, you’re not good enough to work here.” Which is obviously not the message you’d like to be sending out as a leader.

I think this negative interpretation of the phrase comes from the context of a workplace that does not have a strong culture of collaboration, where employees do not experience psychological safety, or which is lacking in good leadership. Even in a workplace I perceive as having these qualities, others may feel differently.

Nowadays I like to use a different phrase which I feel better conveys my intent, and sounds a little tongue-in-cheek: “It’s better to ask for forgiveness than permission.”

I believe employees at all levels of seniority should feel, and be, empowered to proactively work to solve problems without waiting for a go-ahead. I also feel that when another engineer is asking me for input, if they have already given the problem some thought and come up with a possible solution, our time will be spent more productively. Even if we ultimately end up deciding to solve it some other way.

Especially in software, almost all decisions are easily reversible. It’s fine to mess up as long as we catch the mistake, fix it and learn from the experience. More problems are caused by a failure to act than by trying to solve a problem in slightly the wrong way.

If you’re a leader, think about how you would foster this environment within your teams.

Categories
Arbetsliv

In a WFH world, seize any chance to meet

This is an article I wrote for LinkedIn in September 2025, published here for posterity.

A colleague of mine who was also part of a highly distributed team – working on the same product, but very different parts of it – told me that he was planning a workshop for his team in a few months. They were going to travel to meet up and spend two days in workshops to knowledge share, brainstorm and plan a major upcoming milestone. Staying overnight, they would have some time to hang out in the evening.

I had been mulling over the idea of a workshop with my team and I decided then and there we would do it on the same dates, at the same hotel. “Sure” my colleague replied, “There’ll be plenty of space for all. But why, though? It’s not like your team and mine would have shared sessions, but we could do dinner and drinks.” “Perfect” I said, “I think there might be opportunities for shared sessions too, but even if it’s just the social side of it, that’s good enough.”

Some people don’t see the value of corporate social events. I’ve had colleagues who avoid them like the plague. I believe they’re missing out on amazing opportunities to foster connections, build camaraderie across teams and functions, share knowledge and boost company culture. The kind of positive and inclusive environment created by getting together with your colleagues in person is extremely difficult to achieve through other means.

On this app, I sometimes see return-to-office mandates being framed as attempts to get people to voluntarily quit, exercises in managerial ego-stroking, or to justify prior spending on office real estate. I’m not saying that’s never the case, but it strikes me as rather cynical. My own experience is very different as I’ve had the good fortune to work for companies that understand the value of meeting in person, having social events. I’ve organized quite a few of them myself.

However, it’s not really a question of RTO or not, because even as a highly distributed team we often simply need to seize the opportunities for in-person interaction that appear before us. Often, like with the workshops that my colleague and I helped set up, they’re low-hanging fruits. Sometimes you have to push a little – the value of an event like this can be hard to measure. As an organizer, I must be able to effectively justify the expense.

Think about how you would create an inclusive and positive environment in your distributed team and how you would like to structure in-person events for the best possible result.

Categories
Arbetsliv

How I Lost My Love For Working From Home

This is an article I wrote for LinkedIn in March 2025, published here for posterity.

The pandemic years upset a lot of long-held practices around office work, the most significant one being the use of the office itself. Even as most of society was returning to normal, companies found themselves with vast, barely populated office spaces as workers had become accustomed to not spending hours of their lives commuting, instead working from spaces set up to their own preferences. Today, this privilege is still in effect for some, while many others have seen their employers pull them back in.

I spent those years at perhaps one of the most progressive companies in Sweden in terms of culture. It boldly declared that Working From Home was here to stay – in fact, it was now Working From Anywhere. Like everyone else, I was a huge fan. Even though I occasionally missed the vibe of the old office, my team and I did some of our best work ever during that time. Eventually, I found myself moving on and as of recently, my present employer is the latest in a string of companies issuing return-to-office mandates. You’d think I’d be upset.

I’m not. In fact, I fully believe this is the right choice, because while I can still see what makes remote working so attractive to the individual – let’s face it, everybody hates commuting and open-plan offices – I see now that without a company culture that enables it, the downsides outweigh the upsides, both at an organizational and individual level. I can already hear the angry mob approaching, torches and pitchforks in their hands, so I’ll try and keep this brief.

I firmly believe there are three prerequisites for a successful remote-first setup:

  1. Getting a reply on a communications tool (e.g. Slack, Teams) is almost always as fast as asking someone in person.
  2. Discussions and decisions happen primarily in writing, in open forums and documents, not DMs.
  3. Teams have ample opportunities to meet in-person for events that are social first, work second.

If you do not do this then sorry, your company is better off with everybody working from the office. Don’t jump on me all at once, there are good reasons for this.

Those reasons are shortening the feedback loop when collaborating, increasing the speed at which information moves around the organization, compensating for the lack of organic information sharing that naturally happens when people share spaces, and compensating for the complete lack of inclusion and belonging that is the result of teams only getting to know each other in brief sessions through tiny windows on a laptop screen. Yes, you’re going to get to take some of that money you saved on office space and stick it in the travel budget.

Companies that stick with traditionally in-person ways of working, emphasizing in-person communication and meetings as the primary forum for decision making – while still allowing workers the perk of working from wherever – will struggle. These organizations may still be successful in a business sense, but the frictions are a direct toll on productivity and retention, as more skilled and productive employees will be the first to become frustrated and seek new opportunities elsewhere.

Productive? Really? I see software engineers argue how being away from the office allows them to work undisturbed, being “in the zone”, getting more done. I will argue this is really a net negative. Very little work is truly carried out by only one person at a time. While they might feel productive in their “zone”, there are likely others waiting for their input. We can argue the drawbacks of open offices all day long, but if you need hours of deep focus trying to solve a problem without involving your peers – you are doing it wrong.

So how do we get the best of both worlds? Hybrid approaches only staunch the bleeding. While return to office mandates are a solution, they also do not come cheap, as many workers have come to feel a sense of (more or less justified) entitlement to the perks of working remotely. However, I do not believe there is a better way for organizations that are unwilling to adopt, at every level of leadership, practices that actually support productive remote work.

Categories
Internet och IT

You have to actually start-stop-continue

This is an article I wrote for LinkedIn in March 2025, published here for posterity.

Recently, I joined the sprint retrospective of a team I work with, because I was curious about their ways of working. They did the typical collaborative start-stop-continue format, which is one I quite like and often use myself. However, after arranging a bunch of post-its in neat columns, each containing a suggestion from a team member on something to start, stop or continue doing, they wanted to end the meeting.

Wait, I thought. What was the point of this exercise if there were no actions and no accountability? Sure, everyone was able to voice their opinions, which has some benefit. But to actually create tangible value, suggestions for improvements must be turned into actions and the team members must hold each other accountable for carrying them out.

It happens that teams are hesitant to create action items themselves, believing that any decision must go through management. While this may be true in some cases, like decisions that directly impact the product or business, teams should never ask for permission to improve their own ways of working. Engineering Managers and Staff Engineers should support teams self-improving and not intervene unless requested or if circumstances demand it.

The start-stop-continue format often yields items that aren’t directly actionable, or too many suggestions to practically implement in a single iteration. Voting on which to action and selecting only the top-voted ones for each iteration is a simple way to limit the amount of work, and to ensure that only suggestions on which the team broadly agrees get implemented. I like to put these actions in the team backlog, just like other tasks to be done during the iteration. This gives them visibility and allows the team to prioritize them against other commitments.

Finally, remember that putting the whole team in a meeting is expensive. Given eight members and a one-hour meeting, that’s a full workday. Some of the high performing teams I’ve been in would build, test and ship a whole feature in less time than that! While a team’s continuous work to improve itself is a force multiplier that is worth much more than the time spent, this is only true when improvements are continuously suggested, actioned on, and evaluated.

Categories
Speltest

Speltest: Augusti 2023

Jag fortsätter att använda den här bloggen – möjligtvis i brist på bättre innehåll – för att arkivera mina korta spelrecensioner på engelska som jag skriver på andra plattformar, huvudsakligen Steam. Håll till godo.

Battlezone: Combat Commander

I played a frankly unhealthy amount of the original Battlezone when it came out in ’98 but somehow missed the sequel when it came out only the next year. Now that a refresh has dropped, I’m finally able to enjoy it – however, do note that this is not a reimagining but a “warts and all” refresh that retains a lot of the somewhat dated and crappy mechanics of the original. There is a storyline, but it’s not well-written by today’s standards and much of what happens in it makes no sense in hindsight. There are bugs that can break missions. The AI is terrible on both sides, which leads to a lot of “accidental” difficulty, or sometimes lack thereof. That said, the level of challenge steadily ramps up and some of the later missions are quite hard.

In summary, if you loved Battlezone or have a thing for 90’s FPS+RTS hybrids, definitely give this one a go. I do wish they eventually revive this type of gameplay for a Battlezone III, even if only in spirit.

Steam.

Recettear: An Item Shop’s Tale

Very cute shop management/dungeon crawler about working your way out of crippling debt – a story I believe many of us can empathize with. Actually “beating the game” by paying of Recette’s debt isn’t all that hard, and most people will probably manage it first or second try, since the mechanics are so simple. However, doing so is really only about half the game, as there is plenty of story past that point and – of course – many more dungeons to crawl if you’re into that.

Sadly the dungeons lost their fun for me after a while and the store management isn’t really necessary once you are out of debt and have enough money to buy anything you need, so I’m sure I missed out on some content. Still, not a bad way to spend a couple of hours.

Steam.

The Witcher 3: Wild Hunt

It’s almost impossible to believe that this game is almost ten years old at this point – with the free graphics refresh, a few mods and a modern PC, this looks and plays just as well as most current AAA games, and the fully voice acted and immersive questlines are as great as ever. The DLCs are a must, as the game is arguably not complete without them – especially Blood and Wine, which serves as a mini-sequel and bookends Geralt’s story in a satisfying way.

My one item of criticism is that you really do need to jump through the hoops of downloading and installing mods for this, as many graphical and quality-of-life improvements are waiting for you there, some of which seem obvious in hindsight. That said, definitely grab this game.

Steam.

Black Mesa

Fan remake of the legendary classic Half-Life that takes enough liberties with the original to come out on top and deserve a playthrough, even for those of us who still remember the story in detail. Despite this being a rather short game, parts of it feel unnecessarily drawn out and tedious, a lot of reviewers call out Xen in particular and it’s hard not to agree that it could have been cut down by 50% with practically nothing of value lost. And even with all the polish and quality of life improvements (no crouch jumping!), some elements of late 90’s game design that haven’t really aged well are still there, and so you do need to have a bit of tolerance for such things to enjoy this to the fullest.

Steam.

VA-11 Hall-A: Cyberpunk Bartender Action

Bartending isn’t actually the point of this game; it’s a visual novel that briefly interrupts the story for an extremely simple minigame, which is very hard to fail. A few clients have cryptic requests and some are practically impossible to deduce by logic, so you might as well pull up the wiki – again, the bartending minigame isn’t the point, anyway. I still strongly recommend this game for the excellent writing, great characters and music – it’s not too long, and my greatest complaint is that there isn’t (yet) a part two.

Steam.

Grand Theft Auto V

The fifth main entry in the GTA series is very much more of the same type of gameplay and story that we’re used to, now in a somewhat fresh setting. That said, my main complaint is that there isn’t more of it, as completing the main questline left me feeling I still had much to explore, but no incentive to actually do so. I suppose the idea is to play online but as someone with little patience for multiplayer outside my circle of friends, I would have liked more single player content, even if they were autogenerated missions. 60 hours is still a decent playtime though, especially for a game that goes on sale a lot, so pick this up if you haven’t already.

Steam.

Hades

Excellently written, beautifully animated and extremely satisfying. I was worried that Supergiant had lost their touch after trying Pyre, but this is a very strong return to form and a fresh take on rouge-lites where dying doesn’t reset the story to zero, but actually advances it and often unlocks new possibilities for the next run. Once you beat the game, there’s really a ton of story left to enjoy, with increasing difficulty if you want it. This gets nothing less than an unqualified thumbs up from me.

Steam.

Categories
Mat

Julmusttestet 2022

“Vad för sorts idiot publicerar ett test av julmust EFTER jul?!?” Ja, hej och välkomna till min blogg! Där tidigare års artikel har kommit ut till den väntande allmänheten i god tid inför att detta det allra viktigaste av inköpsbeslut ska fattas, kommer 2022 års test först efter att vi alla påbörjat vår 11 månader långa paus i drickandet av julmust. Det finns ingen ursäkt för detta, men jag ber om ursäkt ändå. Med det sagt…

Topp tre 2022

Bäst i test: Roslagens Brygghus Julmust Eklagrad Bourbon

Andra plats: Roslagens Brygghus Gammaldags Julmust

Roslagen Brygghus imponerade stort på panelen i år, med två av tre pallplaceringar. En omsorgsfull fatlagring som infuserar julmusten med rika, fylliga toner av ek och vanilj kan verkligen höja denna redan från början härliga kulturdryck till skyarna. Här handlar det emellertid inte bara om söta smaker utan också en angenäm kryddighet som gjorde att även den olagrade “gammaldags” musten vann panelens enhälliga gillande.

Tredje plats: Hammars Julmust Whiskyfatslagrad 2016

Hammars Bryggeri har vi druckit tidigare men med ett lysande undantag har de inte imponerat på vår panel. Här är det emellertid 2020 års vinnare som återkommer med briljans – eftersom årgången är densamma misstänker vi att detta är samma must som helt enkelt fått ligga och gotta till sig ett par år till. Utmärkt fyllighet och en tydlig fatkaraktär, samtidigt utan att tumma på den traditionella smaken. Mums!

Hela listan

Här är de övriga julmustar vi provade 2022, rangordnade från bäst till sämst.

Zeunerts Julmust – Fjärdeplats även 2021 och snubblande nära en pallplacering. Då som nu, en referens för hur äkta julmust smakar.

Remmarlöv Gårdsbryggeri Julmust – Söt och fyllig smak, inte dålig alls.

Dufvenkrooks Julmust Halvtorr – Ett märke vi känner igen från god glögg. Helt okej på att göra must också, visar det sig.

Grebbestad Julmust – Klart bättre än genomsnittet. Här finns potential för en riktigt god must om man vågade ta ut svängarna lite.

Åre Soda Co. Julmust – Panelen var delad i sitt omdöme, men ingen fann den odrickbar – en helt okej julmust.

Roslagens Julmust Lakrits – Här förväntade vi oss besvikelse, men den här var inte dålig alls, en höjdare förutsatt att man gillar lakrits.

Hammars Julmust – Inte särskilt spännande, trots att den utgör grundmaterial till en av våra återkommande favoriter. Förvånansvärt.

Nygårda Ekfatslagrad 6 månader – Vi undrar, liksom 2020 då den här testades sist, om den verkligen är ekfatslagrad på riktigt. Tunn i smaken.

Sahlins Brygghus Dalamust – Något trist och smaksvag. Ingen höjdare.

Nyckelbryggerier Gammaldags Julmust – Tvåa i 2020 års test, men här undrar vi om man inte kan ha ändrat receptet till det sämre. Trist och för kraftigt kolsyrad.

Svenskt Mathantverk Enbärsmust – God och med kraftig smak av enbär, som tyvärr tar den utanför spelplanen avseende hur julmust bör smaka.

Tempel Brygghus Julmust – Godare än sist vi provade den, antagligen är receptet uppdaterat, och tur var väl det. Imponerade ändå inte särskilt på panelen.

Tasty America Julmust Cola – Panelens åsikter var något delade men det sammanvägda betyget blev inte högt. Åtminstone smakrik.

Soda Nation/Judiska Muséet Chanukkamust – Bryggs oss veterligen fortfarande av Sahlins och är snarlik Dalamusten, men gillades av någon anledning ännu mindre av årets panel.

Bryggverket Julmusch – Vi vet inte om namnet ska antyda att detta egentligen inte är en julmust, men i sånt fall stämmer det. Panelen fann smaken mest konstig.

Stockholm Brewing Julmust Classic Classic – Inte en felskrivning, den heter så. Ingen höjdare, ansåg panelen, och det blev inte bättre med tillsatt smak.

Ten Hands Soda Julmust – Torr och sträv, kanske ett försök att uppnå en vuxnare karaktär. Inte imponerande resultat.

Gbg Soda Julmust – Har legat högt upp på listan tidigare år men så ej denna gång. Nytt recept eller förfinade smaklökar?

Stockholm Brewing Julmust Apelsin Vanilj/Körsbär Vanilj – En från början ganska trist julmust hjälps inte av att man tillsätter smaker som påminner om billigt godis.

Spendrups Trocamust – Trocadero är kärlek, men detta är helt smaklöst. Varför?

Omnipollo Holiday Sour – En alkfri suröl “inspirerad av julmust”. Nå, bättre att dricka äkta vara då än detta svaga försök, tycker panelen.

Törst Real Julmust – Liksom tidigare år är panalen i princip enig i sin avmak mot denna. Snudd på odrickbar.