Github and waffle is a nice combo for the agile development process. Essentially bugs, feature requests, et cetera, all lives as issues in github, and then the labels changes as it goes through the various stages of the development process. Waffle helps out making a visual kanban, for those more visually inclined.

The most important benefit of  choosing githubs issue tracker is that it makes the development process very transparent, and lowers the barrier for getting into the project. Ie. everybody that visit the project page has direct access to the current development status, and it is right there with the source code.

The workflow when adding code is very nice with git, especially due to the branching. Making a new branch gives you your own version of the source code, which you can edit on, make changes etc., and when you have implemented the desired functionality you can easily merge it back into the mainline project.

There are some convention for branching, and committing, that makes it integrate nicely with the issue tracker: if the branch is called 123-and-then-some-description, this actually tells the system that you are working on issue#123, and waffle will add the label “in progress” to the issue, so everybody can see that it is being worked on.

Having a separate branch for each issue, also means that you can work on the issues independently. Ie. if you are implementing a large feature, and also need to do a quick bugfix, – then having it as separate branches, means that you can easily merge the bugfix into the mainline as well as the feature branch, without worrying about getting unfinished feature code into the mainline, etc.

To make a new branch you use the commands:

git branch 123-and-then-some-description
git checkout 123-and-then-some-description

– and now you are working on a new “copy” of the code where you are working on the mentioned issue. This allows you to make changes, commit (make snapshots), and upload the changes to github, without altering the main project. When pushing changes to github, you need to do

git push –all

– to make sure that all branches are pushed upstream. Running in a separate branch, and pushing the work in progress back to github, also means that the automatic tests through travis-ci also runs on code in progress.

When you fix a bug, it is good to include the comment “fixes #123” in the commit message, as this will automatically ensure that the pull request is linked to the issue, and that the issue will be closed when the pull request is accepted.

So when the code is done, I just make a pull request. Having a pull request for each change, also enables code review, so we can read through each others code, and know what is going on.

When using waffle for kanban, we have 5 columns: the backlog, blocked, in-progress, needs-review, and done. We do not have one for current-iteration, as the developers prioritises which issue to work on, – in a more scrum-like environment, it would make sense to add that 6th column. The backlog contains all the open issues. Blocked are issues that should be in progress, but cannot be worked on at the moment due to external causes, or other bugs. In progress are the issues we are currently coding on. Needs review are those issues which has been implemented, and has a pull-request, but where we have not had peer-review/or full test yet. For larger teams it would make sense to have another column for user-acceptance-testing/staging, before the final done.




Notes and projects, - mainly for own use/reference.

