Nowadays there are three popular branching models: GitFlowGitHub flowTrunk Based Development Personally, I find GitHub flow a very pragmatic approach as it is simple, yet powerful. If you do not need to maintain a lot of versions of your software, then you do not need to use the complex branching model proposed by GitFlow. On … Continue reading GitHub flow quiz
Silly names and buzzwords in software development
My personal ranking of terms that are in my opinion incorrect or overused: DevOps (as a role): DevOps is about culture, it was not meant to be a role! From my experience, there is almost no (or very subtle) difference between DevOps, Administrator, Operations. Why not sticking to the old good term Administrator?Quality Assurance (as … Continue reading Silly names and buzzwords in software development
TDD is not (only) about testing
Test-Driven Development is rather a design tool than a testing tool. Believe me (or not), but developers are not great at testing. They are too focused on getting the functionality done. Testers are always going to find bugs, even if there is 100% code coverage. What are the main benefits of TDD? Thinking first about … Continue reading TDD is not (only) about testing
High code coverage does not guarantee high quality software
Let's look at an academic example: function CalculateQuadraticRoots(a, b, c) { delta = b*b - 4*a*c d = Math.Sqrt(delta) x1 = (-b-d) / 2*a x2 = (-b+d) / 2*a return [x1, x2] } function Test_CalculateQuadraticRoots() { result = CalculateQuadraticRoots(1, -1, -2) Test.Assert([-1, 2], result) } The code has 100% code coverage, yet it works (without … Continue reading High code coverage does not guarantee high quality software
Concurrency – beyond the basics
Most of the programmers are aware of the typical issues of concurrent computing: Race conditionDeadlockStarvationLivelock All of the above are caused by improper synchronization. The need of additional concurrency abstractions Let's see the following pseudo-code: value = "not assigned" isCompleted = false func A() { while !isCompleted { } print value } func B() { … Continue reading Concurrency – beyond the basics
Listen to your daily
Your daily standup/scrum/whatever can tell a lot about your team, product and process. When people are just reporting (not planning and asking for help), then there might be some issue in the dev team. When during each daily new issues are popping out, then probably there is something wrong in software quality. When the daily … Continue reading Listen to your daily
Professionals say “no”
Today during one of technical meetings, I have learned that professionals are assertive. When something is not correct, they clearly articulate it. What is probably the most important: they say it calm and unhesitatingly. Professional software developers should always be able to say 'no', when management wants to make shortcuts or even hacks. These almost … Continue reading Professionals say “no”
The Journey Begins
Thanks for joining me! package main import "fmt" func main() { fmt.Println("Hello world!") }