A First Look at Bun: Will It Take Node’s Crown?

Bun is a new and ambitious JavaScript toolset and runtime. Early adopters have been reporting that Bun is incredibly fast — so fast that it has been touted by some as a Node.js killer. Curious, I decided to check out Bun for myself and benchmark it against the competition.

Is it as fast as people are saying? How stable is it? Is it really better than Node? And can I use it with continuous integration?

Testing Strategies for Microservices

A microservice application is a group of distributed programs that communicate over networks, occasionally interfacing with third-party services and databases. Microservices, by their networked nature, provide more points of failure than a traditional monolith. As a result of this, we need a different, broader approach to testing.

So, how do we test a microservice application? Does the testing pyramid still work? How do we test when third-party services are involved, and network disruptions are a possibility? We’ll attempt to answer all these questions in this post.

5 Options for Deploying Microservices

Microservices are the most scalable way of developing software. But that means nothing unless we choose the right way to run them: processes or containers? Run on my servers or use the cloud? Do I need Kubernetes? When it comes to microservice architecture, there is such an abundance of options, and it is hard to know which is best.

As we’ll see, the perfect place to host a microservice application is largely determined by its size and scaling requirements. So, let’s go over the 5 main ways we can deploy microservices.

Release Management for Microservices: Multi vs. Monorepos

Imagine a microservice application consisting of dozens of continuously-deployed autonomous services. Each of the application’s constellation of services has its own repository, with a different versioning scheme and a different team continually shipping new versions.

Riddle me this: How can I tell the (whole) application’s version? Being that the change history is scattered among dozens of repositories, what’s the most efficient approach to keeping track of changes? And how do we manage application releases?

Getting Ready for Microservices

Your team decided it’s time to get rid of that old, clunky monolith (finally!). You had a good run with it, but the monolith has grown so big that you're spending more effort maintaining it than adding features. It's time to try a different approach.

It seems microservices are very popular these days, so maybe it makes sense to dig a bit deeper there and see what all the fuss is about?

30 Common CI/CD Interview Questions (With Answers)

Acing a CI/CD interview is all about preparation. Preparation starts with collecting as much information as you can about the prospective company, and their history, product, and interviewing process.

Next in the list is to brush up your technical skills because knowing your technical stuff will make you stand out. Questions (like the ones in this article) are a great way of testing your knowledge. To help you, we’ve collected and answered 30 common CI/CD interview questions. How many can you answer?

How Many of These Questions Can You Answer?

  1. What is version control?
  2. What is Git?
  3. What is a Git repository?
  4. Which other version control tools do you know of?
  5. What is a Git branch?
  6. What is merging?
  7. What is trunk-based development?
  8. What is Gitflow, and how does it compare to trunk-based development?
  9. How long should a branch live?
  10. What is continuous integration?
  11. How do CI and version control relate to one another?
  12. What’s the difference between continuous integration, continuous delivery, and continuous deployment?
  13. Name some benefits of CI/CD.
  14. What are the most important characteristics in a CI/CD platform?
  15. What is the build stage?
  16. What’s the difference between a hosted and a cloud-based CI/CD platform?
  17. How long should a build take?
  18. Is security important in CI/CD? What mechanisms are there to secure it?
  19. Can you name some deployment strategies?
  20. How does testing fit into CI?
  21. Should testing always be automated?
  22. Name a few types of tests used in software development.
  23. How many tests should a project have?
  24. What is a flaky test?
  25. What is TDD?
  26. What is the main difference between BDD and TDD?
  27. What is test coverage?
  28. Does test coverage need to be 100%?
  29. How can you optimize tests in CI?
  30. What’s the difference between end-to-end testing and acceptance testing?

Version Control

CI/CD interview questions may include version control and Git as a topic.

13 Tips to Write Better Posts for Developers

You want to start a blog, or perhaps you already have one and want to improve your style. Maybe you’re writing documentation and struggling to make it concise and clear. Whatever the case, you have a blank screen in front of you and a head full of ideas. How do you start? How do you write a blog that other developers will enjoy?

