We're hiring!

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

Why Software Design Matters

not intuitiveAre preschoolers smarter than college students? When it comes to figuring out gadgets and iPhone apps, it certainly does seem that way sometimes.

I heard an interesting piece on NPR several weeks back about this very issue. Researchers at the University of California, Berkeley, have found that 3- and 4-year-olds use a different process than older children and adults to figure out how things work. In experiments conducted by the researchers, children had to figure out how to operate a specially designed music box. According to the NPR story,  “Children try a variety of novel ideas and unusual strategies to get the gadget to go.” For that reason they are often quicker to figure out how novel technologies work.

As we age, we start to expect things to work a certain way. And when new gadgets don’t meet our expectations, we struggle with them. Read More »

Posted in Designing for Users | Tagged , | Leave a comment

App Review: Frank Deloupe Color Picker

There’s a very small number of apps on my Macbook, but Frank Deloupe has made the cut. It’s a beautifully simple color picker that integrates with Adobe Photoshop and offers a number of very useful features. So far, it’s been well worth the $0.99 price tag.

Screen Shot 2014-08-05 at 8.09.32 AM

Frank Deloupe’s Features

  • Highly accurate color picker. – Frank Deloupe allows you to select from many color profiles, including RGB, RGBA, and Hex codes with or without the ‘#’ symbol. The ‘loupe’ will pick colors down to the individual pixel.
  • Read More »

Posted in UX/Design Tools | Leave a comment

How to Animate Images in a UIImageView with Completion Handler

I needed to do a simple animation on my iOS project recently, and I was frustrated by how difficult it turned out to be. I wasn’t writing a game, so I didn’t need to bring in the power of the Sprite Kit libraries. All I needed was to show a series of images in a UIImageView.  

My first attempt was to use the UIImageView.animationImages api to do my animation. This was incredibly easy, but very limiting. After the animation was complete, I needed to show the last frame of the animation in the UIImageView. This proved to be very difficult if not impossible with the animationImages API. After the animation completes, the UIImageView is reset to the original image that was displayed before the animation started. If my animation had been symmetric, it would not have been a problem.

Attempt #1 – Using the AnimationImages Property for Animation

This API is really simple. Load up a series of images in an array and set the UIImageView.animationImages property to that array of images. Next tell the UIImageView how long your animation is and whether to repeat the animation and call start. It is that easy. Read More »

Posted in iOS / OS X | Tagged , , | Leave a comment

Plays Well with Others – Lessons in Reusable Tooling

I’ve used many languages for my scripting needs, but my favorite — believe it or not — is probably Bash. Bash may not have any types, and scripting with Bash may be fraught with pitfalls, but sometimes the problem at hand is solved most succinctly and elegantly with small focused programs that compose well.

Bash’s composition comes in the form of piping one program’s output into the next program. No program needs to know where its input comes from, just like Lego blocks don’t care what block they stack on. This is an incredibly useful approach. For instance, take a look at how easy it is process the contents of the clipboard:

pbpaste | base64 | pbcopy

We just base64-encoded whatever was in the clipboard (at least, on Mac OS X; Linux has similar programs under different names, and on Windows you may need to write your own versions of pbpaste and pbcopy). You can use pbpaste and pbcopy and the rest of the Bash toolbox to do whatever processing of clipboard text you have in mind, and thanks to pipes, you can do it very concisely. Read More »

Posted in Development Techniques, Growing as Makers | Tagged | Leave a comment

Fixed Price vs. Time & Materials vs. FBSC (Fixed-Budget, Scope-Controlled)

Atomic Object builds custom software for our customers. Because of the complexity involved in building a great software product, software development projects are always more difficult to price than a product.

As a result two different strategies for pricing services, such as building software, have traditionally been used by most companies. These are called “Fixed Price” and “Time And Materials”.

Fixed Price

A Fixed Price strategy locks in the total price of the project upfront.

  • Static Variables: Scope, Cost
  • Flexible Variable: Quality
  • Assumption: The estimate and plan are correct and will not need to be changed.
  • Risk: On Consultant (Responds by inflating cost; may compromise quality if estimates are inaccurate.)
  • Effect of New Information: Causes conflict about what’s covered by the scope vs. what requires a change order. New ideas are rarely incorporated.

