Skip to main content

Construction Principles

Managing complexity is Sineworks's Primary Technical Imperative.

“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.“ —Martin Fowler


Write code for people first, computers second.

Construction is tranforming the design into an executable program.

Nothing less than quality code is acceptable.

  • Quality code results in faster development.
  • Quality code will be especially encouraged early in the construction process.
  • Quality code is self-documenting.
  • Every line of code will be reviewed and formally inspected.
  • Quality examples will be documented and provided.
  • Elegance is a requirement.
  • Defects will be recorded with inspections, and defect hotspots will be noted.
  • Testing is merely one way to ensure code quality and does not replace other methods.

The construction process is highly iterative.

  • Iterations serve to remove defects and improve code quality.
  • Iteration encourages responding to change over following a plan.
  • The primary purpose of formal inspections is to iterate.
  • Iterations may include changing the design.

Changes will be controlled through the change control procedure.

  • Estimate the cost of changes.
  • Relook design if there are a high volume of changes.

Consistently re-estimate the construction schedule.

Construction progress will be measured.

  • Progress is not qualifiable.
  • Progress is measured by working code.

Principles of Continuous Integration

Put source code into a version controlled mainline

  • A minimally configured environment should be able to easily build, and run the product after cloning the repository
  • It should be easy to find the code for a given piece of work
  • The mainline is a single, shared branch that acts the current state of the product

Automate the build

  • Anyone should be able to bring in a clean machine, check the sources out of the repository, issue a single command, and have a running system on their own environment.

Make the build self-testing

  • Any programming task combines both modifying the functionality of the program, and also augmenting the test suite to verify this changed behavior

Every push to mainline should trigger a build

  • Utilize GitHub Actions

Fix broken builds immediately

Keep the Build Fast

  • Set up a deployment pipeline

Hide work-in-progress

Test in a clone of the production environment

Automate deployment