Skip to content

Instantly share code, notes, and snippets.

@parhamr
Last active June 10, 2016 18:22
Show Gist options
  • Save parhamr/6e072bc3a75d6e5bc2f49369c9ca41fa to your computer and use it in GitHub Desktop.
Save parhamr/6e072bc3a75d6e5bc2f49369c9ca41fa to your computer and use it in GitHub Desktop.

Development Environment User Stories

Boilerplate Features and Behaviors For Engineering Needs.

This document contains epics and their stories to identify engineering needs that should be satisfied by application development efforts. It is written for systems engineers and uses the perspectives of software, front end, and user experience engineers.

Epic: As an engineer, I can build a new development environment

As an engineer, I want to read a guide to familiarize myself with an application

  1. Given I have permissions to view the application source code
  2. When I view its README file
  3. Then I should see a table of contents with at least these sections:
  • Development Cluster Reference
  • Maintenance
  • Testing
  • Errors and Failures
  • Deployment
  • Automation
  • Monitoring
  • Backups
  • Operations
  • See Also
  1. And I can become familiar with and confident about this application by reading adequate and up to date details and sub-sections of the above

NOTE: see additional user stories for details on each of the above sections; consider using a “docs” directory as needed to split longer sections off from the main README file

As an engineer, I want to install application dependencies with simple, clear instructions

  1. Given I have permissions to view the application source code
  2. When I view its README file
  3. Then I should see a “Development Cluster Reference” section that contains the following…
  • Requirements for installation, including system resources and how long the setup process takes
  • Lists of packages and versions to install on various flavors of Unixes (with platform specific instructions)
  • Commands to run for automated build tools and to control services
  • Scrollback examples for successful and erroneous outcomes
  • Steps to validate the installation and configurations
  • Where to find and download database dumps, plus how to import them
  • Where to find and download media assets
  • Lists of common errors and how to resolve them
  • Environment configuration steps and behavior overrides
  1. And I am able to bootstrap and maintain my own development environment
  2. And I update information as appropriate when I modify the repository or when I find information to be inaccurate or outdated

Examples:

As an engineer, I want a diagnostic tool that tells me if anything on my systems is not correctly installed and configured

  1. Given I have set up a development environment from README instructions
  2. When I run a diagnostic test command
  3. Then I should see a list of findings for at least the following…
  • Filesystem permissions that are too strict or too permissive
  • Warnings for inadequate system resources
  • Outdated dependencies daemon and library versions
  • Configuration values
  • Necessary authentication privileges
  • Application-specific concerns
  1. And I should have informational resources explaining actions to take or where to find more information

Examples:

  • $ brew doctor
  • $ composer diagnose

As an engineer, I want convenient authentication and authorization for using the application’s integrations

(API keys, auth tokens, hosts files, SSH configs)

  1. Given I have permissions to view the application source code
  2. When I view its README file
  3. Then I should see details for the following…
  • Storage locations, service names, and the navigation paths for shared authentication credentials (e.g. “Lastpass > Notes > Shared > Name”)
  • Links to information explaining how to generate and manage authentication ephemera
  • Files providing network addresses, port numbers, and related configuration values for authenticating against remote systems

Examples:

Epic: As an engineer, I can fully rebuild an existing development environment

Notes: also remove local caches, options to re-apply the run-once routines,

Epic: As an engineer, I can maintain my development environment

Notes: import data/assets from environments (see also: automated DB dumps), export data/assets to environments, compile assets, diagnose problems, automated health/status checks, apply patches/upgrades, who do I ask for help?, check logs from production, logrotate

Epic: As an engineer, I can maintain and improve applications using my development environment

Notes: dispatch tests, auth forwarding, location allow/deny, robots, sitemap, route requests to admin, review log files, trace errors, cron/background visibility, dependency management tools, packages and dotfiles for virtual machines,

As a systems engineer, I want my peers to understand the systems I maintain

  1. Given I have created a new feature or modified an existing behavior
  2. When I submit the changes to a repository for peer review
  3. Then I write new and/or update existing documentation in README and relevant files
  4. And I use proper grammar, syntax, formatting, and examples of commands
  5. And my engineering peers are able to follow my instructions and know what to do if errors or issues occur

As a software engineer, I want my development environment to match production as closely as possible, so that I have confidence in its behaviors

  1. Given I have a development environment for a codebase
  2. When I add features or maintain existing behaviors
  3. Then I run tests and interact with the applications
  4. And my environment is similar to production (or easily re-configured) for the following behaviors…
  • Caching layers
  • HTTPS implementation
  • Cross-Origin Resource Sharing (CORS) headers

As a systems engineer, I want each environment isolated, so that accidental data loss does not occur

  1. Given I am a maintainer of development environment tooling
  2. When I add or modify application dependencies like APIs, services, data sources, backups, asset storage, et cetera
  3. Then I ensure the configurations are environment-aware with namespaces, environment values, filesystem flags, software sub-classes, or similar constructs
  4. And my CRUD actions performed in an environment only affect that environment
  5. And my automated routines for one environment never interferes with other environments
  6. And my features include relevant, text-based outputs of the current environment’s name for clarity

Examples:

  • Subject lines of automated emails include the URL or environment name
  • Configuration files with environment names as the keys (e.g. the Rails conventions)
  • Webpage headers with environment-specific overlays when not in production
  • Proscriptive robots.txt files to prevent indexing of non-production systems
  • Functional testing where features and contexts can use caching when flagged

As a software engineer, I want access to production diagnostics, so that I may be more effective at debugging problems

  1. Given I have a report of a behavior seen in production
  2. When I try to reproduce the behavior and understand why it occurs
  3. Then I should be able to obtain privileged diagnostic information
  4. And I can consult the application’s README for whom to contact, where to look, which services to use, and relevant commands to use
  5. And I should be provided the necessary authentications and authorizations that comply with best practices
  6. And I should be able to view, search, download, or transfer the following ephemera…
  • Log entries from the application stack (webserver daemon, dispatch daemon, application, framework, etc)
  • Error messages, stack traces, and runtime conditions for errors
  • Event timings for automated, background operations
  • Reports specific to the problem domain, application integrations, and business operations
  1. And I am able to effectively debug the reported behaviors

Examples:

  • Authentication forwarding instructions
  • Public interfaces for Zabbix and Nagios
  • New Relic error traces
  • Centralized logging tools
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment