Stephen Best here, I work for Spoonfed Media Ltd. where I'm head of technology and lead software engineer for our new product Bullseyehub.com. Let me tell you a little about what I get up to.
In a sentence Bullseyehub is a subscription based software as a service one-stop-shop for email, mobile, social media and event marketing. Our clients include many of London's biggest clubs and event promoters.
The major technology we use to build our products is Rails, an open-source web framework designed which, as they put is, 'optimised for programmer happiness'. I have to agree with them, it's the most enjoyable language / framework combination I've ever experienced by far.
I spend most of time developing Rails applications such as the aforementioned Bullseyehub.com. It's a great framework, it acts as a basis for your own code so you get straight down to business and prevents you re-inventing the wheel.
As well as development I have a small overhead of managing my team (admin) and managing server architecture (more admin) both of which I try and keep to a minimum, this is successful because I work with smart people, one of the most important things any engineer can ensure they have in their working environment.
Today I had a fairly lengthy pair programming session with Jacob, our newest hire, we needed to discuss and put our heads together on how to refactor some neglected code. We practice Behaviour Driven Development, which among other things insists that you write a test defining the requirements of the actual code you are writing (crucially) before you write the code itself. This gives you a clearly defined indication of what your code should do and also directly indicates if the code does what you intended.
This refactoring session was a great preemptive strike to aid a larger project I have lined up for next week, and a couple months following, which will involve completely removing a large section of our application and reorganising it into a standalone entity. One advantage of this is reducing complexity, obviously you end up with more code and communication overhead however the net gains are sufficiently attractive. When two parts of a system are decoupled it gives them whole new possibilities, they can be deployed separately, you can integrate them with other systems (as they already integrate with each other) and they increase their potential to scale up/out to serve more uses or process more data.
Amazon Web Services has been a focus of ours over the last few months since we moved all of our application deployments and database over to their Elastic Compute Cloud, which allows you to create and destroy virtualised servers at will within seconds. Great for when you need some extra computing resources or need another clone of your server to test something out. Not at all bad for a bookseller. Our other senior developer, Daniel has done some great work getting us into a position where we can automate these processes. We can now create a virtual server, deploy our application to it and add it to our pool of servers with no effort. To anyone who has ever deployed a web application by hand this is an absolute joy and nothing short of magic every time.
For anyone interested in the open-source Ruby / Rails community here's a few projects that we love that really transform the way we work:
- HAML for HTML and CSS abstraction - I'll never write another line of HTML again;
- Thoughtbot's Paperclip automatically handles file uploads and even integrates with Amazon S3 content delivery network;
- Vlad The Deployer Ruby - tasks to automate your deployments;
- Delayed Job a background processing / task queuing system that handles all of our offline and asynchronous processing;
- RSpec the best BDD / TDD framework around. You'll have more fun and write better tests.
Stay tuned tomorrow for part two featuring mecahnical design engineering.