DJANGOCODERS.COM THE PROCESS. Core strength built on healthy process



Similar documents
Mastering Continuous Integration with Jenkins

Git Branching for Continuous Delivery

November 12 th 13 th London: Mastering Continuous Integration with Jenkins

Modern CI/CD and Asset Serving

Security Automation in Agile SDLC Real World Cases

StriderCD Book. Release 1.4. Niall O Higgins

Zero-Touch Drupal Deployment

Agile Austin Dev SIG. June Continuous Integration (CI)

Jenkins Continuous Build System. Jesse Bowes CSCI-5828 Spring 2012

Continuous Keylane

Continuous Integration and Delivery at NSIDC

Gitflow process. Adapt Learning: Gitflow process. Document control

1.Full-Time Positions Marketing and Project Consultant

How To Manage A Multi Site In Drupal

Tidepool Informational Pre-submission Meeting

Best Overall Use of Technology. Jaspersoft

JavaScript Applications for the Enterprise: From Empty Folders to Managed Deployments. George Bochenek Randy Jones

Essential Visual Studio Team System

Software Continuous Integration & Delivery

Practical continuous deployment

A Baseline for Web Performance

Modern Web development and operations practices. Grig Gheorghiu VP Tech Operations Nasty Gal

CoDe:U Git Flow - a Continuous Delivery Approach

Continuous Integration and Delivery. manage development build deploy / release

Advanced Computing Tools for Applied Research Chapter 4. Version control

Introducing Xcode Source Control

Power Tools for Pivotal Tracker

Continuous Integration

CPSC 491. Today: Source code control. Source Code (Version) Control. Exercise: g., no git, subversion, cvs, etc.)

GitLab as an Alternative Development Platform for Github.com

FogBugz & Kiln. Tools for Software Teams From the Makers of Stack Overflow and Trello. Fog Creek Software

Version Uncontrolled! : How to Manage Your Version Control

Improving your Drupal Development workflow with Continuous Integration

5 Mistakes to Avoid on Your Drupal Website

depl Documentation Release depl contributors

From Traditional Functional Testing to Enabling Continuous Quality in Mobile App Development

Development at the Speed and Scale of Google. Ashish Kumar Engineering Tools

Content. Development Tools 2(63)

Successful PaaS and CI in the Cloud

Tutto quello che c è da sapere su Azure App Service

Service Definition Product Management & Business Analysis Services

Continuous Integration (CI) for Mobile Applications

Continuous Integration and Automatic Testing for the FLUKA release using Jenkins (and Docker)

Source Code Management for Continuous Integration and Deployment. Version 1.0 DO NOT DISTRIBUTE

Palantir.net presents Git

Paul Barham Program Manager - Java. David Staheli (dastahel@microsoft.com) Software Development Manager - Java

Testing Rails. by Josh Steiner. thoughtbot

New Web Interface for Men & Mice Suite Final report

A central continuous integration platform

Faculty of Science and Technology MASTER S THESIS

Ruby on Rails Development Services

Fundamentals of Continuous Integration

In depth study - Dev teams tooling

Developer Workshop Marc Dumontier McMaster/OSCAR-EMR

Getting Started. UC Santa Barbara Setup public repository (GitHub, Bitbucket) Identify workflow:

We don't always give our clients what they originally wanted but we always bring them what their business really needs.

Jenkins World Tour 2015 Santa Clara, CA, September 2-3

Continuous Integration. Wellcome Trust Centre for Gene Regulation & Expression College of Life Sciences, University of Dundee Dundee, Scotland, UK

Automate Your Deployment with Bamboo, Drush and Features DrupalCamp Scotland, 9 th 10 th May 2014

Software configuration management

Architecture Workshop

Continuous Integration and Bamboo. Ryan Cutter CSCI Spring Semester

#define. What is #define

A Pythonic Approach to Continuous Delivery

Lucy Zhang UI Developer Contact:

Continuous Integration

GOVERNMENT SERVICES. Open Source Software Development Web Content Management Mobile + Web Apps

Web UI & Functional Test Automation for Continuous Agile Deliveries

AUTHOR: REVISION BY: ADS Lead/Manager ESYS Windows OSA

The Learn-Verified Full Stack Web Development Program

Delivery. Continuous. Jez Humble and David Farley. AAddison-Wesley. Upper Saddle River, NJ Boston Indianapolis San Francisco

Version Control! Scenarios, Working with Git!

Localization for Agile Teams

Application Release Automation (ARA) Vs. Continuous Delivery

Improving database development. Recommendations for solving development problems using Red Gate tools

Plan, track, work smarter and faster

