My experiences and learnings on Technology, Leadership, Domains, Life and on various topics as a reference!
What you can expect here, it could be something on Java, J2EE, Databases, or altogether on a newer Programming language, Software Engineering Best Practices, Software Architecture, SOA, REST, Web Services, Micro Services, APIs, Technical Architecture, Design, Programming, Cloud, Application Security, Artificial Intelligence, Machine Learning, Big data and Analytics, Integrations, Middleware, Continuous Delivery, DevOps, Cyber Security, Application Security, QA/QE, Automations, Emerging Technologies, B2B, B2C, ERP, SCM, PLM, FinTech, IoT, RegTech or any other domain, Tips & Traps, News, Books, Life experiences, Notes, latest trends and many more...
Showing posts with label enterprise architecture. Show all posts
Showing posts with label enterprise architecture. Show all posts
There's already a tool perfectly suited to storing massive amounts of data, that can be queried easily, and is connected to everything. A database or data warehouse. You probably already have one running in your company that you can reuse so you don't need to buy another CRM, CDP, DMP, MAP, or any other acronym.
Building around a data warehouse has additional benefits such as:
You own your data. It helps you comply with different regulations.
Get value quicker. It is 10x easier to dump historical data in a DB than importing the data in yet-another-tool.
Easier to sync with other tools. Databases integrate with everything, contrary to SaaS Tools that have limited APIs (and please don't get me started on APIs like Marketo).
Reusability. Other teams in the company can use this trusted source of truth.
In addition to a data warehouse, you will need 4 other key components:
An event tracking tool. You can continue using Segment here. It does the job well and allows you to collect events across all of your websites & apps.
A data loader. I recommend Fivetran. It’s easy to set up in a couple of clicks and amazingly reliable.
A data modeling tool. DBT is the new power tool here. It allows you to transform and model your data.
An Integration Platform. I’m a 100% biased here, but I recommend using Census. We integrate well with DBT and enable you to sync your clean and unified data models back to all of your other tools.
As a bonus, you can replace Amplitude with a BI tool like Mode or Chart.io, which is cheap and as good as Looker.
Having clean software architecture and staying conform to pre-defined design principles from start of the project is one of the best ways to avoid possible technical debt in the future of that software system. Clean Software Design is a key point for an effective software product.
Let us have a look at some important principles, rules, guidelines that ensure a clean software design:
Principles:
Loose Coupling — if classes use each other, they are coupled together. The less classes are coupled, the easier is to change them.
High Cohesion — degree to which elements of a whole belong together. Components of the class should be highly cohesive.
Locality — Changes, maintenance, extensions are only local. This leads to no harming whole environment.
Removeable — Software Components should be easily removeable.
Small Components — software system should be only of small components ideally each doing only one task.
Class Design:
Single Responsibility Principle (SRP) — class should do only one task.
Open Closed Principle (OCP) — class should be extended not modified.
Liskov Substitution Principle (LSP) — child classes must be able to replace their super classes.
Dependency Inversion Principle (DIP) — dependeny is reversed: high level components are free of low-level components.
Interface Segregation Principle (ISP) — interfaces should be small: classes should not implement unnecessary methods.
Cohesion Principles:
Release Reuse Equivalency Principle (RREP) — only together releaseable components should be bundled together.
Common Closure Principle (CCP) — classes that change together should be bundled together.
Common Reuse Principle (CRP) — classes that are used together should be bundled together.
Coupling Principles:
Acyclic Dependencies Principle (ADP) — no dependency cycles.
Stable Dependencies Principle (SDP) — depend on direction of stability.
Stable Abstractions Principle (SAP) — the more abstract, the more stable.
High-Level Architecture:
Keep Configurable Data at High Levels — constants or config datas should be kept in high level.
Don’t Be Inconsistent— have a convention, principle, rule or guidelines and always follow them.
Prefer Polymorphism To If/Else or Switch/Case.
Separate Multi-Threading Code — isolate multi-thread from rest of the code.
Only one level of Abstraction per layer — stay conform to existing abstraction layers.
Fields Not Defining State — fields holding data that does not belong to the state of the instance but are to hold temporary data. Use local variables or extract to a class abstracting the performed action.
Micro Layers — avoid unnecessary design layers.
Singletons / Service Locator — Make use of dependency injection.
Base Classes Depending On Their Derivatives — Base classes should work with any derived class.
Have you ever wondered how an App or Platform or Product has got compelling UX when compared to the other competitors of similar capabilities addressed by another?
If they are solving the same purpose or function with almost the same non-functional needs, Then the Product Owner or Product Management has to look at the UX aspects of it for sure to improve...
Refer to Laws of UX (User Experience) https://lawsofux.com/ which is a collection of best practices that designers can consider when building user interfaces.
Critical & Design Thinking aims to build shared understanding, collective knowledge & sensemaking through a community of professionals from different backgrounds and horizons.