product development and tools

Post on 15-Jul-2015

111 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Improving your product development processA view on the tools that help us improve

Roelof ReitsmaLead developer Coconut team

Favorite gems:Bundler & Capistrano

Favorite tools:Gerrit & Jenkins

When I'm not working: cycling, running and creating an awesome meal!

Goal:

Show two challenges we encountered developing our product

Demonstrate how two tools help us improve (which might be useful for you)

Contents

● An introduction to Coconut● First challenge: reliability● Second challenge: changeability● Conclusion

Introduction to Coconut

● An private social network● Development in Ruby on Rails since 2008● Started as our intranet application● Focus on sharing knowledge● Competing with

– Any other intranet solution

– Enterprise social networks

– Sharepoint

Introduction to Coconut

Start of the project● The first release syndrome● Novice level developers● The 80% done developer

Lead to some “pretty horrifying code”

Hall of shame

Examples?

Hall of Shame

Hall of Shame

Hall of Shame

Hall of Shame

Hall of Shame

Hall of Shame

Hall of Shame

Hall of shame

And sometimes some weird structures as well

Challenge 1: reliability

● Application would break randomly● No way of telling up front if things are OK

or not● Fixing or creating bugs?

Challenge 1: reliability

Solution: do test driven development

Then you must have CI!● otherwise no-one will run tests● or say: it works on my PC!

Challenge 1: reliability

Introduce Jenkins (prev. Hudson)● Open source tool for CI● Java webapplication● Highly configurable ● Easy to create your own scripts

Challenge 1: reliability

Main advantage of CI:

Instant feedback!

Challenge 1: reliability

What do we do in a Jenkins build?– Create sandbox

– Check basics (bundle, database setup etc)

– Run specs

– Run integration specs

– Run acceptance specs

– Create review site

– Check if site runs at all

Jenkins: each git branch has a build

Jenkins: build queue

Jenkins: commits per build

Jenkins: review builds

Jenkins: review login page

Jenkins: review site

Jenkins: Chuck Norris plugin!

Build failed? Chuck's not happy

Jenkins: Chuck Norris plugin!

Build succeeded?

Challenge 2: changeability

You are going to write all code at least twice. And that's not even considering change.

● How hard is it to refactor?● How fast can you change functionality?

Challenge 2: changeability

● Less changeable if– Untested code

– Hard to read code

– Code duplication

– Invalid comments

– Unused code

– Bad naming

Challenge 2: changeability

Solution: do code reviews

But how?● First: define the process● Second: choose the tool

Challenge 2: changeability

Goal: prevent erroneous or bad code to get into central repository

1)Developer submits commit

2)CI checks commit for errors

3)Other developer reviews code

4)When both OK: code submitted to main repository

Challenge 2: changeability

Introduce Gerrit● Open source code review tool● Java webapplication● Highly configurable ● Jenkins integration available

Challenge 2: changeability

Main advantage of code reviews

You learn a lot by reading other people's code!

Gerrit: list of reviewable commits

Gerrit: list of reviewable commits

Gerrit: list of reviewable commits

Gerrit: commit view

Gerrit: commit view

Gerrit: commit view

Gerrit: diff patchsets

Gerrit: diff patchsets

Gerrit: grade commit

Gerrit: DONE!

Oh no! We've abandoned HENK?

Conclusion

● We drastically improved quality by doing TDD and code reviewing

● Jenkins and Gerrit are nice tools that are free, offer lots of features and do the job well

● However, tools are less important. Choosing the correct process is.

top related