Notes on designing, developing and delivering great products

Creating the Dream Team: Transform Your Engineering Organization to Attract New Talent

By on in Culture, Process, Startups

The organization you've wanted to work for

It’s a common scenario for tech companies: Your hiring pipeline is dry and you can’t seem to attract new talent. You notice companies touting long lists of superficial benefits. Instead of improving your internal team, you find yourself worrying about getting a pro-grade ping pong table for the break room.

You don’t need helicopter rides or Massage Mondays to bring people into the fold. Instead, focus your energy on making lasting changes to your company’s DNA. It won’t be easy, but the results will keep your existing team happy, which translates to positive conversation about your organization. Here are a few strategies to get you moving in the right direction.

Continue reading …

Junior Jump Extended: Acts I – IV

By on in Events, Mentorship

For the past few Sundays a group of me and other C5’ers came into the office to work on BridgeTroll with a few junior developers. We hoped that BridgeTroll would get a few highly requested features, but mostly we really hoped the junior developers would get practice and pick up some good practices about TDD, agile, and coding in general.


This was actually our second iteration of teaching pairing (and teaching through pairing). The first time was on a weeknight and between setup and getting everyone on the same page, not much learning was had. This incarnation of the program addressed the setup issue and having continuity over the course of several weeks seemed to work well. To be fair, there was a lot of story preparation time we sunk in before the start of the program so that most of the time could be spent on developing so that helped. It also really helped that BridgeTroll has an excellent setup script, which made starting a ton smoother.

Why would anyone put on a free program to teach industry skills? There must be something they expect in return.

Continue reading …

Null-Pointer Exceptions Considered Annoying

By on in Development, Java


If computer programs have needs, data is one of them. Usually, this data is available, but sometimes it’s not. Why not? Who knows. It’s just not there. What’s worse, this situation is common and, when improperly handled, results in runtime exceptions.

To explore this problem, let’s contrive an example using Java 8. Suppose we want to save a record given some data provided by the user. Since humans are fallible, let’s express the data they provide in terms of the Optional type. Here is what we’ll start with:

