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.

Revisions

  1. Reid Parham revised this gist Jun 10, 2016. 1 changed file with 0 additions and 4 deletions.
    4 changes: 0 additions & 4 deletions Development Environment User Stories.md
    Original file line number Diff line number Diff line change
    @@ -26,10 +26,6 @@ This document contains epics and their stories to identify engineering needs tha

    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

    Examples:
    * https://github.com/copious/nau_store
    * https://github.com/copious/Zumiez.com

    ### 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
  2. Reid Parham revised this gist Jun 10, 2016. 1 changed file with 132 additions and 117 deletions.
    249 changes: 132 additions & 117 deletions Development Environment User Stories.md
    Original file line number Diff line number Diff line change
    @@ -1,134 +1,149 @@
    Development Environment User Stories
    Skip to end of metadata
    Created by Reid Parham, last modified on Jan 07, 2015 Go to start of metadata
    # 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.
    1 Boilerplate Features and Behaviors For Engineering Needs.
    2 Epic: As an engineer, I can build a new development environment
    2.1 As an engineer, I want to read a guide to familiarize myself with an application
    2.2 As an engineer, I want to install application dependencies with simple, clear instructions
    2.3 As an engineer, I want a diagnostic tool that tells me if anything on my systems is not correctly installed and configured
    2.4 As an engineer, I want convenient authentication and authorization for using the application’s integrations
    3 Epic: As an engineer, I can fully rebuild an existing development environment
    4 Epic: As an engineer, I can maintain my development environment
    5 Epic: As an engineer, I can maintain and improve applications using my development environment
    5.1 As a systems engineer, I want my peers to understand the systems I maintain
    5.2 As a software engineer, I want my development environment to match production as closely as possible, so that I have confidence in its behaviors
    5.3 As a systems engineer, I want each environment isolated, so that accidental data loss does not occur
    5.4 As a software engineer, I want access to production diagnostics, so that I may be more effective at debugging problems
    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
    Given I have permissions to view the application source code
    When I view its README file
    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
    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


    ## 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
    4. 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

    Examples:
    https://github.com/copious/nau_store
    https://github.com/copious/Zumiez.com
    As an engineer, I want to install application dependencies with simple, clear instructions
    Given I have permissions to view the application source code
    When I view its README file
    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
    And I am able to bootstrap and maintain my own development environment
    And I update information as appropriate when I modify the repository or when I find information to be inaccurate or outdated
    * https://github.com/copious/nau_store
    * https://github.com/copious/Zumiez.com

    ### 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
    4. And I am able to bootstrap and maintain my own development environment
    5. And I update information as appropriate when I modify the repository or when I find information to be inaccurate or outdated

    Examples:
    https://github.com/sstephenson/rbenv
    As an engineer, I want a diagnostic tool that tells me if anything on my systems is not correctly installed and configured
    Given I have set up a development environment from README instructions
    When I run a diagnostic test command
    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
    And I should have informational resources explaining actions to take or where to find more information
    * https://github.com/sstephenson/rbenv

    ### 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
    4. And I should have informational resources explaining actions to take or where to find more information

    Examples:
    $ brew doctor
    $ composer diagnose
    * `$ brew doctor`
    * `$ composer diagnose`

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

    (API keys, auth tokens, hosts files, SSH configs)
    Given I have permissions to view the application source code
    When I view its README file
    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-Copious > 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

    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:
    https://help.github.com/articles/generating-ssh-keys/
    https://developer.github.com/guides/using-ssh-agent-forwarding/
    * https://help.github.com/articles/generating-ssh-keys/
    * https://developer.github.com/guides/using-ssh-agent-forwarding/

    Epic: As an engineer, I can fully rebuild an existing development environment
    ## 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
    ## 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
    ## 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
    Given I have created a new feature or modified an existing behavior
    When I submit the changes to a repository for peer review
    Then I write new and/or update existing documentation in README and relevant files
    And I use proper grammar, syntax, formatting, and examples of commands
    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
    Given I have a development environment for a codebase
    When I add features or maintain existing behaviors
    Then I run tests and interact with the applications
    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
    Given I am a maintainer of development environment tooling
    When I add or modify application dependencies like APIs, services, data sources, backups, asset storage, et cetera
    Then I ensure the configurations are environment-aware with namespaces, environment values, filesystem flags, software sub-classes, or similar constructs
    And my CRUD actions performed in an environment only affect that environment
    And my automated routines for one environment never interferes with other environments
    And my features include relevant, text-based outputs of the current environment’s name for clarity

    ### 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
    Given I have a report of a behavior seen in production
    When I try to reproduce the behavior and understand why it occurs
    Then I should be able to obtain privileged diagnostic information
    And I can consult the application’s README for whom to contact, where to look, which services to use, and relevant commands to use
    And I should be provided the necessary authentications and authorizations that comply with best practices
    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
    And I am able to effectively debug the reported behaviors
    * 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
    7. 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
    * Authentication forwarding instructions
    * Public interfaces for Zabbix and Nagios
    * New Relic error traces
    * Centralized logging tools
  3. Reid Parham created this gist Apr 2, 2016.
    134 changes: 134 additions & 0 deletions Development Environment User Stories.md
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,134 @@
    Development Environment User Stories
    Skip to end of metadata
    Created by Reid Parham, last modified on Jan 07, 2015 Go to start of metadata
    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.
    1 Boilerplate Features and Behaviors For Engineering Needs.
    2 Epic: As an engineer, I can build a new development environment
    2.1 As an engineer, I want to read a guide to familiarize myself with an application
    2.2 As an engineer, I want to install application dependencies with simple, clear instructions
    2.3 As an engineer, I want a diagnostic tool that tells me if anything on my systems is not correctly installed and configured
    2.4 As an engineer, I want convenient authentication and authorization for using the application’s integrations
    3 Epic: As an engineer, I can fully rebuild an existing development environment
    4 Epic: As an engineer, I can maintain my development environment
    5 Epic: As an engineer, I can maintain and improve applications using my development environment
    5.1 As a systems engineer, I want my peers to understand the systems I maintain
    5.2 As a software engineer, I want my development environment to match production as closely as possible, so that I have confidence in its behaviors
    5.3 As a systems engineer, I want each environment isolated, so that accidental data loss does not occur
    5.4 As a software engineer, I want access to production diagnostics, so that I may be more effective at debugging problems
    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
    Given I have permissions to view the application source code
    When I view its README file
    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
    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
    Examples:
    https://github.com/copious/nau_store
    https://github.com/copious/Zumiez.com
    As an engineer, I want to install application dependencies with simple, clear instructions
    Given I have permissions to view the application source code
    When I view its README file
    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
    And I am able to bootstrap and maintain my own development environment
    And I update information as appropriate when I modify the repository or when I find information to be inaccurate or outdated
    Examples:
    https://github.com/sstephenson/rbenv
    As an engineer, I want a diagnostic tool that tells me if anything on my systems is not correctly installed and configured
    Given I have set up a development environment from README instructions
    When I run a diagnostic test command
    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
    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)
    Given I have permissions to view the application source code
    When I view its README file
    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-Copious > 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:
    https://help.github.com/articles/generating-ssh-keys/
    https://developer.github.com/guides/using-ssh-agent-forwarding/

    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
    Given I have created a new feature or modified an existing behavior
    When I submit the changes to a repository for peer review
    Then I write new and/or update existing documentation in README and relevant files
    And I use proper grammar, syntax, formatting, and examples of commands
    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
    Given I have a development environment for a codebase
    When I add features or maintain existing behaviors
    Then I run tests and interact with the applications
    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
    Given I am a maintainer of development environment tooling
    When I add or modify application dependencies like APIs, services, data sources, backups, asset storage, et cetera
    Then I ensure the configurations are environment-aware with namespaces, environment values, filesystem flags, software sub-classes, or similar constructs
    And my CRUD actions performed in an environment only affect that environment
    And my automated routines for one environment never interferes with other environments
    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
    Given I have a report of a behavior seen in production
    When I try to reproduce the behavior and understand why it occurs
    Then I should be able to obtain privileged diagnostic information
    And I can consult the application’s README for whom to contact, where to look, which services to use, and relevant commands to use
    And I should be provided the necessary authentications and authorizations that comply with best practices
    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
    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