Recently, the Miso team came to the conclusion that alongside our existing Miso blog, there was an opportunity to discuss an entirely different aspect of what we do. While the official blog covers exciting new features and news, the posts here will have a much more technical and entrepreneurial focus, highlighting the engineering and creative efforts at Miso.
As my first post, I wanted to take a stab at a breadth-first overview of the state of things from an engineering perspective at Miso as we begin the new year.
Our Development Team
We have been very fortunate to put together a great team here and introducing each of us is a good place to start the post.
Tim is the CTO & cofounder of Miso. Tim develops on the iOS platform and the Rails app. Prior to Miso, Tim has worked in software development at startups in the Bay Area like Real-Time Innovations and Lightspeed Genomics. Tim has a Masters in Electrical Engineering from Stanford, specializing in robotics and computer vision, and a Bachelors in Computer Engineering from the University of Texas.
Henry is the Lead Mobile Engineer at Miso. He develops on the iOS and Android platforms. Prior to Miso, Henry developed the iOS, the Android, and the Blackberry apps at Howcast Media. Henry graduated from Columbia with a Bachelors in Computer Science and Math.
Nathan is the Lead Platform Engineer at Miso. He focuses on the system architecture, database design and web services to power the mobile clients and APIs. Prior to joining Miso in July ’10, Nathan worked at technology startups in the Los Angeles area as a software engineer, created the Padrino ruby web framework, and graduated from University of California, Irvine with an Informatics degree.
Stuart is the UI Designer at Miso. He works on the user interface and visual design for Miso’s web and mobile products. Prior to Miso, Stuart was a graphic designer at Redfin. He has a background in print and digital design and is currently a graduate student at the Academy of Art in San Francisco; prior to this he received a bachelor’s degree in digital imaging from Brooks Institute of Photography.
Miso, like many companies, uses a wide array of technologies and libraries to power our operations. These tools break down into a few major areas:
Our development workflow is primarily centered around “topics” or issues. We use Pivotal Tracker to manage our various development efforts and priorities. Each story there typically maps to a topic branch in our Git repository hosted on GitHub. Topic branches are created, tested, reviewed and deployed into the mainline branches as needed. We work hard to keep the flow free from unnecessary or weighty processes but frequent pair programming and code reviews along with automated testing are all integral to our day-to-day development.
Our system architecture will be the topic of subsequent posts, but we are currently running a number of linux-based virtual private servers that power our application, database, and caching layers. Our applications are primarily developed using a fairly standard Ruby on Rails stack for the back-end and MySQL for most of our data persistence. In addition, Memcached and Redis are both used for fragment data and caching. We are all fans of using the right tool for the job and in particular polyglot persistence seems like a promising trend. Deployment is setup with Capistrano and cap-recipes allowing for quick and automated iterative releases.
Miso is available natively on the Android and on the iPhone/iPad as a Universal app. We use a number of helpful libraries made by enormego, as well as authentication libraries such as OAuthConsumer and the Facebook iOS SDK. We implement a caching and persistence strategy that is based on NSUserDefaults and Core Data. In general, our philosophy with our mobile clients is that they should be about visualization, while business logic belongs on the server. Our mobile clients use a private version of our public API.
Hopefully, this has been a helpful whirlwind overview of the state of engineering at Miso. In future posts we will dive into exploring many different issues, libraries, technologies, that are important to our continued development. Hopefully much of it will be useful to others and we eagerly look forward to any and all feedback and input in the future.