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
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
I 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.
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
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
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.
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
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
The 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
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
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
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.
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