Vilken är den främsta anledningen till att det går dåligt i vissa projekt för systemutveckling? Brist på samarbete är en given kandidat till den mindre attraktiva utmärkelsen. Och dåligt samarbete är nog vid närmare eftertanke en trolig orsak till problem i de flesta jobbsammanhang.
Så, frågan är, hur får man samarbete vad gäller systemutveckling att fungera bättre? I så väl enskilda team och projekt, som i hela företag och i alla andra tänkbara sammanhang i vilka mjukvara byggs.
Här ger svenska experter sina bästa tips.
– På Expressen resonerade vi tidigare att man ska göra det bästa teknikvalet för varje uppgift som ska lösas. Men sedan kom vi fram till att, nej, det ska vi inte. Vi bygger allt med Javascript i stället, berättar, Joel Abrahamsson, chefsutvecklare och teknisk utvecklingschef på Expressen.
Läs också: Expertens bästa tips: så lyckas du med devops
I och med att alla team på Expressen använder samma tekniska grundlösningar så blir det mycket färre gränser mellan de åtta utvecklingsteam som finns på Expressen och därmed enklare och bättre samarbete.
– Det är inte alltid teknikval som är viktigast. Det mesta går att lösa med olika språk och plattformar, utom väldigt specialiserade lösningar, till exempel vissa realtidslösningar, förklarar Joel Abrahamsson.
Han är noga med att framhäva att principbeslutet inte är hugget i sten:
– Om ett team kan argumentera för att det har speciella krav så är vi beredda att testa andra lösningar.
När Annie Thorell som är frontendutvecklare på konsultföretaget Iteam får frågan om hur man underlättar samarbete så är det första hon svarar att använda samarbetsverktyg som Trello. Nästa tips är mer specifikt för systemutveckling:

– Gemensam kodgranskning, code reviews, är ett naturligt forum för att sprida och dela med sig av kunskap. På sådana träffar kan vem som helst bidra, säger Annie Thorell.
Kodgranskning, code review, innebär att man tillsammans tittar på olika teammedlemmars kod. Kodgranskning kan underlättas med verktyg som Github och den kan göras ur olika perspektiv. Man kan till exempel lägga tonvikten på olika aspekter av koden vid olika tillfällen eller undersöka hur koden bidrar till specifika mål för det aktuella projektet.
Ett exempel på en aspekt på kod kan vara att använda nya konstruktioner för funktionell programmering i Java där det passar. Ett exempel på ett projektspecifikt mål kan vara att underlätta tester.
Läs också: Udda språkkunskaper ger högst lön för utvecklare
Även Fredrik Normén som är konsult på Squeed framhäver kodgranskning som ett sätt att förbättra samarbete.
– Det viktigaste är att lägga tonvikt på att man kommunicerar i teamen, att inte tillåta att folk sitter för sig själva med hörlurar på och bara knackar kod, utan att de verkligen samarbetar, fortsätter Fredrik Normén.
Samarbete handlar inte bara om hur människor fungerar och om tekniska produktval. Även arkitekturbeslut påverkar.
Christian Landgren som är vd på Iteam tycker att parhästarna funktionell programmering och oföränderlig (immutable) arkitektur underlättar samarbete. Eller rättare sagt att den typen av arkitektur gör att behovet av samarbete minskar.
Resonemanget är att man slipper jaga reda på alla som kan berätta om vad som händer när man ändrar i koden. Det ger samarbetet en högre kvalitet och skapar ett verkligt förändringsbart system.

– Om man bestämmer sig för principer, till exempel funktionell programmering, och håller stenhårt på dem så går det lättare att samarbeta, säger Christian Landgren.
Men människor och hur de fungerar är kanske trots allt den viktigaste ingrediensen vad gäller samarbete mellan utvecklare.
– Ibland får man acceptera att kommunikationen mellan två personer inte fungerar. Då kanske man får lov att byta roller och få in en ny person, sammanfattar Julia Wigselius, utvecklare på Sqore.