Inside Managed by Q's Tech Stack

 | 

This is the latest in our "Inside the Stack" series. This week, we hear from Andrew Peace, an engineer at the rapidly-growing smart office cleaning and management startup, Managed by Q.

q-02

Describe Managed by Q in 2-3 sentences.

Managed by Q is building an operating system for offices, enabling our customers to manage their physical spaces through our cloud services. We currently offer cleaning, handyman, and supply management services, and are planning to expand our offerings significantly. We're building a tight-knit team with a strong engineering culture, and the company is growing growing growing fast!

What are your primary programming languages?

Python, Objective-C, and Javascript.

We choose Python for our backend in order to take advantage of Django, TastyPie, and other great tools that let us keep up a rapid development pace of our API and our multiple web properties. We think Python rocks, due to its clean syntax, consistent standard library, and the many libraries and frameworks available for it.

JavaScript was the obvious choice for our frontend--no .coffee for us! We've been following a vanilla-JS philosophy since day one, using Browserify to give us the powerful CommonJS module system. We have a pretty large frontend that our operations team depends on every day to get their work done, so Javascript is core to everything we do.

As for our iOS app, we developed it natively in Objective-C so that we could best take advantage of iOS/device features. Our iPads are tightly integrated with our customers' offices, and we see that as a vital part of our operating system for physical spaces. Thus, we didn't see a web-based approach as a good fit for our app, and have kept it native.

What are your primary web frameworks?

Our Python backend is a Django app, and we use TastyPie for our API. Django and TastyPie work very well together, and we've found that they are very well-suited to our needs. Using South's tight integration with Django, we're able to do schema migrations with ease, giving us the benefits of both using a strict database schema (MySQL) and change our schema frequently.

Our Objective-C app does not use frameworks, other than Cocoa, of course. So far, we haven't found the need for any. (We experimented with using CoreData to manage offline data, but found that difficult to work with).

Our frontend is vanilla JS (no frameworks), using jQuery for DOM manipulation and Browserify for modularization. We've found this approach to be very well-suited at managing a large frontend code base. Not forcing our problems into the structures provided by a framework has allowed us unlimited flexibility in building some of our more complex UIs. At the same-time, we have begun to develop a light, in-house framework that is specifically built for our needs (covering simple things such as our models, views, and what we call "components").

01

What are your primary databases?

Our only database is MySQL. Many of us here have been working with MySQL for a long time, so one reason we choose it is due to our successful past experiences with it. A more important reason is that our data is highly relational, so it didn't make sense for us to use newer document-oriented databases. Our request load is low due to the nature of the business (we don't serve millions of page views, but rather thousands of API calls from hundreds of iPads), so even as the business grows we're confident that MySQL will scale with us.

Which DevOps tools do you use?

We use Fabric for deployment, Papertrail for logging (via syslog), South for schema migrations, and are deployed on AWS.

At this early stage, the entire engineering team still handles daily devops tasks. Thusfar, we haven't found the need to do more than just a few scripts. That said, we have more than doubled our number of servers in the past few months, so improvement to our DevOps has been on our mind. It's something we likely will add more automation for over the coming months. (Recently, an early setup of Jenkins to continuously deploy our dev environment has proved a worthwhile experiment ;)

Which part of your stack are you most excited about?

So hard to choose! I would say our API, since we already have two very active clients for it (our frontend, and our iOS app). Our API is at the core of our operations, so I'm excited to see it grow, scale, and improve. If I can cheat and mention one more, I'm also so excited to see our large JS codebase grow with the company. We're taking a simple, somewhat unique approach to how we architect our frontend code, and it's worked marvelously for us so far!

Thanks to Andrew and the whole team at Managed by Q. Visit managedbyq.com to learn more about their platform and to see their tech in action.