We're hiring!

We're actively seeking developers and designers for our Detroit & Ann Arbor locations.

Software Practitioners Shouldn’t Overlook the Design Mgmt. Institute

Are you professionally involved with software at some level — business, programming, high-level design, tangible design, marketing, workplace planning, testing, or something else? Are you aware of the Design Management Intitute (DMI)? No? Go check it out immediately!

Design Management Institute logoIn late 2012 I started reading papers in DMI’s annual Academic Design Management Journal and have truly enjoyed what I’ve read so far. The papers are fairly dense — they read much like the academic journal papers I was reading as a graduate student — but are also rich in depth.

Notable Recent Papers

Here is an overview of some of the papers I’ve read in the last two journals. Read More »

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

Finding Reliable Information with Quora, AMA, & Verified Accounts

The Internet has forever changed the way we learn, share, and gather information. From Wikipedia to Google, our ability to consume a topic of knowledge is easier now than it ever has been. However, some topics have few reliable sources, while others lead you down worm holes of opinion blogs with little to no consensus.

Quora, Reddit’s Ask Me Anything, and Twitter’s Verified Accounts try to address the problem of finding reliable information and answers to difficult questions. By connecting you directly with the content authorities, these new services take the guessing out of credibility. Questions like, “What is it like to work at X?” or “How does this very specific model of physics work?” now have places which house the answers.


Quora.com provides an open framework for users to ask questions and then tries to sync up other users who have insight into those particular questions. Because Quora tries to match questions with experts, most questions are answered by users with authority on the content. Answers are voted on, which further filters out bad answers and encourages good ones. This gives users the unique ability to influence reliability and, generally, the topic expert’s answers will surface. For example, on a recent question about “What’s the worst thing about working at Facebook?”, employees from Facebook commented on Quora providing feedback that, until now, would have been scattered throughout the web and hardly searchable.

Quora also offers users the ability to edit the way a question was asked, and allows users to connect people with questions they feel the user could answer. For example, Quora attempts to answer questions on a local level. As I use the service, I am commonly asked to answer questions about Grand Rapids, MI. Knowing you’re getting local information from a person who actually lives there adds to the credibility.

I highly recommend signing up for Quora and reading their daily digest as a great way to find cool and verified tidbits.

Reddit – Ask Me Anything

Reddit’s Ask Me Anything also allows users to post questions and has become popular enough to attract big name celebrities ranging from Bill Murray to President Obama. In contrast to Quora, AMA usually starts with a post from a self-described “expert,” giving users the chance to ask the expert anything.

Reddit’s AMA can be overwhelming at times. Threads get long, and the minimalistic design of Reddit causes the reading experience to be rather lack-luster. AMA becomes a large thread of hard-to-read Q&A lines when an AMA celebrity enters. Recently I came across Interviewly which takes AMA threads and presents them in a very easy to read format.

AMA and Quora are similar in the way that they try to connect user questions with expert answers, but they operate differently. Where as Quora tries more for a social platform, AMA is a Q&A board. AMA has become the leader for user-based Q&A content generation. The sheer number of users filtering AMA answers causes questions to be answered by many leading experts; opinions are quickly filtered to the back. Quora goes further to try and filter out content experts where AMA counts on users voting to do this filtering.

Verified Accounts

Twitter’s Verified Accounts, unlike the Q&A services above, provide a way to verify famous individuals and know their information is from a reliable source. Before Twitter, individuals would have to run their own blog as an outlet for this type of information. Now, Twitter has taken this one step further. Verified Accounts allows for this information to be in one place, as well as adding that extra stamp of verification.

Quora, AMA, and Verified Accounts aren’t the only sites giving users more reliable information. There are plenty of other examples of this pattern emerging to solve this verified-information-need, and I’m excited to see what’s next and how many more of my childhood heroes will allow us to ask them anything.

Posted in Personal Optimization | Leave a comment

Monitoring Your iOS Traffic

There are a number of free ‘sniffer’ tools around, for your PC or Mac, for looking at and changing the network traffic. The venerable Wireshark, Fiddler, and Burpsuite are some of the ones that I have used in the past, and still fire up today.

What about your iOS devices though? What programs are available for these, so you can see what your phone and iPad are sending out and receiving? I wouldn’t want to try and use an iOS version of Wireshark on my phone, not just because it hasn’t been ported to work on iOS, but because viewing all the data and changing it on a small phone screen is just not physically feasible. So what can you do if you want to see what your device is sending out, and how can you change what is going into it? Read More »

Posted in Developer Tools | Tagged , | Leave a comment

Charting Data with jqPlot

Some of the most interesting and challenging projects involve data visualization. It can be very difficult to express data in a clear way and also make the product aesthetically pleasing. There are many different ways of presenting data to users, and choosing the “correct” visualization is not always a simple decision. Having numerous tools at your disposal, or at least greater awareness of what is out there, can help you make a better decision.

I was recently experimenting with a library called jqPlot, jqPlot is a jQuery plugin that supports drawing line, bar and pie charts with many customizable features. The project I was working on involved a device that monitors the temperature of the contents of a kettle during the process of brewing beer. My goal was to show the temperature as it changes over time and also to indicate a prediction of when the temperature would reach a desired target value. Here is what I ended up with:


To produce the chart above, very little html code was required. Read More »

Posted in Web Apps | Tagged , | Leave a comment