In this strategy, the vendor is taking on all the financial risk of a project. They have committed to completing the project for a specific price. If they complete the job early, it’s a bonus for the vendor (and you the client has overpaid), if they don’t then the vendor loses. In order to mitigate this risk, they will want to know all that can be known about this project and the risks before it will commit to a fixed price. Read More »

Posted in Planning Your Project | Tagged | Leave a comment

25 Reasons I Love Being an Atom!


I always find myself unintentionally bragging about my job to Facebook, my friends and family – and recently, I took a survey for the 2014 Crain’s Cool Places to Work in Michigan. It motivated me to give my perspective as to why I love my job and why working at Atomic Object is so flipping awesome!

Respect & Encouragement

  1. I’m on the A Team! – My boss Shawn once explained to me that everyone who works for Atomic is part of the A-team and that we don’t have room for a B-team. And if you met some of my co-workers you’d understand why. I work with some of the most brilliant individuals in the industry and it rocks for me to be apart of the team!
  2. Our bosses trust us. – Since we are the A-team our bosses trust us to do a great job. No micro managing exists here.
  3. 1 on 1’s – Once a quarter our Managing Partners take time out of their busy schedules to check in with each and everyone of us to check in to see how we’re doing. They care about our well-being and want to provide us the opportunity to share any concerns, worries, or excitements!
  4. Read More »

Posted in Culture | Leave a comment

JRuby, Rails, and Jetty – Where Are my Assets?

Recently, I was spinning up an extremely simple Rails 4 project, which was to serve as a portal to several other applications deployed on the same Jetty instance. This was not my first JRuby on Rails rodeo, so I was expecting a smooth deployment.

When I deployed the WAR into a Jetty instance on my local machine, neither the CSS nor images were being served correctly. The application server was giving me a 200 return code with the correct content length header, and then giving me a zero-byte response. Having never encountered this issue before, I talked to my pair on the project, who was standing up a separate Rails 4 app for the same application server. He was seeing it too. We compared notes. Heads were scratched. Read More »

Posted in jRuby | Leave a comment

For Product Demos and Lightweight Usability Testing on Mobile, Give Ziggi-HD a Try

Due to the form factor and software constraints of personal devices such as phones and tablets, giving demos and observing user testing on platforms other than desktop and laptop computers has historically been complicated. Crowding around the device so that everyone can see is awkward, resulting in uncomfortable demos and self-conscious user testers.

Recently, my colleague and I wanted to perform a lightweight usability test on a mobile web app. We were interested in gauging users’ ability to perform an end-to-end workflow within the application, as well as identifying any particular pain points that could be mitigated. We took an afternoon and tested with 6 volunteers, and we used our new Ziggi HD USB Camera as a way to comfortably observe while the user completed the test. It worked great! Read More »

Posted in UX/Design Tools | Leave a comment

Backbone Event Best Practices

When our Backbone.js apps become complicated, we need to utilize Backbone’s EventAggregator. From the Marionette docs: “An event aggregator is an application level pub/sub mechanism that allows various pieces of an otherwise segmented and disconnected system to communicate with each other.”

// Three ways of creating an event bus in backbone
var marionetteVent = new Marionette.EventAggregator();
var backboneVent   = new Backbone.Wreqr.EventAggregator();
var vent           = _.extend({object}, Backbone.Events);

1. Make sure you need it.

It’s harder to follow the execution of an event-based program than of regular synchronous method calls, so make sure you understand why you need an event in the first place. It’s worthwhile to ask: if events weren’t available, what would I have to do to solve this problem? Read More »

Posted in Platforms & Languages | Leave a comment

Pro Tip: Anticipate Your Customers’ Needs


Over the years, I have learned and observed others at Atomic Object anticipating the needs of a customer to ensure that, if an issue does arise at a future date, we can react quickly and minimize any complications. Taking the time to anticipate future needs and putting yourself in a position act on them shows that you give a shit and have the customer’s best interest in mind.

Here are a few needs I think are important to try and anticipate. Read More »

Posted in Business Practices | Tagged | Leave a comment