We're hiring!

We're actively seeking developers & designers for our new Detroit location. Learn more

Implementing Advanced Math Functions

Almost every standard library (in almost every programming language) comes with a set of advanced math functions (sin(), cos(), sqrt(), arctan(), etc…). However, (very) occasionally you need an implementation of these functions more closely tuned to your use case. How does one go about implementing these functions? This post attempts to explain how! Read More »

Posted in Embedded Software | Tagged , , , , | 7 Comments

Designing Around an Experience

When designing an app it’s easy to think about the thing I’m building. When sitting down to design, I usually start outlining the areas of the app I think should be there. I then draw sketches depicting the screens around that architecture. This doesn’t always work because what I think might be good for the users isn’t always what they actually need or want.

One of the most helpful things I took away from the Cooper UX Bootcamp is to take a step back before I begin the process of deciding the ins and outs of the app and, first, think about the big picture. By understanding the context, motivations and desires of the person using the product, I can better determine how to design the details.

“It provokes conversation about the interface design and its ability to help achieve user goals without getting mired in visual refinements.” —Cooper

The big surprise and delight for me in learning this process was to watch wonderful ideas naturally emerge out of the process with very little guesswork. It allowed us to test our hypotheses and intuition within a more visible context.

For each step in this process, I’ve outlined what it IS, what it is NOT and why it’s helpful. Read More »

Posted in Design & Development, Prototyping, User Experience | Tagged , , , | 1 Comment

Twitter’s Innovator’s Patent Agreement

Technology patents appear to be broken. When a company like Yahoo can claim to own “customizing views to certain friends” and “Dynamic Page Generation” it’s clear to me that patents are broken. Twitter, and others like RedHat, appear to agree and have stepped up to do something about it.

Twitter’s Innovator’s Patent Agreement:

[The] Company and the Inventors believe that software patents should only be used to make a positive impact in the world and, accordingly, should only be used for defensive purposes…

Some argue this isn’t enough but it still feels like a step, even if a small one, in the correct direction. Read more about Twitter’s IPA here.

Posted in Risk | Leave a comment

iOS Mirroring and Programmatic Airplay Selection

Currently, Apple limits access to AirPlay and mirroring capabilities in their public APIs. Developers are given a great deal of latitude in terms of what content to display but are limited in how and where that content is displayed.

On a recent project we needed more control over how and when content is displayed via AirPlay. Luckily for us we were not burdened by App Store Review Guidelines since it was a prototype and didn’t have to make it into the App Store.

So…down the Private API rabbit hole we went.

Read More »

Posted in Languages, Mobile, Prototyping | Tagged , , , | Leave a comment

More Takeaways from Cooper UX Bootcamp

As you may have heard, a bunch of us atoms went to Cooper UX Bootcamp Midwest a few weeks ago. As you also may have heard, it was a really great experience. Other people have done a great job of telling the story of what went on. You can read those stories here and here, so rather than reiterating what others have said very eloquently, I want to share four big things I learned at UX bootcamp.

_MG_5771.jpg

Read More »

Posted in User Experience | 1 Comment

A craftsman exchange, part 1

This week we hosted Mattias Holmqvist from Citerus in our office. Mattias and I are kicking off the first Atomic-Citerus craftsman exchange. Here’s my perspective on the opportunity and a summary of the first week.

Mattias's brown bag on Clojure
Read More »

Posted in Culture | Tagged | 1 Comment

Organizational departments aren’t aligned with innovation

Dedicated, poly-skilled project teams are more effective at delivering innovation projects than well-honed, departmentally-distributed, operationally-focused teams.

The choice of using an internal vs. external team is often considered when planning how to take on a significant innovation project.

Internal expertise and capacity are two common factors used to assess the viability of the internal team.

Even if internal expertise and capacity predictions appear sufficient to internally pursue an innovation project, a departmentally-oriented organizational structure introduces subtle forces that can significantly increase the risk of late delivery and reduced differentiation. Innovation will be unintentionally suffocated.

Read More »

Posted in Iterative Development, Process & Practices, Project Management, Project Planning, Risk, User Experience | Tagged , , | Leave a comment

Improving Unit Test Iteration Speed with Rails, Spork, and Resque

{13 of 365} TechSmith Titanium Sporks
I’ve been working on a project using Rails lately, and one of the most challenging things about it has been trying to make the tests run efficiently. Unfortunately, there’s so much setup to get the Rails environment going that simple little unit tests take about 5 seconds to run. Of that 5 seconds, it takes about 4.9 seconds for the Rails environment, and 0.1 second for the test itself. So naturally we want to use tools like Spork that will let us load up much of the common setup, and then just fork() each test to make sure it runs in a “pristine” environment. However, this gets really tricky when you are trying to both maximize how much code is loaded pre-fork() and maximize your ability to iterate on the code while keeping Spork alive. We found it all too easy to get into a state where just starting up the Rails environment loaded all of our models and controllers, and many of their attendant support classes. So of course any time you changed one of those pre-loaded classes, the change would not be reflected the next time you ran a test – unless you killed and restarted Spork, which squandered any time benefit you might get from using it in the first place.

Read More »

Posted in Testing, Tools, Uncategorized | Tagged , , , | Leave a comment

Letter to an Undergraduate Computer Science Class

Last week I spoke to an undergraduate data structures class at GVSU. The talk was partially about data structures, but mostly about becoming a good developer. Most of this is old hat, but I think it’s good advice to just about anyone.
Read More »

Posted in Community, Culture, Design & Development, Languages, Tools, Unix, Linux, and Bash | Tagged | Leave a comment

Detroit: The Land of New Opportunity

You can feel it. It is real. Something bigger than all of us is happening. Do any research and immediately you learn about Detroit’s rapid decline of population and business. Statistics on crime and corruption paint an even worse picture. Drive two blocks and you go from stunning high-rise buildings and large iconic art to graffiti-covered abandoned and burned structures. It appears on its surface to be the lost American dream.

But look closer. Read More »

Posted in Community, Culture, Startups, Workplace | Tagged | Leave a comment