Function<String, Integer> saveRecord = m -> {
    System.out.println(String.format("Saving record %s", m));
    // do something useful
    return 0;
Optional<String> message = Optional.of("Hello World");
// call saveRecord with the String in message?

Continue reading …

The Product Dartboard

By on in Product Management


Some projects go so well you want to bottle them. Others, not so much. A few months ago, I started surveying our projects from the last three years. I was looking for patterns of success and … less success. I had heard people say that there wasn’t much of a correlation between projects that were successful for Carbon Five and products that were successful in the marketplace. That felt simultaneously plausible (lots of products fail, but that doesn’t mean it was a horrible project) and unlikely (it doesn’t make us happy to work on things that don’t succeed). I asked C5ers to grade projects based on how well the project went. Then I recorded whether the product had been a success (as defined by the client). It turned out that there was actually a pretty strong correlation between projects we graded higher (A or B) and products that had succeeded. And projects where the C5 team was dissatisfied often resulted in unsuccessful products.

Once I saw this, I wondered: how might we increase the likelihood of success? Is there some way we could predict successful outcomes and try to make all our projects look more like the great ones? We’d have more fun and our clients would enjoy more success, in theory. But was it possible? Continue reading …

Flexing the Rules of Material Design

By on in Design, Everything Else, Mobile

About a year ago I worked on my first Android app at Carbon Five. Having been an Apple junkie for years I decided to take a deep dive into the Android world. I switched up my phone to a Moto X (which I’m still sporting) and spent some time reading the Material Design guidelines.

Man bending backwards

I immediately fell in love with the guidelines because you didn’t need to be a designer to understand them or apply them. The digestible explanations of the fundamentals of design like grid systems, typography and color theory made it simple for our team to understand the behavioral and visual design used by comparing elements of our digital product to physical objects and how they would behave in relation to objects around them.


But, as a designer with a past in branding and advertising I had to step back and ask, If I’m following these guidelines word for word, how will I allow my brand to look and feel like itself rather than Google? I knew I had to answer this question before visually designing for the project I was working on and the best way to do that was find out: how other apps were using material design, who was getting recognition for using it well, and why?


After looking at dozens of apps I started to realize most apps were and still are using the guideline as a coloring book. They are grabbing elements off of the stickersheet that Google provides as a resource and changing up the colors of elements like buttons and cards to match their own brand colors.


However, the ones who are using it well and are getting recognition for it were flexing the rules to leverage their own brand identity. New York Times was awarded for “elegant use of typography” by Google in their Material Design Awards and they were hardly making any use of Roboto. Weather Timeline was recognized for “crafted simplicity” and were using four primary colors as opposed to the prescribed 1 primary and 1 secondary palette. AirBnB was featured on Play Store’s editor’s choice list and completely broke free of burying navigation in the NAV drawer.


3 Android apps and 1 talk at Droidcon DE later, having seen the good and the bad, I’ve created a 5 step process to help make sure we always maintain the identity of the brand while using Material Design.

Step 1 Reset Your ThinkingStep 1: Reset Your Thinking

If you’ve been working on your app for a while, reset your thinking. Try and look at it like you’re on boarding to the product team and ask yourself and your team members these questions:

  • Who is your product for? Who is your Primary customer?
  • What’s the primary function? What goal is your customer trying to accomplish?
  • Why does your customer need your product? Is it addressing a pain point that they have?
  • How will it be used? In what space/context is your customer using this app?

Knowing what your product communicates to customers and potential customers and what people see, hear and think about your brand is a great way to identify what parts of your brand makeup are core to your visual and verbal identity.

Here at Carbon Five we have devoted project rooms to put up our product artifacts. I recommend you grab a role of tape and put up your findings from this step in your workspace. Surrounding yourself with artifacts that form your knowledge of a product will help engrain your findings in both your team’s understanding of the product and your own.

Step 2 Grumpy Cat

Step 2: Work With What You’ve Got

As designers on a product team we commonly inherit existing designs whether it’s a marketing site or a logo on a business card. Most often than not we have to incorporate some of these elements. Start this step by creating a minimal style tile of assets your brand may already have like logos, emblems, images, fonts and colors.

Again put up your findings in your workspace and identify what makes you unique when compared with Google’s Material Design Guidelines. You’ll also want to ask if your current visual esthetic communicates the tonality and context you identified in Step 1. If the answer is no, identify the minimum visual changes you can make to your brand to be on equal planes of communication visually and strategically.

Step 3 Rules to FollowStep 3: Rules to Follow

As you approach visual ideation and adding Material Design into the mix consider a few recommended rules to follow:

  • Respect Ratios
    The incremental growth that Google uses both within their design grid and typography is a great rule to apply. It helps set up a level of hierarchy in your app that is fundamental to any good design navigation.
  • Use Shadows
    Remember Material Design is a physical way of viewing digital objects and physical objects always have shadows.
  • Pattern is Language
    Apply as much of the visual pattern as you can because it’s the language your customers’ speak.

Step 4 Minimum Viable Design CustomizationStep 4: Minimum Viable Design Customization
If there are 2 things you can do quickly to customize your android app from out of the box Material Design it’s this:

  • Customize your color palette:
    This is the step everyone seems to be applying.
  • Customize your font:
    Customizing your font is the quickest way to making your brand feel more like you and less like Google. Roboto is a system font and it’s not necessary for it to be your font.

Step 5 Sketch It OutStep 5: Sketch it Out
Keeping in mind everything you’ve learned about Material Design and your brand gather your team and ideate on paper how you can establish your own look. Sketch out basic UI elements like buttons, icons and cards and see how you can make them unique to your brand. Six up sketching is a great way to ideate this without getting stuck in the visual design phase too early.

Put these up along with your other artifacts and see what feels right for your product. Maybe it’s just as simple as rounded corners don’t match my branding or the system icons are too cute for my brand’s tone of voice. The goal here is to identify what changes/additions you can make to quickly identify your own look and feel.

Ultimately you want to be compliant, but not a copycat. Material Design guidelines may seem prescriptive but they’re really meant to be adapted for your brand. By getting to know your brand you can pick and choose what parts you should apply strategically.

User and events tracking for early products – part 1

By on in Everything Else, Product Management, Startups

It’s rarely too early to instrument a web or mobile app with user and event tracking services. Sure, it’s ideal to only track the metrics needed to answer specific questions, yet it’s not often the case that those questions are known during the early stages of product development. It’s been our experience that we can manage problems associated with having too much data (analysis paralysis), but we can never go back and magically collect data that wasn’t tracked.

Over the course of a few projects, we’ve come to rely on a core suite of four analytics apps for their flexibility, ease of use, low startup costs and ability to adapt and mature with the product or business. It might seem like four tools is a lot, but the tendency in the analytics business has been for specialization, with countless vendors offering extremely niche products to cater to very specific needs.

Because of the proliferation of offerings, it can be difficult to make a final choice on analytics platforms when you are starting up a product, as you may find your needs changing over time. This brings us to the first product:


Segment’s main purpose is to be the single layer of code implemented in the product which allows data to be pulled out and then handed off. Segment enables hand-offs to an incredible number of other analytics-type products without having to write or insert any additional code, typically allowing non-technical business users to add or remove analytics products without the need for dev and test support.


Heap is the next product we’ve implemented. Heap is a great general purpose analytics platform; tracking both users and events. It allows a user to visually tag parts of the site for analysis and setup funnels to measure these tags. Beyond the ease of use, Heap’s other big selling point is that it can do this analysis retroactively. For example, if Heap has been implemented in a product for three months and one day you decide you want to look at the click through on an untagged CTA you can tag it in Heap and see the data from the previous 90 days. This is very powerful tool as product development ramps up, as the business may not know 100% of everything they want to measure up front.


Intercom is a user-centric analytics and messaging platform. They present a lot of the same data as a general purpose analytics platform, but they do so by showing activity clustered around individual users. Moreover, they provide an unobtrusive messaging tool which enables the business to communicate with users for customer development and support. Intercom is great for understanding the behavior of users across their lifetime, tracking engagement, retention and strategically communicating with users.


Optimizely is a great product for quickly and easily setting up A/B/Y tests to test all kinds things, and is especially well suited for testing UI and content. For products with a small number of users, Optimizely can be used for rapidly iterating on user interfaces to gain qualitative feedback. It really shines when the product has enough users to run tests at scale. Like Heap, Optimizely tests can generally be set up without the involvement of a developer which reduces the barrier and cost of running tests.

We’ve found this suite to be a great starting point for a new analytics implementation as it reduces time to set up and enables the business to easily slice and dice their application usage data in ways that produce insights – which is the true goal.


In the next chapter we’ll take a look at how we’ve used three of these tools on our product Stickies to quickly scale tracking users and events.


McDonald's 99 billion served

There will be SQL

By on in Database, golang

I recently worked on my first Go project. As a web developer, the applications I work with are often database driven. If you are like me, you might be curious about what working with a database is like in Go. And if you're used to working with a web framework like Rails, you might be wondering about an ORM. As the title of this article implies, there aren't a lot of options. In this article we'll learn to relax and go back to working without an ORM.

Continue reading …

Open Source Ruby & JavaScript Pairing 7/14/2015

By on in Everything Else

img_1013 copy

Come for an evening of open source Ruby & JavaScript pairing at Carbon Five on July 14, 2015!

This workshop is an opportunity to improve your coding skills by pair programming on an open source project. Every student will be paired with a volunteer who has prior experience with the language and contributing to an open source project.

We’ll be working on a federal government open source project, the Open Data Maker from 18F — the perfect opportunity to become a better programmer and code for your country!

Sign up

Event Details

@Carbon Five SF
585 Howard Street, Floor 2
San Francisco, CA 94107
Tue 7/14/2015 6PM – 10PM

Don’t Fear the Rebase: Git Garbage Collection and You

By on in Everything Else

At Carbon Five, we work with developers of all experience levels. One source of fear and uncertainty I’ve seen at all levels is Git, the primary source control system used by our teams. Fear of losing work due to mishandled merge resolution, resetting branches or interactive rebasing is keeping developers from using some of the more powerful aspects of the tool. I believe this fear to be unwarranted and hope to show that it’s much harder to truly lose code in Git than most would guess. Here’s the high-level overview of what you need to know:

  1. If you want to keep any bit of code, commit or stash it
  2. By default, anything you commit will be accessible for at least 30 days and anything you stash for two weeks
  3. Merging and rebasing are always safe

Continue reading …

New Faces At Carbon Five

By on in Everything Else

Carbon Five offices have seen some plucky new faces recently. We’re happy to have four amazing interns lend their excitement, passion, and creativity to our office this summer. Lee & Treyce join us from California College of the Arts (CCA), Abiel joins us from Stanford and is a fellow of CODE2040, and Devin joins us from the Art Center College of Design.

Lee Martinez

Lee Martinez

Growing up in a military family, Lee has lived in many places in the U.S. and on the other side of the globe. The closest thing to “home” is Louisiana, where his family currently is. He used to be an Illustration major at the University of Arkansas at Little Rock, and he is currently studying Interaction Design at California College of the Arts. Continue reading …