Niko Heikkilä

December 6, 2021

Craftsman's Log – 2021.12.06

Wishing you a merry winter solstice and related celebrations in your local culture!

Today we Finns also celebrate our 104th year of independence. While I'm not the one to spread nationalist chants, I'm fortunate to live in a country that has enabled me to grow professionally in a multi-cultural environment.

Next Friday, I will be attending the DevTernity 2021 online conference and sharing some of the nuggets of wisdom from the talks in Mastodon (and Twitter through automation). Later on, there will be a follow-up regarding what I learned in my blog.

Meanwhile, a couple of posts I found to tickle my mind during the last weeks.

Gentle Introduction to Design Patterns
I have bookmarked this link for situations when I need a refresher on what patterns are available to solve the current problem at hand. A word of warning, though. Only use these patterns when solving a problem, not because someone told you to use them.

Choose Discussions over Interviews
Whenever interviewing a candidate, I prefer a discussion instead. No pre-written lists of questions nor silly whiteboard puzzles. Only a casual and friendly conversation about clean code, architecture, engineering practices and leadership techniques, among other fundamental topics. So far, the feedback has been overwhelmingly positive, and I've heard the candidates have enjoyed these discussions.

Test First, Not Later
There is an almost infinite number of reasons why in both short and long-term scenarios, it's wiser to write tests before the production code. My favourite picks are below.

  1. We cannot write untestable code
  2. We are recording our thoughts as code
  3. We design the interface from the viewpoint of calling code
  4. We have to know the answer
  5. We uncover different scenarios better
  6. We find it easier to write tests first
  7. We guarantee behavioural coverage

Five Signs It's Time to Quit Your Job
It's easy to linger on in places that damage you. Instead, we should periodically conduct a reality check about where we are now and whether any actions help us forward. Be aware and mindful of the following scenarios.

  1. You're not learning new skills...
  2. ...instead, you're developing coping mechanisms
  3. You don't want to hire new people
  4. Your confidence has grown weaker
  5. Your physical health has begun to deteriorate

If you can check one or more of the above, I recommend you to have a constructive discussion with your manager. If you match even more, start searching for a new job immediately.

How to Observe Dysfunctions in Your Team
However, quitting your job need not be the ultimate solution. Sometimes you can change your team from the inside. Dysfunctional teams can emerge from many root causes, but a few common ones are here. Holla, if you've felt these before.

  1. Absence of Trust
  2. Fear of Conflict
  3. Lack of Commitment
  4. Avoidance of Accountability
  5. Inattention to Results

Property-Based Testing with JavaScript
I first stumbled upon property-based testing in Haskell and Python. It's great to see there are good tooling for Javascript as well. Often it's helpful to describe your functionality in laws and rules which are always true instead of specifying individual test cases. Unfortunately, generating all the possible test cases to satisfy our laws would be too much work. Tools like fast-check solve precisely that.

Business Benefits from Adopting Continuous Delivery
In the last edition, I linked to the manifesto of Minimum Continuous Delivery. However, this thought piece from Thoughtworks goes more profound and very fruitful. Recommended reading for all craftspeople.

Well-executed continuous delivery enables innovation, experimentation, higher efficiency, happier customers and developers.

Can your organization afford to not have these?

About Niko Heikkilä

Software Craftsman and Extreme Programmer. Currently shipping quality code at Futurice. Building proprietary software for a living and loving it as much as free and open-source software. Linux, Windows, and macOS user. Follow this blog for insights on TDD, BDD, DDD, mob programming, technical agility, lean software development, continuous integration, and delivery.

For shorter posts, check my account on Mastodon.