Web Development

Development Workflow and Quality Code

Educate

There's simply no substitute for knowledge.

Collaborate with other developers and find mentors to advise, challenge and save you time. Fortunately, we have more conferences and Meetup options than ever before (check out our very own Franklin Developer Lunch & Learn). If you don't have a mentor just ask, there are plenty happy to help, they’ve been where you are and understand mentoring helps them immensely as well.

Pick a few blogs to read and create focused Twitter lists. Rollup newsletters are also a great way to stay connected without throwing away too much time. There's a lot going on and you have to be efficient about staying in the loop. Here are a few resources I like:

Above all, always have a pet project, something you’re passionate about and can learn from.

Organize

Enforce accountability through repeatable process.

Task lists with no structured action are easy to cheat so use a tool to stay on track. Kanban is great, specifically services like Trello and LeanKit. A workflow such as Backlog > Doing/Blocked > Review > Done is a good start.

Trello Workflow

We organize suggestions, planning, releases and workflow for public projects in Trello.

Don’t take anything for granted, stick to the plan. If you run into an issue figure out if the solution can be part of the process moving forward.

Teamwork Checklist

Caddis uses Teamwork to organize our standard project workflow.

Organization isn’t only for workflow, create well-structured codebases as well. That's a topic for another day.

Bootstrap

Don’t reinvent the wheel with every project.

Avoid common mistakes by bootstrapping. It’s not just about saving time, it's about creating well-tested, reliable baselines. We've rolled out our own front-end bootstrap called Wee over the last few years and open sourced it. On the backend, we typically build on Node with quality npm modules or Laravel for larger applications.

Wee Framework

Our front-end bootstrap incorporates all the current best practices and patterns.

Bootstrapping isn't just for the framework, smaller components should also be modularized. Tools like Browserifywebpack and Composer can help create structured modularity.

Standardize

Create quality through consistency.

Invest in readable code and accepted standards. Inconsistency creates inefficiency and technical debt. Some languages have guidelines like Python’s PEP and PSR in PHP but regardless what you adopt, most importantly make sure to clearly communicate your expectations. We've been developing an internal resource that defines all our development standards, guidelines and processes that we plan to open source soon.

Developer Standards

Our developer site is the aggregate of years of collaboration and experience.

Document

Balance well-written code with lean docs.

Sometimes codebases become complex. High-level comments naturally communicate intent. Standards like JSDoc, PHPDoc, RDoc and Javadoc offer structured syntax, IDE integration, and documentation generation. Make sure that your commenting guidelines are part of your standards.

JSDoc Commenting

Structured method comments like JSDoc above are great for loosely typed languages.

Audit

Don’t assume you write perfect code.

Write as many tests as you can and measure code coverage. Especially in a team environment small changes have imperceivable ripple effects. Testing suites are far more approachable than they used to be. We primarily work with PHPUnit and Intern for JavaScript, CodeClimate also helps us automate some checks.

Codeclimate

Automated continuous integration testing and metrics identify potential issues.

Nothing makes up for peer collaboration. Code reviews open up more for feedback than just syntax. Let senior developers review juniors and vice-versa, it fuels growth and fosters consistency. We perform daily morning code reviews. Milestone reviews are also important to get a better feel for the “big picture”. Remember, it's not all about pointing out issues, use reviews as an opportunity for kudos as well.

Automate

Lint, test, integrate, measure and deploy.

Enforcing standards manually can be tedious. Fortunately, you can lint just about any codebase and tests can easily be run across multiple environments. For JavaScript JSHint/JSCS with code editor plugins can be great to catch issues early. With backend projects we use PHP CodeSniffer, our specific configuration is available on GitHub.

Remember, there’s no substitute for manual testing. We have a granular testing checklist as part of our project workflow and leverage BrowserStack heavily on the front-end for cross-browser reference.