Collaborative Software
Development
Alexander Serebrenik

a.serebrenik@tue.nl#WOCinTech Chat
Any fool can write code
that a computer can
understand.
Good programmers
write code that humans
can understand.
Martin Fowler
software developer, author,
speaker
How do developers
communicate?
How do developers
communicate?
1 component =
1 concern
reuse, independent development
Separation of concerns
Design
Interface
(API)
https://youtu.be/
s7wmiS2mSXY?t=1m5s
User
Producer
API
Who can help me?
API API API API
What functionality
do I want?
#WOCinTech Chat
function bs(x){

   var l = x.l;

   for (var m = l-1; m>=0; m--) {

     for (var q = 1; q<=m; q++) {

       if (x[q-1]>x[q]) {

           var s = x[q-1];

           x[q-1] = x[q];

           x[q] = s;

        }

     }

   }

   return x;

}
function bs(x){

   var l = x.l;

   for (var m = l-1; m>=0; m--) {

     for (var q = 1; q<=m; q++) {

       if (x[q-1]>x[q]) {

           var s = x[q-1];

           x[q-1] = x[q];

           x[q] = s;

        }

     }

   }

   return x;

}

function bubbleSort(arr) {

   var len = arr.length;

   for (var i = len-1; i>=0; i--) {

     for (var j = 1; j<=i; j++) {

       if (arr[j-1]>arr[j]){

           var temp = arr[j-1];

           arr[j-1] = arr[j];

           arr[j] = temp;

        }

     }

   }

   return arr;

}
Variable
names matter
Isn’t arr.sort() better?
Share!
Bugs, suggestions
of new features, …
Code
Code changes
suggested by
(external) contributors
Popularity
Derived
projects
Integrated code changes
suggested by (external)
contributors
Official milestones
Community License
language:	python	
python:	
		-	"2.7"	
-	“3.4"	
before_install:	
		-	if	[[	"$TRAVIS_PYTHON_VERSION"	==	"2.7"	]];	then	
						wget	https://repo.continuum.io/miniconda/Miniconda2-latest-Linux-x86_64.sh	-O	miniconda.sh;	
				else	
						wget	https://repo.continuum.io/miniconda/Miniconda3-latest-Linux-x86_64.sh	-O	miniconda.sh;	
				fi	
	<…>	
install:	
		#	Install	recipy.	
		-	python	setup.py	install	
	<…>	
script:	
		-	cd	test/	&&	behave	
		-	cd	..	
		#	Run	py.test	with	'v'	(verbose)	to	show	test	function	names	and			
		#	'rs'	to	show	reasons	for	skipped	tests	
		-	py.test	-v	-rs	integration_test
Travis-CI
Travis-CI in
Apache Thrift
Atze W. Hold
1. Think about the APIs before the implementation

2. Variable names (and, broader, readability) matter

3. Be lazy: reuse! “Not built here” is not a sin. 

4. Share using modern technologies: GitHub vs USB sticks

5. Automate change submission and build in quality checks

6. Control your technical debt
7. Talk to software engineering people: we don’t always have
solutions but we can think together with you!

Collaborative Software Development