Improving your productdevelopment processA view on the tools that help us improve
Roelof ReitsmaLead developer Coconut teamFavorite gems:Bundler & CapistranoFavorite tools:Gerrit & JenkinsWhen Im not working: cycling, running andcreating an awesome meal!
Goal:Show two challenges we encountereddeveloping our productDemonstrate 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 CoconutStart of the project● The first release syndrome● Novice level developers● The 80% done developerLead to some “pretty horrifying code”
Hall of shameAnd sometimes some weird structures aswell
Challenge 1: reliability● Application would break randomly● No way of telling up front if things are OKor not● Fixing or creating bugs?
Challenge 1: reliabilitySolution: do test drivendevelopmentThen you must have CI!● otherwise no-one will run tests● or say: it works on my PC!
Challenge 1: reliabilityIntroduce Jenkins (prev. Hudson)● Open source tool for CI● Java webapplication● Highly configurable● Easy to create your own scripts
Challenge 1: reliabilityMain advantage of CI:Instant feedback!
Challenge 1: reliabilityWhat do we do in a Jenkins build?– Create sandbox– Check basics (bundle, database setupetc)– Run specs– Run integration specs– Run acceptance specs– Create review site– Check if site runs at all
Challenge 2: changeabilityYou are going to write all code at leasttwice. And thats not even consideringchange.● 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: changeabilitySolution: do code reviewsBut how?● First: define the process● Second: choose the tool
Challenge 2: changeabilityGoal: prevent erroneous or bad code toget into central repository1)Developer submits commit2)CI checks commit for errors3)Other developer reviews code4)When both OK: code submitted to mainrepository
Challenge 2: changeabilityIntroduce Gerrit● Open source code review tool● Java webapplication● Highly configurable● Jenkins integration available
Challenge 2: changeabilityMain advantage of code reviewsYou learn a lot by reading otherpeoples code!
Conclusion● We drastically improved quality by doingTDD and code reviewing● Jenkins and Gerrit are nice tools that arefree, offer lots of features and do the jobwell● However, tools are less important.Choosing the correct process is.