We're hiring!

We're actively seeking designers and developers for all three of our locations.

Why You Should Never Use the Word “Obviously”


One of our core values at Atomic is Teach and Learn. This belief is evident in many different aspects at Atomic, from the external (presenting and attending conferences) to the internal (setting up brown bag presentations and weekly cross-team design reviews). It is also clear in the day-to-day work, like pairing and problem solving as a unit instead of as individuals.

As I’ve spent time learning and listening to the great teachers we have at Atomic, I’ve noticed one word missing from nearly everyone’s vocabulary: “obviously”. Read More »

Posted in Culture | Tagged , | Leave a comment

3 Reasons You Shouldn’t Ask Us to Sign your NDA


Nondisclosure agreements are legal contracts that limit one or both parties from disclosing information covered by the NDA. They can be used to protect trade secrets, business plans, customer lists, sources — in short, pretty much any aspect of business. They tend to be short and are readily understandable by non-lawyers.

You may be surprised to find that Atomic Object usually doesn’t sign NDAs at the first stage of a potential relationship. We don’t do this entirely from our self-interest, we just think that you don’t really need one, and you’re better off without one. Read More »

Posted in Choosing Your Team | 2 Comments

My Atomic Experience

IMG_4534I recently accepted a position with a new company and was offered a compelling opportunity that balances my passion for designing software experiences with my love for high aesthetics.

Being at a point in life where a significant change is needed, this urge to start something new is very exciting. Over the past few years, I have spent a lot of time building my craft, testing with practices at many stages of the design process. Through this transition, I find this new opportunity to be unveiling new design challenges, which is exciting for me.

Life as an Atom

Starting a new job is always tough, but leaving a good job is always tougher.

Read More »

Posted in News & Events | Leave a comment

Six Ways Developing Software Is Like Being a Parent


Four months ago I became a father. My daughter’s birth changed my life in a million ways. Most of these are good (there’s nothing in this world that compares to your child’s smile), but it has also meant less sleep and especially less spare time. I’ve learned a host of new skills that are pretty different from the ones I hone as a software developer.

That said, the two domains are not totally unfamiliar. Here are just a few ways working on a software project is like being a parent.

You get used to changing requirements.

What babies need and what software projects need can change in the blink of an eye. Six months in, it turns out rocking your baby to sleep isn’t cutting it anymore — she needs her favorite toy and for you to sing a song to her. That’s not all that different from working on a web app that takes off, and suddenly you need to worry about things like internationalization and bandwidth and Facebook login. In no time at all, you’ve gone from milk to solid food. Read More »

Posted in Growing as Makers | Leave a comment

How High Should We Set the “Override” Bar?


I recently attended the 2014 Agile Conference in Orlando and really enjoyed my time there. One of my favorite sessions was the “Netflix Organizational Structure: Freedom, Responsibility, Impact, and Agility” talk presented by Roy Rapoport.

I found the presentation full of great ideas, but one stood out especially — the concept of a manager’s “Override Bar”. Roy explained that Netflix optimizes its culture for innovation first, hires the best people it can across the board, and largely trusts them to choose and plan their own work. But… what do you do as a manager when your team wants to work on the wrong thing? Read More »

Posted in Project & Team Management | Comments closed

Learning to Love Ember’s Dependency Injection

Ember is an opinionated framework. Like other such frameworks, it takes a while to learn how the pieces are designed to fit together and how you can structure your code to be harmonious with it, rather than fight it.

What I’ve found is that often, it helps to think outside the boxes ember provides you: controllers, routes, components, etc. Ember’s dependency injection is a great tool for helping you with this.

The Basics

Objects are named in Ember’s dependency injection container are given a full name that consists of two parts: the type of object, and a name. For example, route:application would be the name for your ApplicationRoute. Or controller:question.edit for your QuestionEditController. You’re not limited to Ember’s predefined categories, however; you are free to make up your own type. Read More »

Posted in Ember.js | Tagged , | 1 Comment

Visualizing Garbage Collection Algorithms

Most developers take automatic garbage collection for granted. It’s just another amazing feature provided by our language run-times to make our jobs easier.

But if you try to peek inside a modern garbage collector, it’s very difficult to see how they actually work. There are thousands of implementation details that will confuse you unless you already have a good understanding of what it’s trying to do and how they can go fantastically wrong.

I’ve built a toy with five different garbage collection algorithms. Small animations were created from the run-time behavior. You can find larger animations and the code to create them at github.com/kenfox/gc-viz. It surprised me how much a simple animation reveals about these important algorithms.

Cleanup At The End: aka No GC

NO_GCThe simplest possible way of cleaning up garbage is to just wait until a task is done and dispose of everything at once. This is a surprisingly useful technique, especially if you have a way of breaking up a task into pieces. The Apache web server, for example, creates a small pool of memory per request and throws the entire pool away when the request completes.

The small animation to the right represents a running program. The entire image represents the program’s memory. Memory starts out colored black, which means it isn’t used. Areas that flash bright green or yellow are memory reads or writes. The color decays over time so you can see how memory was used, but also see current activity. If you watch carefully, you can see patterns emerge where the program begins to ignore some memory. Those areas have become garbage — they are not used and not reachable by the program. Everything else that isn’t garbage is “live”. Read More »

Posted in Development Techniques | Tagged , , , | 17 Comments

Tools & Practices for Remote Teams, Part 2 – Communicate, Communicate, Communicate!

Two developers stand in front of a large monitor, conversing with two other developers via a video call.

This is part two of a two-part series on tools and practices for maintaining a healthy and effective remote team. In part one, I discussed infrastructure and tools for remote teams. In this second part, I’ll be focusing on day-to-day practices and attitudes. As with part one, this advice is not only for remote teams — you’ll find it beneficial even if you work on a co-located team.

The central tenet of maintaining a healthy and effective team is to make morale, cohesion, and communication a priority. Read More »

Posted in Project & Team Management | Tagged | 3 Comments

Nature Matters – Insights on Biomimicry


Image courtesy GreenWizard.

Biomimicry, biophic design, nature-based design — these are all terms that describe how natural systems offer powerful models that influence the built world (including architecture, workplace design, and technology). It’s all about finding design inspiration from nature to solve human problems.

Here are some insights on biomimicry and the potential it holds for long term sustainability in architecture, workplace design and software development. Read More »

Posted in Workplace | Tagged , , , , | Leave a comment

Finding Inspiration at CreativeMornings Grand Rapids

I’ve had the pleasure of attending the last two CreativeMornings events in Grand Rapids. And though the themes for each event were minimal and heritage, when I think back on them, the word inspiration is what comes to mind.

A shelving unit whose design was inspired by the unexpected.

Nicolai Czumaj-Bront’s piece Resonate was inspired in the most unexpected of circumstances.
Image credit Nicolai Czumaj-Bront.

Inspiration Is Valuable

Nicolai Czumaj-Bront spoke at the June 2014 CreativeMornings event and Chuck Saylor spoke at the July 2014 event, and in each talk, the speaker discussed the importance of inspiration. Saying that “I need inspiration” or “I’m going for a walk so as to feel more inspired” has an unfortunate negative connotation; in some ways, it’s like the person is saying “I’m going to keep procrastinating and putting off my work.”

I’m sure Chuck would disagree with that statement, as he reminded us of the value of sitting and watching the ocean for a while. And Nicolai gave a concrete example: one day while driving through the the midwest United States, he noticed the slightly undulating hills in the landscape in a way he has not noticed before. It inspired him to draw out some quick sketches — sketches that ultimately became Haworth’s Resonate. Read More »

Posted in Growing as Makers | Tagged | Leave a comment