Software development is not about coding. Code is only the way we communicate our intentions to the scrap box under our desk. Software development is about thinking and finding simple solutions to complex problems. We all know this. But also very often we forget it. The wrongest thing you can do is to start coding right after you got a task. It is scary how many people do precisely that. Of course, I don’t mean simple tasks like adding an extra field to a form. In this article, I will share with you how I approach and plan my development…

The last time we talked about software architecture, I introduced you to Layered Architecture. Today we will start with Clean architecture (also called Onion or Ports and adapters architecture) and more specifically domain-driven design. Clean architecture as a concept is significantly more complex than layered architecture. So I decided to split the article into two parts. In today’s article, I will try to explain the idea behind Domain-driven design simply. What is Domain-driven design? We need to understand domain-driven design because it lies in the center of Clean architecture (figuratively and literally). Domain-driven design has its technicalities (that we are…

This one will be short. Yesterday, while I was browsing a programming forum, I came across a statement like this: “… and currently, I am creating some neat abstractions if I need something more in the future…”. This is so wrong! And let me tell you why. Overengineering Overengineering in software development means creating something that is not needed. Something that brings overhead to the development process and inefficiency to the end product. An elementary example of overengineering is if all your applications data can be saved in a 10 line XML file, but you use a SQL database. Predicting…

Layered architecture is the first architectural pattern that we are going to explore. If you haven’t read my article about software architecture, I suggest you do it before continuing with this one. What is a layered architecture? Simply put, the layered architecture pattern’s main idea is to group and isolate system concerns while defining strict communication direction between them. Each group of related modules/classes we call layer. Different layers are encapsulated and depend on each other through abstraction and well-defined interfaces. Layers in this architecture pattern are stacked. The request direction is from the upper layers to the lower layers.…

While writing my series of posts about software architecture, I want to share with you a great book about the topic. The book is Software Architecture in practice 3rd edition by Len Bass, Paul Clements, and Rick Kazman. The book explains the entire process of software architecture design. Some of the topics you will learn are: What is a software architecture, and why it is important;Contexts of software architecture;What are quality attributes, and how to specify them;How to model quality attributes;Designing, implementing, and documenting software architecture;Evaluation of software architecture;Management and economic analysis; The book has a very academic approach, so…

In this series of posts, I will introduce you to the most popular software architecture types. But before we delve into the most common variants, let us talk about software architecture itself. What is software architecture? It is tough to write simply for such a complex topic as software architecture but let me try my best. A software system is made up of individual elements. Elements could be databases, application servers, message brokers, load balancers, etc. Each element has its properties and characteristics. Between these elements, there are relationships. The way we structure these elements and their relationships, we call…

And it is bad I am just writing to say that there will not be an article this week. Some very nasty flu/COVID-19 got me :(. I have not been tested yet because I should wait in a queue for 3-4 hours for a test, but I have all the mild symptoms. I am currently isolated and following the doctors’ recommendations. What bothers me most is the extreme fatigue and muscle pain. I feel like I am hit by a train. Anyway. I plan my next articles to be about the different software architectures. A series of articles on what…

One way to spot a lack of professionalism is missing unit tests in a project. It is frightening how many dev teams do not write any tests and rely only on manual testing. In the following paragraphs, I will try to convince you about the importance of writing unit tests. What are unit tests? Unit tests are the smallest tests you can write. They tend to test different parts of your code (mainly single methods). Unit tests should be very fast so that you can run them often. It is important to stress that they do not test how different…

Two reasons provoked this article – my previous article and a recent Twitter post asking, “How do you learn new technologies?”. In the next paragraphs, I will try to explain how I see learning should happen. Please have in mind that what I suggest is not for total beginners currently learning basics as “if statements” and variables. Young developer with great ideas And not that great ones. When you are inexperienced, everything is new to you. Everything is exciting, and you want to try everything. It is a lot easier to jump on the hype train for something new. Always…

Developer’s path is littered with many difficulties, but believe me, tutorial hell is something that really can ruin your progression and even career. Things are not the same as ten years ago. Now we have tutorials, video tutorials, courses, coding bootcamps literally behind any corner. That, of course, is great, but also it is challenging for beginners. It is challenging in a way that an inexperienced developer who does not have a lot of confidence jumps from tutorial to tutorial seeking something that he will never get – real-business case experience. He will always think that he is not ready…