Our Rock@Ops methodology defines Systems Engineer as role responsible for infrastructure related part of the system. Generally, Systems Engineers takes care of all the engineering surrounding Developers and Lead Developers work. Usually, this is everything that surrounds development and operations of an application. The big difference from the traditional approaches such DevOps is that Systems Engineers are not responsible for application operations. The core activity of Systems Engineers is simplifying and improving infrastructure for developers so they can do application operations themselves. The goal is to have such stable and simple infrastructure that almost all the production issues will be caused by the application and are fixable by developers without Systems Engineers intervention. Main activities of Systems Engineers are:

  • Building and simplifying infrastructure
  • Identifying infrastructure improvements
  • Infrastructure as a code
  • Infrastructure operations
  • Delivery pipeline automation
  • Security

Building and simplifying infrastructure

Main Systems Engineers’ focus is designing, building and simplifying infrastructure for developers. Developers are busy shipping features and operating application so the last thing they want is infrastructure standing in their way. Developers need infrastructure that helps them to build applications on top of it. It’s Systems Engineers’ responsibility to design and implement the simplest possible infrastructure that is easiest to understand and use for developers. Ideally, infrastructure should be so simple for developers to understand that they could rebuild it on their work machines themselves.

Identifying infrastructure improvements

Developers are the key source of infrastructure changes. Other roles contribute too but at much lower rate. The main passive activity of Systems Engineers is to listen to team environment for any signs of changes that infrastructure needs. Developers usually don’t proactively tell about those changes because sometimes they just don’t know that such improvements are possible or they are simply too busy shipping features. It’s Systems Engineers’ responsibility to proactively find it out. We work all together in one Open Space so it helps a lot for System Engineers to identify when infrastructure needs improvements.

Infrastructure as a code

Systems Engineers build infrastructure as a code. Tools such as Chef and Terraform are used. Ideally, the entire infrastructure is fully automated with the code and can be easily reviewed and automatically rebuilt. Systems Engineers don’t automate only those parts that require way more efforts comparing to the benefits this automation would bring.

Infrastructure operations

Systems Engineers are responsible for infrastructure operations. They setup monitoring and react to any warnings the monitoring system sends. The good thing is that there are very little infrastructure operations usually. Systems Engineers are responsible to implement infrastructure improvements for every incident that happened so it will not happen again. This combined with simplicity is the key why our infrastructures are so stable and need very little operations efforts.

Delivery pipeline automation

Systems Engineers are responsible for automating delivery pipeline to the point where developers simply push code in order to get it automatically built, checked and pushed to production. Sometimes developers suggest improvements to the delivery pipeline, but usually, the majority of improvements are proactively identified and implemented by Systems Engineers.

Security

Systems Engineers are usually more security oriented than developers. Systems Engineers not only take care of infrastructure security. They also introduce security-related practices to application developers. For example, Systems Engineers can research and add automated security vulnerabilities scanners to the delivery pipeline for the stack developers use.