It is pretty easy to fix one bug and break the large application in ten different places. Everyone understands that it is impossible to avoid such cases due to the high complexity of the software. However, you can minimize the chance of regression issues by using steps which I usually follow in my day-to-day development activities.
In my opinion, the more time the software developer devotes to “Before” stage, the more experienced he or she is. Usually, junior developers start coding right after reading the bug description, when senior guys follow these steps:
Almost all objects, except for simple or…
Learning about multiple ways to accomplish the same task and comparing them, analyzing the pros and cons of each is an interesting exercise aimed at expanding the developer’s mindset.
The goal today is to explore multiple different ways to solve a common problem in software development — decorate an existing object with some cross-cutting behavior like measuring execution time, logging, throttling, caching etc.
When there is a need to extend the behavior of an existing object, the decorator pattern or any other patterns or design principles are not needed at all. …
Software developers learn by reading programming books, blogs or taking online courses to effectively solve technical problems that arise in projects. Every day a certain developer becomes more and more valuable because the complexity of the task that he or she can solve grows. The process of increasing a value as a developer can be optimized or improved like any other process and here is advice for that:
During your working day, you may encounter some new technical aspects in your project while implementing your task. It can be anything: a non-clustered index, a saga pattern, an implementation of a…
Enterprise software is often associated with legacy software. The term legacy system or legacy code has a negative meaning in the software engineering world. Legacy systems can have many negative characteristics, but the most common are high accidental complexity, lack of unit tests, and lack of project documentation.
The vast majority of software engineers do not really want to join legacy projects and would only like to work on green-field ones. …
I regularly do project interviews for C# developers. One of the first technical questions I ask is classic: “What’s the difference between value and reference types in .NET?”. Usually the conversation on this particular question doesn’t take long. I hear that value types live on the stack while reference types live in the heap (this is just partially true), value types are structs but reference types are classes, blah blah. …
I have been working as a programmer since 2013. I have been learning various topics from the very first day of my programming journey. I really enjoy learning using all the available sources of information such as books, articles, video courses, and even podcasts. On average, I spend 1 hour a day learning something new in programming languages, object-oriented design, architecture, security, cloud technologies etc. I get used to learning regularly and feel incomplete when I don’t even do it for a couple of days in a row.
I never learn just to learn. I always need some kind of…
Both the dependency inversion principle and dependency injection are completely different things, despite the similarity of the names of the terms. Understanding the differences is important for software engineers doing object-oriented programming.
Only very simple or a few low-level objects can independently implement all the functionality they need. Typically, objects need to reuse the logic of other objects. To do this, the object can simply instantiate all the required dependencies on its own using the new
keyword:
public class OrderService
{
private OrderRepository _orderRepository = new OrderRepository(); public Order PrepareOrder(long orderId)
{
var order = _orderRepository.GetOrder(orderId);
//...
}
}
The…
Software engineers regularly learn best practices from various areas of software development. Learning best practices and then finding the right ways to apply them to a project matures software engineers and helps their project succeed.
Programmer experience matters when choosing the set of best practices to focus on. While junior engineers usually learn best practices for writing unit tests or avoiding code smells, seniors or technical leaders should learn best practices that impact the entire project or development process.
1. The third-party libraries register is published on the project space (Confluence, Wiki) and regularly maintained by the technical leader or…
The software project failure means that the developed product deviates significantly from the customer’s expectations. There can be different reasons software projects fail: unclear requirements, poorly established software development processes, an inefficient budget that may lead to lack of quality assurance, DevOpses, business analysts, etc.
Another common reason for software project failure is that the development team cannot handle the technical complexity that increases with each new feature. Projects with unlimited budgets, genius product owners, and business analysts still fail or come close to failing because the development team made these mistakes:
It is a known fact that developers should…
Modern web applications consist of several large tiers: frontend, backend, and database, each of which can be divided into several sub tiers. Each tier of the application can have its own performance issues. For example, at the database level, a stored procedure can unnecessarily use a serializable transaction isolation level. At the backend (ORM) level, there can be an N+1 problem when the ORM is submitting many queries to the database. Or the frontend might not cache static data, loading it from the backend with every request.
There can be many reasons for performance problems on the backend in C#…