plan
404
2017 04 28 1001 nat
2017 04 24 heavenly menu icon
2017 04 23 master of orion
2017 04 23 geopolitical dodecahedron
2017 04 20 mainstream code
2017 04 20 code infratructure
2017 04 18 easy publish
2017 04 11 generic backend server
2017 04 11 future proof webapps
2017 04 10 simple javascript
2017 04 07 new site note
2017 03 09 building for the future browser
2017 03 02 herkules
2017 02 27 www.solsort.com landing page
2017 02 24 stream of consciousness and book idea
2017 02 08 user interfaces as pure json data
2017 02 08 shell ipfs notes
2017 02 07 contango
2017 01 31 thoughts about distributed cloud
2017 01 25 copenhagen
2017 01 15 my startup
2017 01 15 linux mac keyboard
2017 01 11 deploying with github travis and unpkg
2017 01 09 toastmaster talk
2017 01 03 checklists
2017 01 02 songs
2016 12 30 my calendar early 2017
2016 12 29 metode til daglig motion
2016 12 29 javascript features in modern browsers 2016
2016 12 22 review 2016 direction 2017
2016 12 21 bootstrapped clojurescript
2016 12 15 extending others webservices
2016 12 07 sprint off practical
2016 12 05 blog editor notes
2016 11 20 data calculator
2016 11 19 virtual machine revisited
2016 11 16 virtual machine memory layout for a functional language for embedded systems
2016 11 16 setting up android development react native under linux
2016 11 15 important javascript features
2016 10 30 quarterly review 2016q3
2016 10 21 notes
2016 10 20 bibliotekernes udviklernetvaerksmode
2016 08 11 Fokus
2016 07 25 Læring
2016 07 15 Decentrale apps
2016 07 07 On God
2016 07 07 Why I write
2016 07 06 Productivity tools
2016 07 06 Improvisation
2016 07 03 Iliaden
2016 06 30 Quarterly review 2016q2
2016 06 27 Tools for text editing
2016 06 08 Narrow vs wide
2016 06 07 Habitica backup
2016 06 05 OwnCloud and Docker
2016 06 04 ABCD-treat
2016 06 02 My “projects”
2016 06 01 A life on four pages
2016 05 07 Month of work and son
2016 05 03 Experience with Caddy webserver
2016 04 27 Hours vs solutions
2016 04 25 Dimensions of life
2016 04 21 Trie performance
2016 04 21 Vision for life
2016 04 18 Straight forward
2016 04 17 Mobibl
2016 04 17 Current projects
2016 04 16 Discipline and flow
2016 04 13 Mythology ownership
2016 04 09 Notes about a distributed database design
2016 04 08 Varying intensity
2016 04 06 Server set up: Caddy and Docker
2016 04 05 Probabilistic sorting
2016 04 04 Start nu bare
2016 04 03 Luck, notes, and just do it
2016 04 03 Writing subjects
2016 04 02 Pen-and-paper role playing: A heavily optimised cleric build
2016 04 01 Identitetsniveauer
2016 03 31 1-2-3 priority
2016 03 31 Kvartal
2016 03 30 solsort direction
2016 03 29 Morning routine challenge
2016 03 29 Benefits from writing
2016 03 28 Hierarkisk tid
2016 03 27 Getting back to writing
2016 03 27 Mind of the traveller
2016 03 08 Ninja Gig
2016 03 07 A useful question.
2016 03 06 The power of daily the checklist
2016 01 02 Mobile HTML5 React libraries
2016 01 01 Interesting technologies
2015 12 30 Tilbageblik 2015
2015 12 13 Årets gang, og retning
2015 11 18 Data JSON
2015 11 16 Rethinking BibApp
2015 11 15 Idea for simplifying authentication
2015 11 15 Old front-page with project list
2015 11 15 Variable byte encoding of unsigned integers.
2015 11 15 WordPress theme development
2015 11 14 Let’s encrypt!
2015 11 14 Laptop branding
2015 11 14 Word order in programming and human languages
2015 11 13 Swing dancing in Copenhagen
2015 10 20 MuBackend revisited
2015 10 07 B-trie
2015 10 02 The 3-day sprint
2015 10 02 No screen-time in the evening
2015 09 29 Lemon status 2
2015 09 17 App entry point
2015 09 15 Projekt Lemon
2015 09 11 Checkliste for brunch
2015 09 10 Async loaded figwheel cljs
2015 09 09 Hack4dk warmup
2015 09 08 solsort widget in progress
2015 09 07 Development structure, and Lemon status 1
2015 09 06 Getting back to daily writing.
2015 08 26 MuBackend
2015 08 22 Peer app notes
2015 08 21 Distracted by music
2015 08 20 Flow and focus
2015 08 19 Coding habit
2015 08 18 Responsive base app design
2015 08 17 Mobile UI
2015 08 16 Associations and read-somedays on meta-thinking
2015 08 15 Half-monthly review 2015-15
2015 08 14 Learning
2015 08 13 Thinking about literary formats
2015 08 12 NFMS synopsis
2015 08 11 Writing direction
2015 08 10 Børnebøger til 3-årig
2015 08 09 The power of music
2015 08 08 Æsops fabler
2015 08 07 Stream of consciousness
2015 08 06 Going out
2015 08 05 Git workflow with github and waffle
2015 08 04 20 years of technology
2015 08 03 Growing older
2015 08 02 Keep it simple
2015 08 01 Easy piano blues
2015 07 31 Planned vs improvised
2015 07 30 Game mastering, and making stories
2015 07 29 Exercising
2015 07 28 Programmering på skoleskemaet
2015 07 27 Wishlist, and gifts
2015 07 26 Daily writing experiences
2015 07 25 Awareness of time
2015 07 24 Focus
2015 07 23 Food inventory
2015 07 21 Checklist and food for throwing a party
2015 07 20 Spending time with a 3 year old
2015 07 19 Configuration management tools
2015 07 18 Solsort backend tech
2015 07 17 Why WordPress.
2015 07 16 Tango fusion dance
2015 07 15 Favourite board-like games
2015 07 14 Efficient cooking
2015 07 13 Record yourself
2015 07 12 Remember yourself
2015 07 11 Being a father
2015 07 10 solsort.com technology changes
2015 07 09 Tech videos for cooking and dishwashing
2015 07 08 PouchDB .get internals
2015 07 07 Web data storage
2015 07 06 Falling asleep
2015 07 05 Dress style
2015 07 04 Milestone reviews
2015 07 03 Hierarchical review
2015 07 02 Summer dance
2015 07 01 Critically non-urgent
2015 06 30 GitHub shields and badges
2015 06 29 Chakras
2015 06 28 Email processing
2015 06 27 Consuming in Copenhagen
2015 06 26 Programming Languages
2015 06 25 Death, and the source of self
2015 06 24 Checklist for contracts
2015 06 23 The state of mind of traveling
2015 06 22 Do it now
2015 06 21 Making modules for Clojure/ClojureScript
2015 06 20 天
2015 06 19 Coding tips
2015 06 18 Dancing connection
2015 06 17 On social media
2015 06 16 Half-monthly review 2015-11
2015 06 15 Regular review
2015 06 14 Operational requirements
2015 06 13 Why deliver as open source
2015 06 12 Parkinsons law
2015 06 11 Open Danish bibliographic data, and semantic markup
2015 06 10 Network of gratitude
2015 06 09 Sorting photos with linux shell scripting
2015 06 08 Intuitive vs sensing
2015 06 07 An efficient weekday
2015 06 06 Personal writing
2015 06 05 Strategic vs tactical thinking
2015 06 04 Why ClojureScript?
2015 06 03 Dancing in Copenhagen
2015 06 02 The challenge of daily writing.
2015 05 13 Barefoot tango
2014 07 01 Pricing scale
2012 03 18 Presentation evaluation
2006 07 01 Fototips
2005 07 01 Skrivetips