So where we left off we covered what Showpitch is and what we’re setting out to accomplish. Now I want to review what technologies we’re using to accomplish our goals, and highlight a few of them in particular.
In the last post I had said I wanted to share what I’ve been working on for the past two years. Well Showpitch is not the entirety of that two year period. To start with, I only joined the Showpitch team about a year and a half ago. Even then, I didn’t step in to the architectural role for the product for another 3 months or so after that.
Before that was even the case though I had been working on other projects, exploring and experimenting with some of the technologies, patterns, and practices that we ultimately put in to place at Showpitch. For the first 3 months I was there, I was there as a Front End team member, helping to build some of the components that we were going to use for the UI at that time.
But then there was change in the team structure, and direction of the company, and as I had experience leading, architecting, and developing projects before I was asked to take over as the Senior Software Architect overseeing and implementing a from scratch reboot of the entire Showpitch platform, along with my good friend and colleague Eric Johnson (better known as EJ!) as a peer and partner in charge of the Front End team. (And lots of other stuff as well! In fact, if you’re all lucky, EJ may be convinced to add a guest post to this blog some day!)
By this point Showpitch had been developing this platform for quite a while. So with an entire reboot from scratch upon us, and expectations from stakeholders, partners, and other industry members ahead of us, one thing was very clear: We needed to move very fast. But with the vision that was in mind, we also needed to do things right, and keep where we were going in mind. We had to follow of the wisdom of two great minds: to be mindful of the future, but not at the expense of the moment.
This lead us to the list of modern approaches that appeared in the first post. Let’s dive in a bit more now and talk about the technologies, practices, and partners that we choose to implement and support each of those approaches.
Being Cloud First, Cloud Native
When we talk about being Cloud First, Cloud Native, what does that mean? For us it meant that we simply didn’t have the budget, people, or time to buy our own hosting hardware and software, nor to setup our own company computing environment. And that’s been to our benefit. Everything we do at Showpitch is on the Cloud; collaboration, development, management, and especially hosting.
We work with, leverage, and consume Cloud services from providers such as:
This is not an all inclusive list of the Cloud technologies and partners we leverage, but it should server as an example of just how cloud oriented Showpitch is.
Leveraging partner solutions where possible and economically viable
In addition to the Cloud First, Cloud Native approach, we also wanted to focus on delivering features and functionality with our platform, and not spend time building what others have already built, and probably built better. This stands in contrast to what I consider the NIH anti-pattern (Not Invented Here).
To that end we looked outside our team first for implementations of many of the features we have, including:
- JW Player for a Media Player
- SendGrid for an Email Solution
- RabbitMQ for a Message Bus
- Rackspace DevOps for an IT Team (You may have seen us at Solve!)
- New Relic for a Monitoring System
Again, this is not an exhaustive list. But the purpose of this approach was to start up quickly, and use the expertise and tools that each of these partners made available to support our development. We could have easily gotten caught up in building solutions for each of these components ourselves, but instead we were able to focus on developing our own features.
Leveraging technologies that allow for Rapid Application Development and Iteration
This was a very important approach to consider, perhaps the most important, as we had to demonstrate feature progress immediately. To the that end we needed to select application components that supported building this system very quickly. What we decided on were things like:
- KnockoutJS for Client Side Data Binding
- ASP.Net MVC and Web API for Web Serving
- MongoDB (on ObjectRocket) for Database Storage
- Microsoft Practices Unity 3 for Dependency Injection Management (Extremely Useful!)
- OData for Queryable Data Services
- NLog for Logging(Very Important!)
- Domain Driven Design for Data Modeling
- Team City and Octopus Deploy for Continuous Integration and Deployment
- ReSharper for Coding Ninjutsu!
Running on a very Lean and Agile Management approach
All of these technologies, tools, and partners would amount to naught though if we were constantly getting in our own way, or if we were constantly in a state of analysis and requirements gathering. As such we’ve had to find a fine line between staying organized and getting work done. So while our team oscillates between a Scrum-like approach and a KanBan-like approach, we still attribute a couple of key technologies to our success:
This combination of technologies has allowed us to work while distributed geographically, on a Cloud Oriented basis, without having to invest significantly in office management nor technology management.
Using only what we need, when we need it, and being ready to scale when the time comes
Through the use of everything we’ve already discussed we’ve been able to design for and adhere to this last approach. Almost of the Cloud partners and technologies we use are built to scale on demand, or near enough, that we don’t need to make huge up front commitments or investments. In fact we’ve switched providers and partners several times during the past year, sometimes in as little as day, with no disruption to our ongoing development!
All of this ties together in to a success story culminating in the live Showpitch site today, and continues to enable and empower our success moving forward.
Do you want me to focus on any of these technologies in future posts? If so, please leave a comment below! And stay tuned for more posts that will go in to greater detail about these technologies, practices, and approaches in particular!