Menu
Software Architect
HOME Contact Robert Zaremba blog Twitter / X

Programming stuff

emacs cheatsheet vim cheatsheet Scala programming manual Go programming patterns

Contract Bridge

Intro & conventions Precision system Precision - Meckwell Lite Precision - Meckwell Lite (epub) 2/1 GIB

Workflows

Agile rules Agile Workflow Dev Workflow The Workflow

Leadership

Personal Development Solution Architect Highly Effective Human

Security

Policies for crypto asset management

Solution Architect

Solution Architect job covers many aspect of the work including solution design, business analysis and a deep reflections. It requres both business and tech expertise.

Like in every responsible job, training self reflection and managerial reflection is a key to grow the efficiency of personal work and the team work around you. With that in mind, I would like to start with listing the key habits that help you being efficient in all aspects of life: In my blog post: Essential values for Personal Development I write more about Personal Development activities that improve awareness, skills and develop potential.

Business - Engineering responsibilities

Social aspects

Deliver-ability.

Here we want to ensure that we have right research and development balance with right. The key principle here is the Lean Startup action loop:

Build faster → Measure faster → Learn Faster

Engineering aspects

SOLID principles

Many of us know the famous SOLID principles that were defined for software engineering. Their goal is to make software designs more understandable, flexible, and maintainable by reducing dependencies and making the system easier to extend and refactor.

Interestingly enough we can apply the to Business as well!

Single responsibility

“Do one thing and do it best.”

Software: one component should only have a single responsibility, that is, only changes to one part of the software's specification should be able to affect the specification of the component.

Business: Role Clarity & Specialization. Avoid creating "hybrid" roles that mix conflicting objectives (e.g., a Sales Manager who is also responsible for Quality Assurance). When one person chases two opposing metrics (speed vs. perfection), both suffer.

Open–closed

“Grow by adding, not by breaking.”

Software: Software entities should be open for extension, but closed for modification. Don't break interfaces (keep them closed). You can extend them or change components implementing them.

Business: our core business operations (hiring, billing, customer service) should be robust enough to handle new product lines or markets (extension) without needing to rewrite the entire company policy or disrupt existing workflows (modification).

Liskov substitution

“Reliability allows for interchangeability.”

Software: Objects in a program should be replaceable with instances of their subtypes without altering the correctness of that program.

Business: If you have a "Senior Accountant" and an "Accountant," the Senior must be able to perform all the duties of the Junior without the system collapsing. Furthermore, if a manager leaves, their successor should fit into the workflow without requiring the entire team to change how they work.

Interface segregation

“Information on a need-to-know basis ensures focus.”

Software: Many client-specific interfaces are better than one general-purpose interface.

Business: Don't burden employees with big meetings (limit "all hands"), CC’d emails, or reports that don't concern them. Tailor KPIs and dashboards to specific departments. Marketing doesn't need to see the granular details of server latency logs; they only need to know if the site is up.

Dependency inversion

“Commit to the mission, not the method.”

Software: Depend upon abstractions, not concretions.

Business: Build your business on high-level goals (Abstractions), not specific tools or vendors (Concretions). Bad: "We are a Zoom company." (Breaks if Zoom fails). Good: "We prioritize face-to-face remote collaboration." (Tool agnostic). The C-suite sets the "What" and "Why" (abstract); the teams choose the "How" (concrete).

Cohesion

Software Engineering

Cohesion refers to the degree to which the elements inside a module belong together. It is a measure of the strength of relationship between the methods and data. Stronger cohesion => better organization!

Modules with high cohesion tend to be preferable, because high cohesion is associated with several desirable traits of software including robustness, reliability, reusability, and understandability. In contrast, low cohesion is associated with undesirable traits such as being difficult to maintain, test, reuse, or even understand.

High cohesion often correlates with loose coupling, and vice versa.

Business

Purpose-Driven Teams. In a business context, a "module" is a team, department, or business unit. High cohesion means that the people, resources, and skills within that unit are all tightly focused on a single, unified mission. Relation to "loose coupling"
Autonomy. If your Marketing team is highly cohesive (they have their own designers, copywriters, and data analysts), they are loosely coupled to the rest of the organization. They don't need to constantly beg the central Design Department for help.
Result: They move faster because they depend less on others (Low Coupling) while being tightly aligned internally (High Cohesion).

Are all this principles important?

Let's have a look.

If you don't keep SOLID principles:



If you don't synergize and don't kill your ego: