Simple Cloud Solutions For Everyday Hassles
DevOps can be understood as a complete expression of Agile development methods extended throughout the enterprise. Therefore, we would expect to find DevOps teams built around processes and systems that encompass the entire application lifecycle — and all related departments and stakeholders. In reality though, we find that for many shops this is still a work in progress.
While DevOps practices are in use by over 75% of SMBs and enterprises, some dev teams still are heavily siloed. Oftentimes, this is due more to the limitations of the tools in use rather than some type of cultural dysfunction. The technology that rely on has a tendency to grow organically based on our needs at a particular moment in time. After a while, this usually turns into a bit of a hodgepodge, causing inefficiency and compartmentalization.
It can sometimes be unclear just how much a dev team is being hampered by legacy development utilities. If we take a step back, we just might get the bigger picture. Let's take a look at a sample development toolchain, similar to what we find in many organizations today:
- External Collaboration and Project Management: Microsoft Project
- Internal Collaboration and Issue Tracking: Jira
- Repository: Git
- IDE: Eclipse
- Build Server: Maven
- Testing: Cucumber
In addition, some shops may use Jenkins to implement a continuous integration/continuous delivery process.
The reality is that there isn't a whole lot of DevOps happening here. There are plenty of opportunities for issues to fall through the cracks and collaboration to fall apart. Plus, a lot of manual intervention is required to perform simple tasks, as we transition from one tool to the next.
Dev teams want to spend their time developing, rather than thinking about the systems that help manage and administer their processes. When we've worked ourselves into a corner, we simply find the first tool that can keep us moving along. The result is what could be termed a-la-carte DevOps, where we may be practicing some components of a DevOps strategy, but our toolchain doesn't truly represent a full DevOps stack.
To be fair, up until recently, there haven't been many alternatives. However, recent progress has brought about some integrated DevOps tools that completely change the game. That's why this is a great time to look at some alternatives to your current dev toolkit.
Integrated Cloud DevOps Environments
A recent cloud computing survey from the North Bridge firm reveals that not only do 90% of enterprises utilize the cloud for at least some operations, but 50% have already transitioned to choosing cloud solutions over other alternatives whenever possible, known as a cloud-first policy. Today, we're seeing the most innovative software development solutions being delivered as cloud implementations, simply because the cloud is everywhere, and it just works better for much of what we need to do.
Cloud-based development environments allow us to collaborate with everyone involved, no matter their role or location, without dropping the ball. With today's tools, pipelining, testing, deployment, support, and feedback can all be integrated. Cloud infrastructure can be automatically spawned or disposed of as needed in the development, test, or production environments. We're pretty sure this is what DevOps was always meant to be.
Case in point, let's take a look at Azure DevOps. We can try out DevOps by creating a free Azure DevOps Services organization. This lets us dive right in without any installation or configuration. After creating a new project, the left-hand pane elegantly lays the entire development process out for us with the following sections:
- Overview: Contains the project summary, any dashboards that we define, and a wiki. This is the place for project management to take place, communication with other departments, and stakeholders.
- Boards: As the name implies, this is where we define and track our individual work items using basic, Agile, Scrum, or CMMI processes. Backlogs and Sprints are all represented within Boards.
- Repos: Contains all the necessary controls to code from a Git repository.
- Pipeline: Set up our build and release processes using a wizard-style interface. We can quickly set up test and production environments, control releases, and define parallel deployment groups.
- Test Plans: Defines and executes our testing criteria. Produces reports based on test run results.
- Artifacts: Dependency and package manager similar to NuGet and Maven.
The bottom left corner is reserved for configuration of our organization, teams, and projects. This is where we create users, define teams, and establish role-based access.
As we set up a test project, create some users, and assign tasks, we can see how an integrated cloud development environment essentially replaces individual utilities like Trello, Github, Kanboard, Jenkins, Cucumber, and Jira with a single unified and coordinated system. The primary advantage is the way that information flows through the system automatically. Becoming more than a utility, it actually guides the process of collaboration, development, testing, and deployment.
A developer can pull up Azure Boards directly within their IDE of choice to see the entire project status at a glance. They can take ownership of a deliverable, building the code with version control and in collaboration with other devs. When a code update is ready, they can launch a full test environment at a moment's notice with a single script, run automated checks on all systems, dispose of the test environment, deliver to production, and update the project milestones which feed the team dashboard.
One of the interesting things we notice immediately is that the transition to a new cloud-based DevOps tool doesn't have to be an all or nothing proposition. Everywhere we look, there are options to integrate with our existing tools. In particular, we notice that we can clone a repo into the IDE of our choosing. This can definitely help ease our transition, while allowing us to keep any utilities that already work the way we want.
When we examine other integrated DevOps environments, we find much of the same. For instance, Jira may have begun as a simple version control system, however it has evolved into a full suite of utilities that span the entire application lifecycle. Similarly, GitLab can be described as a full DevOps extension of GitHub.
While the hardest part might be choosing which one will best fit your needs, all are at the cutting-edge of functionality, integration, and tailorability. So, any choice should leave you with enough options to work more efficiently and with better results than ever before.
Finally, consider that most integrated dev environments can be used as a service or as a self-hosted installation. This includes Azure DevOps, which, despite the name, doesn't actually require the Azure cloud at all. Self-hosted versions can be installed to AWS, Google Cloud, your private cloud, or even locally. Plugins exist to enable the full suite of functionality on the cloud of your choice, so that pipelines can control cloud resources regardless of the environment.
The trends in software development have decidedly shifted away from waterfall, toward agile development methods such as Scrum or Kanban, and finally toward DevOps. There is a shift away from conventional project management, into workflow management. This is a natural extension of agile processes which are supposed to be continuous.
As our processes for how we work are continually refined, old habits that were once adequate may turn from asset to liability. Updating our development tools with modern cloud-based DevOps alternatives can improve efficiency and reduce frustration, while transitioning our workplace toward the "Work Wherever We Want" environment of the future.