Skip to content
This repository was archived by the owner on Nov 26, 2025. It is now read-only.

Latest commit

 

History

History
164 lines (120 loc) · 6.02 KB

dev_ops.md

File metadata and controls

164 lines (120 loc) · 6.02 KB

Dev Ops

What is Dev Ops?

Practices and infrastructure put in place to help developers collaborate and communicate, as well as build, test, and release software quickly. In reality, Dev Ops is implemented using toolchains, which are sets of tools that take care of the following components:

  1. Code - Code Development, Code Review, Version Control, etc
  2. Build - Continuous Integration, builds
  3. Test - QA, Regression Testing, Perf Testing, Compatability Testing, etc
  4. Package - Artifacts, pre-deploy staging environments
  5. Release - Approvals, Release automation, Fallbacks, Change Management
  6. Configure - Infra configurations and management such as Servers
  7. Monitor - Build Status, Perf Monitoring, UX
  8. Collaborate - Version Control, Confluence
  9. Communicate - Slack!

An example of a toolchain might look something like this:

  1. Code - Github Enterprise
  2. Build - Jenkins with CI integration
  3. Test - Automated testing built into Tox
  4. Package - in-house package and package management solutions like SPM
  5. Release - Release standards, Atlassian JIRA to manage Releases
  6. Configure - Docker instances on AWS
  7. Monitor - in-house monitoring systems with customized UI/UX
  8. Collaborate - Atlassian Confluence Docs to manage documentation
  9. Communicate - Slack and Private Email Server

Things you should already know

Version Control

Communication

Things you might not know

Continuous Integration

CI

Different Types of Testing

  1. Regression
  2. Performance
  3. Stress
  4. Integration

Testing Libraries and Implementation

Packaging

Release Management

Server and Infra Configuration

docker aws

Other Things

  1. Build tools
  2. Testing Libraries
  3. Build tools
  4. Documentation
  5. Perf monitoring

Dev Ops Performance Benchmarks

Code / Test

How do you measure code quality?

  1. Analysis in production
  2. pre-production code profiling
  3. static code analysis
  4. unit tests
  5. code coverage based on bugs found by users
  6. conduct code reviews
  7. Code Review

How do you manage technical debt?

  1. Emphasis on refactoring, replacing, and modernizing legacy code
  2. Avoid technical debt at all costs using architecture design and review?
  3. Strategically incur short-term technical debt to enable experimentation and fast feedback?
  4. Track and measure short-term technical debt and pay it off ASAP?
  5. Keep track of high-cost technical debts in backlogs
  6. Do you suffer from technical debt as a result of legacy application development or lack of quality control in the past?

How is your code managed and versioned?

  1. Distributed Version Control
  2. Shared network drives and backups
  3. open source sharing systems, server-based sharing systems
  4. Google Docs!

Build

Build Tools (Tools that automatically generate executables from source. ie apk's for android)

Build Automation scripts and automates activities that programers have to do often like:

  1. Downloading dependencies
  2. compiling source into binary
  3. Packaging binary
  4. Running Tests
  5. Automatically Deploy to prod

What build tools are you using? What testing frameworks?

Continuous Integration

  1. Do you have continuous integration?
  2. Does it automatically deploy to prod?
  3. What conditions does the build fail?
  4. In-house solutions or SaaS?

Automation

  1. on-demand: builds through a user running a script on the command line
  2. scheduled: CI server, nightly builds, regular CRON jobs
  3. triggered: Triggered on commit to VCS?

Package and Dependency Management

What Package Manager do you use?

  1. In-house package manager (SPM)
  2. Public or open source package manager?

How do you manage dependencies and versioning?

  1. Maintain artifact repository with the latest binaries which all teams use
  2. Work item tracking system
  3. Versioned interfaces between different services
  4. Track versions in google docs or a spreadsheet

Configure and Release

Cloud Control

Monitoring and Issues (Infringing a little on infra territory)

How are issues in prod discovered?

  1. Alerts that are triggered when thresholds are crossed before visible disruption in service occurs
  2. Manual inspection by staff (who does the testing? ops, devs, testers?)
  3. How is your instrumentation? Do you have in-house tools to help you monitor your stack? Logging and Log analysis?
  4. Reported by end users?
  5. We don't find out until its too late :(

How are issues in prod reported to dev teams?

  1. In-house instrumentation generates automated alerts to all relevant teams
  2. SaaS issue tracking tools that are available to all relevant teams in real-time
  3. End-user requests and complaints via direct contact

How long does it take to make small changes to deploy for a critical production issue?

seconds, minutes, hours, days?

How is your uptime?

  • Is your system high availability?
  • Six Nines - available 99.9999% of the time - unscheduled downtime of 31.5 seconds a year
  • What happens during a catastrophic server or infrastructure error?
  • How do catastrophic errors propogate? Who gets notified? How do you handle such changes?
  • Do you have a safety mechanism? Rollbacks?

Why Dev Ops is important

Exhibit A: Uber

uber