Here are 13 things I’ve learned over my years of writing for developers.

The Testing Pyramid: How to Structure Your Test Suite

For over a decade, the testing pyramid has been helping developers plan automated software tests. In this article, we’ll explore what makes up the pyramid, how it is helpful, and what alternative “shapes” there are.

What Is the Testing Pyramid?

Introduced by Mike Cohn in his book Succeeding with Agile (2009), the pyramid is a metaphor for thinking about testing in software. It’s an idea that has caught on so strongly that, to this day, it’s still the industry standard in engineering circles.

The pyramid attempts to visually represent a logical organization of testing standards. It consists of three distinct layers:

10 Books Every Senior Engineer Should Read

Engineers are natural readers. They take enormous pleasure in learning about new things, and books are the perfect medium to cover complex ideas in depth.

I picked some of my favorite books at my company, Semaphore — books that have profoundly influenced the company’s engineering culture. This list contains a mixture of classic, timeless texts and a fair share of modern game-changing publications, aimed at senior engineers and devs. But you don’t have to be a senior engineer to benefit from the books on this list, anyone interested in software development would enrich their skillset by reading them.

We hope you enjoy reading this list as much as we enjoyed making it.

The Principles of Test Automation

The word “test”  originally referred to “a small vessel used in assaying precious metals.” This meant that testing was a method of ascertaining the quality of gold or silver. It was also used in the process of refining valuable alloys, such as tin.

Later, the term was adopted in other fields, and these days it’s common to find it in contexts such as education, medicine, or software development. Its essence, however, has not changed: testing is used to refine end value.

Do You Need to Test Everything?

At my previous job at a big multinational company, we didn’t have anything remotely resembling an automated test. What manual testing we did consisted of dragging and dropping a folder and mashing F5. When we skipped testing, however, the users ended up doing it for us. After they did their round of testing, they would call or show up at our office, wondering angrily why the product was not working as they expected.

I start with this story because I don’t want you to think that I do not value tests. I do. Very much. I believe we can’t live without them. But you can have too much of a good thing. However vital water may be, too much of it results in a flood.

You Get a Test; You Get a Test; Everyboooody Gets a Test!

Everybody gets a test…

Tests are living documentation, messages to other developers (and our future selves) about what the code is supposed to do. Tests enforce requirements and provide feedback, telling us when something breaks.

The Economics of TDD

From a management standpoint, Test-Driven Development (TDD) can be a difficult sell. It involves a relatively large upfront investment, has no obvious business benefits, and (most important of all) the customer is paying for functionality, not tests.

Tempting as it is to cut testing in order to reach the next milestone in the project, it is a mistake because, as we’ll see, TDD can help us accelerate development and reduce costs over a project’s lifecycle.

Tips for Optimizing Slow Tests

From developers to testers, from business analysts to management, everyone in your organization must be committed to keeping tests in top condition. If you have an extensive test suite, you’ll need a plan to focus the effort. Check out our 5-step framework for identifying and optimizing slow tests if you’re not sure where to start.

Software development is modulated by the tools supporting it. Of these, testing is the most widespread and has the largest impact. Keeping tests fast and responsive leads to improved productivity, better code quality, and higher deployment frequency.

5-Step Strategy for Optimizing Slow Tests

Professional software development is a feedback-based process — each new iteration is informed by past results. Feedback is powered to a considerable degree by tests.

Slow tests affect development. Engineering teams lose momentum and become frustrated because they can’t meet their goals. A slow test suite puts the brakes on CI/CD, making release and deployment more difficult. This often means that organizations can't ship out products on time, and risk losing their competitive edge.

Feature Flags: A Gentle Introduction

Think of a world where you don't need a separate testing environment, where you can test everything in production and capture valuable data that helps you improve along the way. The secret ingredient: feature flags.

What Are Feature Flags?

Features flags is a software engineering technique that lets developers integrate code constantly into the main trunk. It involves shipping incomplete features into production, which remain dormant until ready. Feature flags also take part in software delivery; when the feature is complete, the code can be activated at the flick of a switch.