One of the first areas of technology that I got involved in was website development and programming. It began as something to kill time during the day when I was working in the theatre, and eventually developed (no pun intended) into a full fledged educational initiative when I began my Masters work in Management Information Systems. While going to school part-time, programming, web development and database design became a part of my day job when I changed careers from theatre to IT work. Eventually I moved from active application development and more into the infrastructure and systems side, but I always kept a bit of a hand in the scripting world.
Now, I am finding my interest in application development and coding newly energized. The trends around DevOps, Microservices, and Cloud Native Development that have been building for years and are now pretty much mainstream, are very interesting and downright fun to be involved in. With the importance of building compelling, user friendly, and unique applications growing in nearly every enterprise, more and more of my interactions with customers and peers are touching on these topics. I’ve been investing quite a bit of time as I can find it to learn new techniques, tools, and approaches to development, but I had a very unique and valuable opportunity last week to join with 9 of my peers at Cisco to participate in what we called the “Immersive Application Experience”, and it was an awesome experience.
The premise of the week was that the only way to truly understand what its like to be a developer building cloud applications and doing the “DevOps” was to actually go and live in that world. So at the blessing of our management, we pulled together a small group of like minded engineers and gathered in the Cisco office in Denver and set out to build an app leveraging as much of the latest practices, technologies and tools as was practical. We had no idea going into the week how well (if at all) it was going to go, but we were all looking forward to seeing what we could make of it.
The group was composed of a mixed group of individuals with a wide range of experience in the development space. We had a couple of individuals who live and breath the software development already, and they acted as “mentors” for the week, helping make sure the project didn’t completely fall apart within the first couple hours. About half the group had a solid foundation in development, and some experience in the current tools, technologies and languages, but aren’t truly “developers” (I fell into this group). And there were some that had a great deal of interest, and some background knowledge, but little practical experience.
On the first day of the week, we discussed the goals for the week, decided on the application project we were going to tackle, the basic platform and technologies we were going to use to build it, and broke into 3 teams that would each build one of the microservices that were going to be part of our application. Though the application was something we felt would be useful, successfully building it was a secondary goal. The primary goal was to learn more about the process of building an application, and understand first hand the challenges and joys of coming together and seeing the MVP come together.
By the end of the week, we unanimously agreed that it was a success. Not only did we succeed on the primary goal of learning what it takes to build and application, but we actually built a working version of our application, and it came out pretty cool. Not perfect, or without many areas of improvement, but that actually is how it should work in the world of “agile programming”, “DevOps”, and “Continuous Development, Integration, and Deployment”. I learned so many things in 5 short days, that I can easily say it was one of the most productive weeks I’ve spent in years.
And for those interested in some of the technical bits, here is a bullet list of some of the different parts of the stack we built and used… starting with a whiteboard illustration.
- The application was built to make searching through, finding, and downloading or viewing videos and presentations of internal Cisco trainings easier than the current native toolset
- Our application architecture consisted of 4 main microservices
- Front End Web Site
- Written in Angular to provide a responsive, visually pleasing, and mobile friendly interface
- API Layer
- Written in Python and leveraging Flask-Restful to provide access to the Web Site initially, but also as a platform for future clients to access the presentation data
- Leveraged PyMongo to access the data
- Cache of Presentation Information
- A MongoDB database storing JSON documents describing each of the presentations.
- Data Crawler Service
- Written in GO, the crawler service accessed the underlying data source where the source material was stored using its XML API
- Read in, transformed and converted each presentation and related data to a JSON format and stored in the Mongo Database
- Front End Web Site
- We leveraged Mantl.io as the microservices/container stack to run both our DEV and PROD instances of our application
- The Web, API, and Crawler services were all built into Docker containers and run through Marathon/Mesos
- Traefik provides the front-end load balancing and proxy services to the Web and API layers
- The ELK add-on to Mantl was used to gather and compile logs
- MongoDB was also deployed through Marathon/Mesos
- GitHub Enteprise was used as our code repository for the project
- Quay was used as the container registry to store the artifacts that were deployed by Mantl
- Drone was used as the CICD platform
- note – we originally started with Jenkins for CICD but after running into some early difficulties with setup, we tried Drone and found it much easier to setup for our needs
- Cisco Spark was used for development team communications, as well as integrated with Drone for build notifications and status details
- We are also planning on building a Spark Bot as an alternative interface to the Web Portal for searching and access presentations