DreamFactory & Modus Create Case Study

WHITEPAPER. Improving database development

Getting Started with Kanban Paul Klipp

Educational Collaborative Develops Big Data Solution with MongoDB

WHITEPAPER. SBM Path to Production for Enterprises

A How-to Guide By: Riaan Van Der Merwe, General Manager, Dynamics, Neudesic

IT Home 2015 DevOps 研 討 會

Open Source Technologies on Microsoft Azure

How to successfully build an app with a decentralized team

CONTINUOUS INTEGRATION. Introduction

The care of open source creatures. Vincent Sanders

Build Automation for Mobile. or How to Deliver Quality Apps Continuously. Angelo Rüggeberg

Using GitHub for Rally Apps (Mac Version)

Continuous Delivery for Alfresco Solutions. Satisfied customers and happy developers with!! Continuous Delivery!

gistics RESPONSE Reviewer s Guide 2015

Experience managing the delivery, ongoing success, and continuous improvement of one or more digital products and/or platforms.

A BASELINE FOR WEB PERFORMANCE WITH PHANTOMJS

Scripts. MIT s Dynamic Web Hosting Service

ServiceNow Certified Application Developer. Examination Specifications

Continuous Integration and Deployment Modern Technique's

Eliminate Workflow Friction with Git

Source Control Systems

CoderDojo Community Platform Requirements Specification

Software infrastructure for Java development projects

Transcription:

DJANGOCODERS.COM THE PROCESS This is a guide that outlines our operating procedures and coding processes. These practices help us to create the best possible software products while ensuring a successful working relationship with our clients. This is how we work Core strength built on healthy process

Our Operating Process Iterations and Hours We work on client projects in weekly iterations, five days per week. We typically work work Monday through Friday (barring no major holidays or staff illness). We work during normal business hours, but usually do not track the exact number of hours worked. All work that is completed during the week is clearly documented via source control, project management systems, chat and weekly recap meetings. Invoicing and Payment We invoice every Friday or at the end of the month. Because we bill by the week, we do not itemize our invoices. We keep things simple for us and our clients and charge one amount per developer, per week. Payment is due within 15 days of the invoice date. Invoices can be paid by wire transfer. Meetings We don t have a lot of meetings. Our client s budgets are far better served when we re actively working on a project. However, we do begin each project with a Planning Session, which lasts between two hours and a full day. At the end of each week, we hold a quick recap meeting with our clients to discuss the iteration that was just completed. We limit the recap meeting to 30 minutes. We use Google Hangouts for the Planning Session and the recap meetings.

Communication Slack is our preferred chat system. Each project receives a private chat room that brings together our developers and project stakeholders. This chat room is used to deliver all of our communications. We use Slack integrations extensively to notify us when important events occur. Example events include: staging/production deployment notifications bug notifications source control commits project management updates If you have files, documents, or images, you can drop them into the Slack chat room for group sharing. This practice eliminates cumbersome, back-and-forth processes such as sending multiple emails to several people or adding individual accounts to cloud shared folders. In addition, we document our progress using git and project management tools (JIRA, Phabricator, Trello, Asana, etc). We put multiple processes in place so our clients never need to ask, How is everything going?. We try to use chat as much as possible so we can communicate frequently and informally. CHAT

Project Management Our preferred project management software is Phabricator. Phabricator is a collection of open source web applications developed by Facebook that help software companies build better software. It does ticketing with agile/kanban style boards, has good integration with source version control and continuous integration systems, a code review app that s very nicely integrated into our git flow, and lots of other goodies. Compared to others, we found Phabricator to be lightweight, easier to administer and more productive. These tools are easy to grasp and client friendly. We usually set up our boards in the following way: As illustrated, features are first placed into the Backlog column. The client is expected to help write these features and review and suggest any necessary changes to them. Then, each week, we estimate which features can be completed and move them into the Ready column. While we do our absolute best to complete the Ready features within the week s iteration, we cannot guarantee that all work will be finished. Incomplete items from an iteration get moved to the next one. Once development or design work begins on Ready features, they are moved to In Progress. Once completed, In Progress features are reviewed, and once they are accepted, items are marked as Done. For more details about this process, see Our Code Process. Some of our clients use Atlassian tools, we can work with them as wel The First Week Our work in the first week can vary depending on the project s scope. But here are some of the things that we typically do: Conduct the Planning Session with the client Set up any required accounts (hosting, source control, etc) Set up continuous integration (CI) Specify development process / workflows Audit existing code Write tests to cover untested functionality

