How to Structure a Learning Group at Work

By on in Culture, Everything Else

With any field, and especially programming, learning is integral. Technology changes. The field of programming is vast. To be a good programmer, you need to continue to learn and develop. In addition to learning outside of work, co-workers are often excited to learn together at work or through work. I know personally, I’m a social learner and enjoy the camaraderie that comes from struggling through a new topic together. Continue reading …


The 2×2 Method

By on in Product Management

In a discussion about prioritization among product managers at C5, we were in consensus that a 2×2 is a powerful tool in many prioritization scenarios from assessing risks to the product or business to working out the path forward when faced with competing priorities for a product.

As a visualization tool, a 2×2 gets the team on the same page to externalize relative risks or priorities and work through next steps. When things seem murky or like everyone isn’t giving the same weight to particular options, try out a 2×2. Continue reading …


Lightweight dependency injection in Elixir (without the tears)

By on in Development, Elixir

In our last Elixir blog post, “Functional Mocks with Mox in Elixir”, we discussed how testing across module boundaries could be made easier by creating a Behaviour for a collaborating module, then utilizing the wonderful framework Mox to substitute a lightweight mock module in tests.

This approach is well and good when you have very concrete module boundaries that are well-defined and coarse enough to warrant the ceremony of wiring up a behavior for a module boundary. But what if we aren’t necessarily interested in all the work in creating a mock, and we need something simpler and more lightweight?

Join us as we discuss some alternative ways to write lightweight tests across function or module boundaries.

Continue reading …


“We don’t need a designer for this.” (Yes, you do.)

By on in Design

Design is an important part of the development process and we don’t want you to take it away without considering the risks.

Carbon Five has been practicing design for 10 years and in that time we have had the privilege of working with many design-driven companies. However, even the most design-focused companies get cold feet. Here are some things we have learned over the years on the (thankfully rare) occasion the value of design is called into question. Continue reading …


The First Rule of Agile is Don’t Talk About Agile

By on in Product Management

I asked a group of fellow product managers if they’ve ever read through the Agile Manifesto with product owners / clients. They all said “no”, and the general consensus was that doing so wouldn’t be well received. This is interesting. Even though Carbon Five is well-respected for our process, and we definitely practice agile, we’re guarded about discussing it. Continue reading …


Comparing Dynamic Supervision Strategies in Elixir 1.5 and 1.6

By on in Development, Elixir

Classroom

Let’s say you’re managing complex process state in your Elixir application and you need a way to spin up and down new processes as your app runs. This requirement is known as dynamic supervision, the ability for a supervisor to add processes to its supervision tree at runtime.

This post will explain how to implement a process under dynamic supervision with Elixir 1.5, and discuss how Elixir 1.6’s new DynamicSupervisor is easier to configure and is more flexible.

Continue reading …


An Introduction to ADTs and Structural Pattern Matching in TypeScript

By on in Development

Preface

To quote Rúnar Bjarnason:

One of the great features of modern programming languages is structural pattern matching on algebraic data types. Once you’ve used this feature, you don’t ever want to program without it. You will find this in languages like Haskell and Scala.

I couldn’t agree more myself. That said, I spend most of my time writing programs with languages that don’t have first-class support for algebraic data types (ADTs). So what’s a programmer to do? Continue reading …