Empower Blog
Extreme Feedback
Companies of all types benefit from transparent reporting on their highest priorities, be they progress against deadlines, trends in customer support metrics like complaint rates and call times, or days since a factory’s last safety incident. Teams have been applying this idea to software development for quite a while — see Alberto Savoia’s post “eXtreme Feedback for Software Development” and Alistair Cockburn’s description of an Information Radiator, both written in 2004.
You don’t necessarily need anything expensive to use these techniques. Your Information Radiator can be large letters written on a whiteboard, or pages printed out and taped to the office walls. We use an LCD monitor and a traffic light because we want to be notified as quickly (and noticeably) as possible when there’s a noteworthy change in our metrics.
Preparing your application for serving static content efficiently
Most web applications have static content such as CSS, JS, images, etc. To save on bandwidth costs and improve load times for your users, it’s a good idea to tell the client to cache these items for a long period of time. But even though your static content changes infrequently, when it does, the cached content needs to be invalidated. In addition, high traffic sites often want to go a step further and take advantage of a CDN to offload static content delivery. Below I’ll share the method we used here at Empower Campaigns to accomplish both of these things.
Interaction Design for the Lean Startup
At Empower Campaigns, we’ve subscribed to the Lean Startup methodology hook, line and sinker. We practice customer-driven, Agile Software Development using Free and Open Source Software whenever possible. We have a Continuous Deployment system in place, enabling to us rapidly iterate on features and to realize the fruits (or failure) of our labor almost instantly whenever we commit a changeset.
Much has been written elsewhere about such development practices, but I want to offer a little bit of insight as to how they influence our thought processes with regard to interaction design. Specifically, some of the imperatives we heed, high-level questions we ask ourselves, and resources we utilize as we set out to design and develop new features.
Better code quality through easy access to tools
When developing an application, one of the keys to maintaining high productivity and quality is to make sure that you not only have the right tool set, but that you have easy access to it. With web applications, the usual needs are things like running Selenium tests, running unit tests and checking code coverage, profiling, and having links to documentation. Though I’ve talked previously about the cost of maintaining 100% code coverage, I’m convinced that it’s worth it if you not only get proficient at the tools, but make them very easy to use. So when I started as the first developer here at Empower Campaigns a couple of months ago, I wanted to make sure these needs were addressed early on, before we had a large development team.
Multi-Tenant Data and MySQL
Here at Empower Campaigns we’re building a multi-tenant software as a service (SaaS) application. This means that while we have many organizations using our product simultaneously, they’re not able to see the data and activity of other organizations - each organization sees its own private version (instance) of the product.
There are many ways to accomplish this. We could duplicate every resource in our architecture and maintain a full stack for every client. Sounds expensive and error-prone - imagine tracking down the one database with a table that failed to update. At the other end of the spectrum, we could share everything and enforce separation in our application - i.e. the application always remembers to ask for only the current instance’s data. Also not good - a single developer mistake could cause data to leak between instances.
What is this?
It’s the new Empower Campaigns blog. We’ll be posting here on company news, technological lessons we’ve learned, and our views on agile development and the lean startup philosophy.