Understanding Distributed Tracing: A Python Guide with OpenTelemetry and Grafana Tempo

[ programming  learning  devops  observability  distributed-tracing  opentelemetry  python  ]

31 October 2023

Tracing is a critical component of modern observability methods, along with metrics and logging. It is a technique used in software systems to monitor and profile the behavior of applications in a distributed, microservices-based environment. It helps you understand how requests flow through various components of your application and can be useful for diagnosing performance issues and understanding the interactions between services.
Read More

How Codebase Structure Shapes System Predictability

[ software-development  programming  software-architecture  software-engineering  ]

18 September 2023

The structure of the codebase should visually communicate the main functionalities and responsibilities of the system. This at-a-glance understanding helps developers, new team members, and stakeholders quickly grasp what the software does and how it's organized. A well-structured codebase is like a well-organized library. It allows developers to quickly locate specific pieces of code, modules, or functionalities. This ease of navigation reduces the time spent searching and promotes efficient development and debugging
Read More

Strategic Domain-Driven Design by Example: Subdomains

[ software-development  programming  software-architecture  learning  ddd  ]

3 July 2023

A business domain refers to a specific area or aspect of a business or organization's operations, activities, and expertise. It represents a distinct sphere of knowledge, processes, and rules that govern the organization's functions and activities within a particular industry or market. Understanding what our business domain consists of and what are relationships between these parts are is crucial as it enables effective organization, modularization, and prioritization of development efforts, resulting in improved system design and alignment with business needs.
Read More

Talent is overestimated

[ programming  learning  talent  ]

23 May 2023

The concept of talent can sometimes create the perception that certain abilities or domains are only accessible to a select few who are naturally gifted. The belief that talent is an innate, fixed trait tends to be relatively common and widespread among people. This understanding suggests that individuals are born with specific abilities and that talent is a natural predisposition that cannot be significantly changed or improved upon. I personally have a problem with that talent perception. Maybe it is not totally false but it is definitely harmful to how people perceive their learning opportunities.
Read More

How to build an alerting system with Prometheus and Alertmanager

[ learning  monitoring  devops  prometheus  alert  sre  ]

10 May 2023

While Prometheus is excellent at collecting and storing metrics, it does not provide a built-in mechanism for alert notifications. This is where Alertmanager comes in. Alertmanager is a component of the Prometheus ecosystem that manages and sends alerts based on the rules defined in Prometheus. It allows you to configure different alerting rules for different sets of metrics and specify how you want to receive alerts, such as via email, text messages, Slack, PagerDuty, or other integrations.
Read More

Step-by-step guide to safely introducing high-risk changes in your software system

[ software-development  programming  software-engineering  risk-management  ]

2 May 2023

When introducing a change to a software system, it's essential to do so in a way that minimizes the risk of unintended consequences or negative impact on users. Even if we have a new solution tested, we can still be afraid of deploying it at scale because of the high cost of possible errors. It's important to plan and coordinate any changes to a software system carefully, and to communicate clearly with users about any potential impacts or downtime.
Read More

Finding enjoyment

[ books  psychology  learning  flow  life  ]

25 April 2023

People often think that material possessions or external achievements will bring them happiness and fulfillment. This may include things like a high-paying job or social status. However, research has shown that these external factors are not necessarily the key to happiness.
Read More

Efficiency traps

[ efficiency  productivity  books  life  ]

9 February 2023

Efficiency can be defined as doing things correctly, but also in a reasonable amount of time. We are trying to improve our work attitude and are ready to disturb our work-life balance to generate more output. To boost our efficiency we tend to eradicate activities that do not increase the amount of desired stuff done. Cannot make a break, need overtime, must finish X, can have a desk lunch, etc. Constant efficiency growth becomes the main goal. Something that should be instrumental is becoming essential.
Read More

5 traits of a successful team

[ software-development  team  communication  ]

18 December 2022

Building effective teams are one of the organization's primary concerns. People working in agile methodologies recognize the value of flexibility, continuous collaboration, and development process refinement. However, I would like to demonstrate that agility does not have to embrace change and fluidity in all aspects of software development. In this article, I will discuss several team traits (goal, autonomy, size, longevity, stability) and consider how these things affect team performance.
Read More

How to visualize your system architecture using the C4 model?

[ software-development  software-architecture  c4model  ]

10 November 2022

As a software developer or system architect you often have a task to visualize your existing or potential application architecture for other people. Your audience can be software developers, but also business stakeholders (Customers, Product Owners, CEO, etc.). The architecture diagram should take on a distinctive look depending on whatever group you choose to present for your work.
Read More

Atomic habits implemented

[ learning  habits  books  ]

11 September 2022

In the previous post about continuous improvement, I focused on the need for a system that can make our goals achievable. However, it is easier said than done. Now, I would like to move my attention from "what" to "how" and present a learning system implementation based on habits.
Read More

Continuous learning framework

[ learning  software-development  ]

12 August 2022

Software development is a field that demands continuous skill improvement. Technology advances rapidly and to be successful you must find a balance between a destructive attempt to be up-to-date at all costs and clinging to your comfort zone by taking the same repetitive tasks all the time. There is a huge difference between 5 years of experience doing the same, and 5 years of experience practicing new things and taking on challenges. Here I have some tips from my experience, on how to build your continuous improvement framework.
Read More

An ORM can bite you

[ python  orm  sqlalchemy  database  ]

15 May 2022

Object Relational Mappers (ORMs) are widely used in software development to abstract a database operations in our application code by providing a layer between object-oriented programming language and relational tables in a database. However we should be conscious that simple and inconspicuous expressions provided by our ORM can lead to heavy actions underhood. To present it I will take SQLAlchemy, one of the most popular ORM in Python world.
Read More

Concurrent write problem

[ concurrency  postgresql  locking  database  ]

22 April 2022

Concurrency control is one of the most challenging aspects of software development. Sometimes, we have a tendency to wishful thinking and naive beliefs that our advanced toolkit like a web framework, a database or an ORM solve all our issues seamlessly underhood. However, when we tackle non-trivial problem (like concurrent write), we have to demonstrate some understanding how these tools genuinely work (and maybe why they are configured in the specific way).
Read More

GraphQL authentication and authorization

[ rest  graphql  python  auth  ]

5 January 2022

In this second post regarding GraphQL I would like to show how to manage authentication and authorization in GraphQL API. Authentication and authorization are often mixed each other but these concepts are responsible for different processes. The former determine user identity (whether user is logged in or 'recognized' by a system), while the latter refers to whether an authenticated user has access to a given resource. So usually authentication stage precede authorization one.
Read More

Coupling. Two perspectives

[ python  coupling  software-development  ]

14 December 2021

Coupling is a concept used in software engineering to define how tight is a relationship between system components (classes, modules, subsystems). Coupling is strictly connected to cohesion concept ("togetherness" of a component) and there is a common heuristic for software developers that we should design components that have high cohesion and are loosely coupled.
Read More

Persistance and domain model separation using SQLAlchemy ORM

[ python  sqlalchemy  domain-model  persistance-model  unit-tests  ]

28 November 2021

You probably have heard about a test pyramid. It is the idea that tan application should have proper balance of automated tests on different layers. There should be a lot of unit tests, significantly less integration tests and a few UI tests (End2End, functional). The reasons for this are maintenence cost and speed of particular test type. Unit tests are usually fast and isolated from the rest of the code (so are easy to setup and maintain).
Read More