I Hate #regions

As software consultants, we work in many environments. Most of the time we are working in our own environment on a brand new project, but sometimes we work with a team of client developers on existing software. In the later case, we have to be mindful of their coding standards. One practice that drives me nuts is code organized into #regions.

What’s Wrong with Regions?

Microsoft introduced #regions to help organize big files into understandable chunks. In my opinion, if your code can be broken up into regions, then it can be refactored into smaller files. I try to write my classes with single responsibility in mind, where a class has a single responsibility. Therefore regions are not required to organize the code into responsibilities.

Regions are also used to separate private, public, and protected variables, properties, and functions. This is where I see them used most often. If your class is small enough, there is no need to organize them into regions. Read More »

Posted in Developer Tools | Tagged , | 4 Comments

Strengthen your Software Investment with Research, Design, and Planning


If you or your organization is ready to invest thousands of dollars on building a piece of software, you hopefully already have a good idea of who your users are and how they will interact with your product. You could be a subject matter expert, or your company may be a leader in the field that your project is targeted towards, putting you in a great position to provide background on what the software ought to do and how it should be used. What you’re looking for is a top-notch team ready to hit the ground running and build your software.

In a previous post, I discussed how Atomic Object engages with our clients in a phase of Research, Design, and Planning (RDP) at the beginning of each project to help define and refine a software product. If you’re well-prepared and grounded in your field, it could be difficult to see how this work could be worthwhile for your project, and skipping RDP may seem like a great way to save some money towards feature development. However, just a bit of time up front can pay off in a big way during the build phase of your product. Here are several ways an RDP phase can benefit a project. Read More »

Posted in Planning Your Project | Leave a comment

Cross-Train to Become a Better Programmer

last-minute-code-review-smallProgramming attracts people from a huge number of backgrounds. I’ve seen great programmers who started as mathematicians, journalists, musicians, physicists, and mechanical engineers. Even formally-trained programmers come from a wide range of liberal arts, engineering, and business schools. It’s one of few professions where you can be rewarded just for being smart and working hard.

To be honest, I’ve always been embarrassed by how personal our methods are — it’s difficult to separate effective methods from natural talent. Maybe our diversity is the reason I’ve heard us criticized as navel gazers pretending to be engineers. “Herding cats” was coined for us after all!

We are taught data structures, formal methods, computer architecture and technology. We self organize into communities and movements like literate, agile, and craftsman. We write tests, review code, follow best practices, decouple our classes, encapsulate our designs. It’s a little half-baked — even cargo-cultish on a bad day.

Fundamental software design is almost completely missing from programming. Is design valuable? Can we learn how to design? I think so, but not yet from the software community. Cross-train into mechanical design! Read More »

Posted in Evolving the Industry | 2 Comments

Cool and Easy HTML with Emmet

emmet-logoAmaze your friends and write HTML faster with this one cool trick!

But seriously, native HTML is repetitive and annoying to write. Emmet provides an intuitive and sleek alternative. It’s widely supported, and its simplest features can be adopted no problem on day one of using it. Plus — it feels great to use, and it just looks cool.

Emmet, formerly known as Zen Coding (developed by Sergey Chikuyonok), is a super cool shorthand tool for writing native HTML code. There are plugins in most editors (including Sublime Text, Visual Studio, Eclipse, IntelliJ, and Brackets), so there’s no reason not to use it. Read More »

Posted in Developer Tools | Tagged , , | Leave a comment

Long-Term Planning and Productivity with the Compact Calendar

In 2010, my good friend Jason Mettler introduced to me to my favorite high-level planning and productivity tool — the Compact Calendar from David Seah.

The Compact Calendar is a great tool for planning activities across a year. It’s laid out as a vertical bar of days and months on the left and open space on the right for notes.

My Compact Calendar

Benefits of Long-term Planning

I’ve found that zooming out to a year’s worth of time is very helpful for long-term planning efforts where identifying intermediate milestones is valuable. I’ve used the Compact Calendar for the following planning activities. Read More »

Posted in Personal Optimization | 1 Comment

Writing Functional Python

Functional programming has a lot of advantages that have been enumerated over the years. Being a bit of a Pythonista, myself, I can’t help but introduce functional concepts into my Python code. Though Python is not a functional language, it doesn’t mean that your Python code can’t benefit from some of these concepts.

Perhaps one of my favorite illustrations of functional Python comes in the treatment of loops — or more accurately, their removal from my code. Before I demonstrate how to do that, allow me to introduce a very contrived example.

Let’s say you’ve parsed a configuration file into a list of lists, and you need to be able to access a particular settings by keyword. The following snippet does exactly that in a traditional format.

configurations = [["name","Bob"], ["email","bob@roberts.com"], ["template","dark"]]
def get_config_value(desired_key, configs):
    for key_value in configs:
        if key_value[0] == desired_key:
            return key_value[1]
print get_config_value("name", configurations)

This code works well, but I find the nested statements less than ideal.

Functional Alternative #1 – Generators

Generators simply create iterators (i.e., something you can use in a loop) without constructing a complete list ahead of time. Generators are lazy loaded and are more efficient than their eager-loading cousin, the list comprehension, when working with large data sets.

The following returns the same result as the previous example with one less layer of nesting: Read More »

Posted in Functional Programming | Tagged | 5 Comments