Articles on Software Design

Prakash Venkatraman

Prakash Venkatraman

Greenfield Projects: Seven Ways to Set Yourself Up for Success

Greenfield projects have a hidden set of needs — and each one can be an opportunity for growth if handled well! But if handled poorly or if not handled at all, these pitfalls can perpetuate and multiply across the lifetime of the project, taking you further and further away from your treasure and further into the endless cave of despair.

Wil Wade

Wil Wade

QCon Talk: Thinking Methods

Wil Wade, senior developer at Carbon Five, will be speaking at QCon New York on June 25. His talk on thinking in systems focuses on understanding the context of this complexity through the patterns and structures around us; a perfect complement to Agile’s small iterable steps. This interview was originally published on QCon New York.

Jonah Williams

Jonah Williams

Writing Deterministic & Performant Specs with Capybara

Acceptance tests are a great tool for guiding [outside in testing] and defining application behavior. Unfortunately they are also notoriously slow and often brittle. At Carbon Five we usually use Capybara to drive our acceptance tests (either directly in RSpec feature specs or within Cucumber steps) so let’s explore some ways we might accidentally write

Jonah Williams

Jonah Williams

Designing mobile APIs – dynamic content

On mobile devices native UIs offer superior responsiveness and performance but web views offer flexible layouts and data driven content. How can we combine the strengths of both to produce a highly responsive UI which can display dynamic data from a remote server?

Jonah Williams

Jonah Williams

Designing mobile APIs – error handling

While designing an api I need to provide reliable error responses to both protocol and application level errors. Here I’ll consider any error response generated outside our application stack to be a protocol error while those errors returned from my application’s codebase are classified as application level errors. On a recent project I started to

Jonah Williams

Jonah Williams

Designing mobile APIs – basic behaviors

As Rails developers we design APIs on a regular basis: routes for browsers to interact with a web app, JSON apis and routes for client side javascript to build dynamic pages, payloads queued for background processing on a server, and so on. As we move into mobile development we can benefit from many of the

Jonah Williams

Jonah Williams

Abusing UIViewControllers

UIViewControllers are a fundamental building block of most iOS applications. Unfortunately many developers seem to use them in unintended and unsupported ways which leaves their apps vulnerable to bugs, rejections, unpredictable behavior under new iOS releases, and with controllers which are difficult to update or reuse. The core misconceptions behind this abuse of UIViewController are

Jonah Williams

Jonah Williams

iPhone Distributed Computing Fallacy #8: the network is homogeneous

Reviewing the 8 classic “fallacies of distributed computing” and how we can avoid them when writing iOS applications. The fallacies of distributed computing The network is reliable. Latency is zero. Bandwidth is infinite. The network is secure. Topology doesn’t change. There is one administrator. Transport cost is zero. The network is homogeneous. Fallacy #8: “the

Jonah Williams

Jonah Williams

iPhone Distributed Computing Fallacy #7: transport cost is zero

Reviewing the 8 classic “fallacies of distributed computing” and how we can avoid them when writing iOS applications. The fallacies of distributed computing The network is reliable. Latency is zero. Bandwidth is infinite. The network is secure. Topology doesn’t change. There is one administrator. Transport cost is zero. The network is homogeneous.

Jonah Williams

Jonah Williams

iPhone Distributed Computing Fallacy #6: there is one administrator

Reviewing the 8 classic “fallacies of distributed computing” and how we can avoid them when writing iOS applications. The fallacies of distributed computing The network is reliable. Latency is zero. Bandwidth is infinite. The network is secure. Topology doesn’t change. There is one administrator. Transport cost is zero. The network is homogeneous.