The Planning Session Before we begin working on a new project, we conduct a Planning Session. During this meeting, we discuss the project and its relationship to the client s overall business. We also talk about use-cases, product validation, and the project s overall goals. This conversation enables us to produce a Roadmap that details the project s timeline and helps ensure its success. Maintenance Agreements After completing a project, we can transition to a maintenance agreement. Maintenance agreements are billed as a monthly retainer and typically include: security updates and patches advice on best practices help architecting new features ongoing code review bug fixes Maintenance agreements require a minimum threemonth commitment and include up to 32 hours per month.

Source Control Our Code Process We use Git to manage the source code all of our projects. We prefer to use hosted solutions, Github or Bitbucket but can use client s custom hosted repository if required. Frameworks We use ember.js for the front-end of our apps and Python based frameworks (Django or Flask) for the back-end code and API. We have years of experience working with these framework and know the bits required to make them work really well together on large scale applications. However, occasionally, we use Django/ Flask for the front-end in cases where we can t use Ember. Development Workflow We follow a standard branching workflow during development: A developer creates a branch from master that describes the feature. The branch is prefixed with the id of the feature/task being worked on. Example: SU-506-allow-users-to-sign-inusing-facebook

During development, the branch is periodically updated with the latest changes from master, to avoid large conflicts. When the code is complete with tests written to back up the change, the developer looks through the commit messages in the branch and makes sure that they are readable and understandable. Any commit messages that need to be updated are fixed using the interactive rebase feature of git. The developer creates a Pull Request. The team is notified and we require that all Pull Requests are reviewed and approved by at least one other team member. This marking indicates that the changes are ready to merge to master. When the Pull Request is opened, a CI (Continuous Integration) server runs the test suite, ensuring the entire test suite still passes. The CI server will automatically update the Pull Request with the pass/ fail status of the test suite. If a Pull Request is approved and passes CI, it is merged to master by the developer who originally opened it. The CI server will run the test suite a final time, and automatically deploy to a staging server where it can be reviewed from the browser. After a merge, developers should spot check the feature on the staging server so they can be sure everything works as intended in a production-like environment. More on Continuous Integration Testing Automation from a CI server (Jenkins, Travis CI, Bamboo, etc) is vital to our process. Testing Automation ensures our developers write proper tests, and it prevents changes to the app from breaking the test suite. Once merged, the CI server auto-deploys to staging. When running the test suites we also monitor the code coverage. Releasing to Staging We auto-deploy to a staging server so that it always reflects master. This deploy serves as the final checkpoint before code is released to production.

Releasing to Production We release code to production by either: (1) manually deploying through a script or git push; or (2) using the promote feature available on certain hosts. All of our developers can deploy to production, and they typically do so multiple times per day. Databases Postgres, our database of choice, is a proven, reliable, and modern database suitable for a wide range of use cases. We also also have experience working with NoSQL databases (MongoDB, CouchDB, Neo4j) Code Quality We value code quality. Code that is easily readable and cleanly written is easier to maintain and update in the future. We use tools like Pylint, JSHint, ESlint along with code reviews in Pull Requests to help us maintain code quality. We aim for about 80% test coverage on projects. We ve found that striving for a very high percentage offers diminishing returns, and can cause developers to write bad or unnecessary tests. Instead, we rely on our developers to write enough tests to be confident that the project is sufficiently covered Code Style For Python code, we follow the guidelines promoted by PEP8, the only rule that we ve not enforced is the number of characters per line. We were hitting the 80 characters limit too often, so we decided to use 120. For JavaScript we follow the style guide published by AirBnb (https://github. com/airbnb/javascript). We use Ember-cli and follow their conventions and best practices for Ember apps that we develop.

Test Driven Development (TDD) We practice TDD as much as possible. We write extensive unit tests and acceptance tests to ensure the integrity of each feature. In some situations, we write code first and write tests afterwards. But, usually we write the tests first. Either way, tests are always written as they are critical to ensure that future features and iterations do not break existing functionality or business rules. vv For Ember apps we develop and write acceptance tests against client-side fixtures (using Ember-cli-mirage), so we can test the frontend independently from the backend. For integration testing we start by using the acceptance tests against the Python backend instead of the client-side fixtures and write additional tests for functionality that depended on the Python backend and was not included in the acceptance testing. Monitoring It s important to track your application s performance metrics. We use kibana to visualize metrics from different places and tools. We use tools like New Relic or Ruxit to detect and improve slow actions and queries. Bug Tracking We recommend Sentry to track bugs. We find Sentry works best for environments with different types of codebases or separate projects. Other services will work fine too (bugsnag, airbrake, etc). The important thing is that there is a system in place. We can t wait to see what we get to build with you. http://djangocoders.com