This guest post is sponsored by SmartLogic.
At SmartLogic, our business is building custom software applications — typically but not always greenfield projects, apps built from scratch. As such, it might not be readily apparent why we offer DevOps consulting — unless you consider that for each app we build, we’re generally also managing the server infrastructure and related deployment procedures.
Given that each project is unique, our team has experience deploying to different cloud hosting environments and designing infrastructure to meet a wide range of client needs. Although it’s only recently that we’ve begun to offer DevOps as a standalone consulting service, our team has managed the DevOps architecture and support for a multitude of apps over the past 14+ years, since before AWS was publicly launched in 2006.
All that being said, DevOps is still a bit of a buzzword. In the spirit of providing some clarity and context, here are a handful of examples of the kind of DevOps work we’ve done for our clients.
But first: What actually is DevOps?
DevOps exists where software applications meet deployment infrastructure. Prior to roughly 2009, software engineers (Dev) and system administrators (Ops) were typically siloed and functioned as completely separate teams. DevOps has since emerged as a practice that bridges those two domains with a goal of making deployments more consistent, reliable, repeatable and easier to reason about. If you’re interested in more historical context, SmartLogic developer Donald Guy’s article “What is DevOps?” is a good place to start.
Some examples of DevOps in practice:
Keeping computers in the cloud up to date
Most modern web apps are deployed to the cloud. Ultimately, the cloud is just a bunch of computers — and those computers eventually need updates.
We recently updated and reconfigured some of the cloud infrastructure for SpotCrime, a crime data aggregator with map views, email alerts and daily crime reports. A client of ours since 2008, SpotCrime has evolved over time into a diverse system that uses many programming languages, a polyglot system unified through DevOps work.
For this update, we created playbooks defined with Ansible, an IT automation tool, for server configuration. In this case, some of the infrastructure setup is a bit more manual because the project originated before many of the DevOps tools we currently use.
As with all of our long-term projects, every two to four years there’s a need for a full server upgrade to keep the operating systems current, leverage faster virtual machines, and adopt new best practices. We also restructured the servers, separating responsibilities for emails, a high-volume low-frequency task, from the web, API, database and various other servers. The result has been that performance across the different environments has dramatically improved, and the infrastructure is easier to enhance and maintain.
Deploying to a high-security private cloud
The ASQ project is one that we took over as opposed to building from scratch. One of the initial challenges of the project was getting its deployment to a stable status. Although it was already in production use when we started working on it in 2011, we were not confident in its ability to consistently deploy, so we stood up a new version, migrated the data, and got it on stable footing. The project is housed on client-owned hardware creating a private cloud, for maximum control in support of medical data privacy rules like HIPAA.
In more recent years, we’ve run operating system updates and transitioned the application to Rackspace; ASQ Online supports seven languages including Arabic and Chinese, and to date the app has been used to collect over 3 million questionnaire responses.
Migrating to AWS and preparing for scale
For FolioCollaborative, a SmartLogic client since 2011, the server infrastructure has evolved over time to support growth. At launch, Folio was used in three schools; today, the educator professional growth platform is in use in over 165 schools around the world.
We recently migrated Folio to AWS to support current scale and future growth; we used Terraform to define infrastructure rules as code, both documenting the setup and providing version control for future iterations. We used Ansible to configure the servers and Capistrano, the gold standard for Rails applications, for deployment.
By using modern tools that document and automate resource deployment and configuration, we create reliable, consistent systems; we put the time in up front so that when it’s time to roll out an update we know that the deploy will run smoothly. These systems are also largely self-documenting, meaning that if another team member needs to troubleshoot, the information they need is contained within the configuration code. This is especially useful for apps that are supported by a variety of developers.
Automation, testing and log aggregation
DinnerTime provides personalized and automated meal planning, grocery shopping, recipe support and nutrition education services. We’ve worked with DinnerTime since 2012, and we recently created a more robust infrastructure for their application. We built a workflow that leverages GitHub (code version control) and Continuous Integration (automated code testing) to build container images with Docker that can be deployed with Ansible. This allows DinnerTime to retain manual control over deployment, while leveraging the latest in deployment technology.
We also set up a log aggregation toolchain that filters and stores only the most relevant and useful log files. The toolchain, a combination of Fluent Bit and Datadog, makes log entries easy to search and to use in process monitoring and debugging. Logs are also collected and aggregated across multiple servers so that log data is preserved when servers in a cluster are replaced. This setup simplifies monitoring and troubleshooting in DinnerTime’s multi-server cluster and ensures that logs persist across infrastructure changes.
Cluster computing and real-time data availability
In 2019 we started a new project with SimpleBet, a modern sports betting platform. Our team is providing DevOps support for their high-stakes large-scale architecture. SimpleBet focuses on real-time data, and as such has very specific reliability and uptime requirements. We worked with their team to transition their cloud resources to Kubernetes (K8s), a container orchestration system. We also integrated permission and encryption manager Vault and set up lifecycle management for their cloud resources with continuous integration and separate development, testing, and production environments.
The systems we designed and configured will enable their teams to manage their quickly-growing systems with consistency and reliability, while supporting their product’s high-performance requirements.
DevOps: There’s no one right answer.
As with all of the custom software we write, we bring our opinions and expertise, and we are very intentional and thoughtful about which choices are right for each individual client application. Not every app needs to run in a cluster on Kubernetes; but it’s important that time and attention are paid to infrastructure and deployment beyond just spinning up a turnkey solution for any app that needs to manage scale efficiently over time. When you need more flexibility than what great tools like Heroku give you, there are many options that can be tailored to your needs.
If you find yourself needing to make sense of infrastructure choices as your product grows and needs to scale, reach out. We work with all kinds of systems and we’re more than happy to help you find your right DevOps path. And of course if you are seeking assistance with building a custom web or mobile software application, that fits well within our wheelhouse as well.
Get in touch with SmartLogic:
Bringing cybersecurity to small businesses, Ellicott City-based Huntress raises $18M Series A
With new investment, AKUA looks to hire tech talent in Baltimore
Why you shouldn’t be afraid of DevOps
Fugue is open sourcing a new cloud security tool
Sign-up for daily news updates from Technical.ly Baltimore