Codebase Review and Dependency Management

Table of Contents

1. Background

When working with new codebases there's a fairly reasonable workflow to follow to determine

2. Checklist

  • [ ] environment setup
  • [ ] application startup
  • [ ] command review
  • [ ] application server: configuration review
  • [ ] database: commands review
  • [ ] database: connectivity (confirm access minimally to a staging environment and can list databases and dump)

3. Example

When running a build the goal is to determine which of the dependencies is called in order and secondly by usage volume.

3.1. Structure

Determine the size of the project:

tree | wc -l

Determine the dependencies required for the application from setup to provide service.

3.2. Process Dependencies

  • Version Control: git + github
  • Workflow: n/a
  • Chat:

3.3. System Dependencies

  • Dependencies: chef (vs. vagrant, docker, puppet)

3.4. Development Dependencies

Provide a summary of what the client has elected to use for their application:

  • Logging: bunyan (loggly, windston)
  • Dependencies: bower (vs. npm, browserify, webpack, or client)
  • Language: es6+babel (vs. typescript, es5, coffeescript, clojurescript)
  • Build: requirejs
  • Packaging: webpack
  • Linting: n/a
  • Documentation: n/a
  • Tests: mocha + karma (vs. nightwatch, jasmine, chai, sinon, qunit)
  • Mock:
  • Utilities: jq
  • Watchers: nodemon

3.5. Application Dependencies

  • DB: redis
  • Storage: mongo (vs., sqlite, mysql, postgres)
  • Application: express
  • FE framework: angular
  • Template: lodash
  • Promises: when (vs. bluebird)
  • CSS: stylus (vs. less, sass, scss)
  • CSS: bootstrap
  • Utility: lodash, jquery
  • State: n/a (vs. redux, atom)

3.6. Deployment

  • Deployment: Chef
  • Versioning: Chef (identified in GitHub but without npm )

3.7. Operation

  • Applications:
  • Logging: Papertrail
  • Escalation: n/a
  • Dashboard: New Relic

4. Reading and Review

For any of the applications where there's no familiarity at least 10 minutes should be spent on the command line testing the library. For example:

  • jq: core is filter with
  • chef: ensure that a quick scan has been done

Create a client-specific artifact listing expected reading: