Ana içeriğe atla

Data Mesh Principles and Logical Architecture

 Data Mesh Principles and Logical Architecture The great divide of data What do we really mean by data? The answer depends on whom you ask. Today’s landscape is divided into  operational data  and  analytical data . Operational data sits in databases behind business capabilities served with microservices, has a transactional nature, keeps the current state and serves the needs of the applications running the business. Analytical data is a temporal and aggregated view of the facts of the business over time, often modeled to provide retrospective or future-perspective insights; it trains the ML models or feeds the analytical reports. The current state of technology, architecture and organization design is reflective of the divergence of these two data planes - two levels of existence, integrated yet separate. This divergence has led to a fragile architecture. Continuously failing ETL (Extract, Transform, Load) jobs and ever growing complexity of labyrinth of data pipel...

Shifting To Code Ownership

 Shifting To Code Ownership
In my recent CodeOwnership post, I described the way in which I think about code ownership issues. Many of my software development friends are extreme programmers, and tend to favor collective code ownership. However these kind of practices aren't absolute and should always be tempered by local considerations. One of my colleagues sent me a note with the following story which I thought was a good indication of when you have to vary your practices, even if you are a strong fan of XP. (As he's talking about his team, he prefers to be anonymous.)

I shifted our team from the "collective" to "weak" model, in order to counter some undisciplined programming by a couple of developers. Combined with some rather candid feedback, the result was a gain in velocity since the programmers who now "own" our key code areas are not constantly reworking sub-par code, while those that were doing sub-par work in those critcal areas are instead doing things like bug hunting and low-risk code changes -- which further frees up the others.

We also had a net gain in morale, since everyone but the sub-par producers were getting frustrated by having to watch their every check-in for issues, and fixing the problems that they didn't catch in time. This change rewarded those who took quality, TDD, non-speculation, etc. seriously.

However, we also needed some additional practices and policies to counterbalance:

- More frequent pair switching (our actual policy is that you can still work on any part of the code, but if its in an area other than one where you have "free play", you need to pair with someone who does, or heavily vet your ideas through them first)

- The way back in is through the owners. If they feel comfortable that your code will be up to snuff, you can take tasks freely there again.

- If things don't improve, then we'll have to take further steps.

It's been very educational for me, because I never had to go this far before, and I was really reluctant to "play the heavy." It was really tough for me to introduce a directing instead of an enabling practice, but things have been much improved since.

This kind of local adaptation is an essential part of extreme programming, or any agile method. All things being equal my colleague still prefers collective code ownership, but all things are seldom equal.

Yorumlar

Bu blogdaki popüler yayınlar

Data Mesh Principles and Logical Architecture

 Data Mesh Principles and Logical Architecture The great divide of data What do we really mean by data? The answer depends on whom you ask. Today’s landscape is divided into  operational data  and  analytical data . Operational data sits in databases behind business capabilities served with microservices, has a transactional nature, keeps the current state and serves the needs of the applications running the business. Analytical data is a temporal and aggregated view of the facts of the business over time, often modeled to provide retrospective or future-perspective insights; it trains the ML models or feeds the analytical reports. The current state of technology, architecture and organization design is reflective of the divergence of these two data planes - two levels of existence, integrated yet separate. This divergence has led to a fragile architecture. Continuously failing ETL (Extract, Transform, Load) jobs and ever growing complexity of labyrinth of data pipel...

Pair Programming Misconceptions

Pair Programming Misconceptions A bunch of common misconceptions about Pair Programming. You have to do pair programming if you're doing an agile process. This is utterly false. 'Agile' is a very broad term defined only in terms of values and principles, most notably in the Manifesto for Agile Software Development. The manifesto doesn't mention pair programming and most agile methods don't make it part of their approach. Since pair programming is a practice of XP it's had a lot of influence in the agile community. As a result it's often mentioned as an agile practice - meaning a practice that's commonly used by people on agile projects. But that's an observation not a prescription. Extreme Programming forces you to do Pair-Programming This is much more nuanced issue. Pair-Programming is one of the practices of XP and has been since its inception. The nuance here is whether XP practices are mandatory for a team that claims to be doing XP. This is actu...

ActivityOriented

  ActivityOriented Any significant software development effort requires several different activities to occur: analysis, user experience design, development, testing, etc. Activity-oriented teams organize around these activities, so that you have dedicated teams for user-experience design, development, testing etc. Activity-orientation promises many benefits, but software development is usually better done with   OutcomeOriented   teams. Traditionally, big businesses with large IT departments (Enterprise IT) have tended to execute IT development projects with a bunch of activity-oriented teams drawn from a matrix IT organization (functional organization). The solid-lined arms of the matrix (headed by a VP of development, testing and so on) are usually along activity boundaries and they loan out “resources” to dotted-lined project or program organizations. Common justifications for doing so include: It helps standardization of conventions and techniques in development if a...