Most programmers know principles and rules like SOLID, YAGNI, KISS, DRY. However we should always keep in mind that we should consider that "It Depends" almost everywhere. In software development there is no silver bullet and each pattern, practice and tool come with some trade-off. Below I am going to try to give some examples … Continue reading “It Depends” and Trade-offs
Tag: dev
Importance of justification
What should be included in a requirement, user story, issue, bug etc? Obviously things like acceptance criteria, priority, cost estimation (e.g. in story points), mock-ups. However from my perspective justification is the most important element. Why do we need anything? What is the problem? What is the context? What would be the benefits for the … Continue reading Importance of justification
Conducting a recruitment interview
So far I have been interviewing dozens (~30?) of programmers and occasionally testers. Below I am going to present some practices that according to my colleagues and interviewees are very good. Disclaimer: I am working in a rather big software development company. We have a lot of clients and products. Therefore maintainability of the software … Continue reading Conducting a recruitment interview
Do not believe any documentation
TL;DR; Do not believe any documentation. It might be incorrect or you may not understand it. Test everything. MSDN lies A few months ago I was writing some code in C# to get executable paths for all running processes. Generally, I tried the most common approach using BCL: string executablePath = process.MainModule.FileName; However, for some … Continue reading Do not believe any documentation
GitHub flow quiz
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
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”