Guides and Tutorials

We solve business problems with the right application of technology and design. This is our contribution back based on years of applied lessons with our clients.

Maintaining Legacy Django Sites

Necessary complexity in existing Django apps

Simplify to improve; but sometimes it's not possible or reasonable to simplify difficult to understand code. Understand why this can be the case in your Django project and some strategies for mitigating these issues.

Technical debt

Like financial debt, technical debt serves a purpose, and like financial debt, once it's allowed to snowball servicing the debt can become all consuming. Know why your Django project has technical debt, how to assess it, and how to deal with it.

Great Tests, Bad Tests, No Tests, Slow Tests

Tests can make it harder to make changes to your Django site. Not just *missing* tests, but slow tests and bad tests which cause programmer pain, misdirected efforts, and false confidence. What do these four flavors of test look like and how can you correct for the troubled ones?

The Sources of Friction in Legacy Django Projects

Whether months or years after launch, it can become increasingly painful to make changes to any application, Django-based sites included. An overview of some of the causes and an introduction to the series.

Building Effective Applications with Django

Simplify Media File Management by Migrating to Django Filer

django-filer is a great tool for reusing uploaded content across Django sites. It's an easy choice for new projects, but what about existing projects? Painless steps for migrating existing image and file uploads to django-filer.

How to Control Content Rivers Using Featured Items, Django CMS, and PostgreSQL

Using Django CMS to select featured items from a content river in a way that's intuitive for both designers and editors.

One Database Model, Many Behaviors: A Practical Introduction to Django Proxy Models

While proxy models aren't the most critical feature in the Django framework, they do seem to get short shrift. Here's a look into how to use this feature to create new and clean interfaces to data without making changes to your database.

How to Add Complex Search Filters in a Django - Without Using a Search Engine

Most search requirements are pretty simple and can be satisfied without a search backend. Keeping the code clean and testable is easier with this manager based design pattern.

Stretching Haystack's ElasticSearch Backend: Customizing the Django Search Experience

Haystack makes integrating ElasticSearch into Django projects a breeze, but custom configuration takes a little bit more work.

Adding Basic Multi-Tennancy to Django Sites Using Subdomains

Put subdomains to work and build dynamic multi-tennant applications.

How to Serve Protected Content With Django (Without Bogging Down Your Application Server)

Using Nginx's X-Accel-Redirect you can apply permissions to files served directly by Nginx or combine Django and WordPress in the same URL paths.

Deploying Django Sites Using the 12-Factor Pattern: Flexibility, Portability, and Maintainability

Better environment configuration, inspired by Heroku, borrowed from Foreman.

How to Create Human Readable URLs in Django That Don't Break With Content Changes

Slugs and IDs for speedy pretty URLs, a la The Onion

Promoting Customer Success

Help yourself: customer facing documentation

A little knowledge can go a long way, and often suffices to empower customers to solve their own problems by giving them the knowledge they need.

Guiding new users with an onboarding process

User, or more accurately customer success, is not guaranteed just because your application has a great test suite or an amazing interface. Deliberately guiding them through steps to learn your application and establish familiarity helps improve user - and customer - success.

Creating a User Experience Worth Returning To

How to Maintain a Mobile Friendly Site (And Maintain Google Your Ranking)

Google will update their search indexing rubric on April 21, 2015 to better serve mobile-friendly results to mobile users. The lack of a mobile-friendly site after this update will result in lower search rankings for your website. Here's what you can do to be ready, keeping yourself and your users happy.

Seeing to the Unseen: Performance, Accessibility, & Security in User Experience Design

Performance, accessibility, and even security all effect the user experience. Each has a significant effect on the perception of your product, especially when bad planning turns into less-than-desirable results.

Let's Do This: An Introduction to User Experience Toolsets

User Experience (UX) design is anchored by its foundations in psychology and sociology, centering around the human experience. The application of UX, like its foundations, relies on observable theory and continual discussion, often coming down to a matter of informed opinion. These opinions range from its best practices right down to its tools.

Stylus: a new arrow for your design quiver

Why we chose the Node.js based CSS preprocessor and an introduction to using it to power up your CSS.

Taking Control of User-generated Content

Use the power of HTML5 and CSS3 to gain control of your user generated content.

Development Process: Reducing Risk and Improving Delivery

What's the Difference Between Requirements and Specifications?

It can feel productive to start specifying how a project will work from the very start, from workflows to designs. This is almost always a dangerous illusion and a reliable way of making an exact and flawed product.

An Introduction to Automated Visual QA: Continuous Cross-browser Screenshots

Building a collection of cross-browser screenshots with BrowserStack and CircleCI

Invoking Builds: Deployment and Project Task Patterns

Using Fabric and the new Invoke to simplify and codify both development and deployment patterns.

Table for two: designing multiple user accounts

Users and accounts needn't be confused. Let your customers work together by supporting multiple users per account.

Development Commandments for Collaboration

Rules for working together, staying sane, and shipping quality product.

An Illustrated Git-based Development Workflow

A sensible Git-based workflow for small teams and open source projects.

Managing Web Content to Work for You

Safe Content Updates Through Testing

Your content is an asset - you already know this - but this also includes the rich web of links on and outside your site that bring people to your site and help lead them through your content. When your site goes through an update that involves updating your URLs, how do you make sure you're not left with broken links and bad search results? A brief introduction to pyresttest for smoketesting and testing URL mappings.

Taking Control of User-generated Content

Use the power of HTML5 and CSS3 to gain control of your user generated content.

Content migration: archival sites

A fallback strategy for migrating content on large and disorganized sites

Content migration: site links and SEO

Protecting valuable links for users and search engines is an important step in any site migration

Content migration: basic strategy

Replacing an established website necessities a good content migration plan

Designing websites with stock photos: Avoiding cookie cutter

Stockphotos can illustrate your point, or make you look exactly like your lazy competitor

Tags and categories, oh my! Content organization explained

The layman's guide to content taxonomies and folksonomies