Tag: Software architecture

  • Software quality

    Before working in an architect role, software quality seemed to me like a very abstract measure, based on ones subjective perception and experience.

    While hard to define, there are some attributes commonly used to evaluate quality of a software component or system.

    Note: as some other articles on this blog, this is a living document that will change in time.

    Quick attempt

    I think everyone would agree that well written software should have the following attributes.

    • It does what it is supposed to do,
    • It does not contain defects or problems,
    • It is easy to read, maintain, and extend.

    While true and well intentioned, this list expresses what I meant with abstract and prone to subjective perception.

    Detailed approach

    Even though (I find) the standards can be abstract and overly dry, the “Product quality model” of the “ISO/IEC 25010:2011” pretty well defines the attributes.

    Aside the specialised ISO audits, I think with a pragmatic approach such attributes can be measured and improved.

    Most of these can be regarded as non-functional attributes, and only the first addresses the functional requirements that arguably brings value to a software product. On the other hand the product worth can quickly erode if the other attributes are not covered as well. This is important for everyone involved to understand, which can be especially hard for non-technical stakeholders.

    Here’s the list with notes and potential ways to measure and improve each.

    Functional suitability

    • Functional completeness
    • Functional correctness
    • Functional appropriateness – how well specified tasks and objectives can be accomplished

    Notes

    This is the only (!) set of attributes that addresses the fulfilment of functional requirements, even if these are the ones that arguably bring value to a software product. On the other hand the product worth quickly erodes if the later attributes are not covered as well. This is important for all the stakeholders to understand. (I know I am repeating myself on this one)

    Measuring

    This can be measured with manual and automated functional testing, fulfilment of acceptance criteria, and user feedback.

    Apart from bug reports, in practically all systems I worked with, this could not be followed nor measured in operation.

    Improving

    Based on user feedback, bug reports, and internally measured usage KPIs.

    Performance efficiency

    • Time behaviour – the response and processing times, and throughput rates of a product or system
    • Resource utilisation
    • Capacity

    Measure

    The performance can be measured by performance testing and resource monitoring during those tests. Of course, operational monitoring will also bring insights, but this is in most cases too late.

    Improving

    Static code analysis tools can help, but profiling is still irreplaceable to improve.

    Compatibility

    • Co-existence
    • Interoperability

    Notes

    This becomes extremely important in system architecture and large systems.

    Measure

    A set of questions that can help evaluate a system are:

    • Is there a very specific set of requirements for deployment?
    • How about operational requirements?
    • Does the system have its own way of integrating with other systems, unlike the others?

    With the container and serverless deployment and execution models, the co-existence becomes less of a problem, where the performance efficiency becomes important.

    Improve

    Interoperability is all about the API design, choreography/orchestration, and system openness. Smart endpoints and dumb pipes principle applies here as well.

    Usability

    • Appropriateness recognisability – how well can the user recognise whether a product or system is appropriate for their needs
    • Learnability
    • Operability
    • User error protection
    • User interface aesthetics
    • Accessibility

    This set of attributes is oriented to measure the fit with the end user. Software engineers (architects as well) are notoriously bad at this, and cooperating with UX/UI designers/engineers is crucial.

    Measure

    This is somewhat dependent on user technical orientation, subjective relationship to the product and previous familiarity. There are tools and platforms like UserTesting or Accessibility Insights that have defined a clear set of measurements (no affiliation or promotion, just the ones I am aware of).

    Improve

    Align the product implementation to the feedback and measurements. Introduce UX/UI design if not present. Introduce accessibility experts. Promote disability inclusion.

    Reliability

    • Maturity
    • Availability
    • Fault Tolerance (recovery)
    • Recoverability (data)

    Notes

    This is about system design, deployment and operations models, network and product configuration.

    Measure

    Documenting your system with reliability block diagrams and performing fault tree analysis.

    Improve

    Chaos Monkey, redundant deployment, reduced dependencies.

    Security

    • Confidentiality – authorisation
    • Integrity
    • Non-repudiation – how well actions or events can be proven to have taken place
    • Accountability
    • Authenticity

    Notes

    Too often, this is taken as an afterthought, but is absolutely essential in having a system run properly and preserve the data as intended.

    Measure

    Security audits, code analysis, penetration testing, bounty programmes. Identify critical business data and business risks.

    Improve

    Use coding standards, especially take care of potential attack vectors and keep the attack surface as low as possible. Do not expose to the internet anything that is not absolutely needed.

    Maintainability

    • Modularity
    • Reusability
    • Analysability
    • Modifiability
    • Testability

    Notes

    Again, too often, this is taken as an afterthought, but is absolutely essential in building a sustainable system. This will have a hard impact on time to market, especially in the long run.

    Measure

    Code test coverage, code audit, pull requests, documentation (!), architecture, static code analysis, profiling.

    Improve

    Increase code test coverage, create unit tests, run tests in CI/CD, do code reviews, run

    Portability

    • Adaptability
    • Installability
    • Replaceability

    Notes

    Again, too often, this is taken as an afterthought, but is absolutely essential in building a sustainable system. This will have a hard impact on time to market.

    Measure

    Are the components using standard mechanisms of integration and

    If you have a mobile app in the stack – what is the device and operating system compatibility.

    Improve

    Increase code test coverage, create unit tests, run tests in CI/CD, do code reviews.

    Further reading

    https://martinfowler.com/

    W3C Web Accessibility Initiative (WAI).

    Fault Tree Analysis (Wikipedia)

    Hexagonal architecture

  • The Blue Minds Company

    Senior Technology Advisor

    The Blue Minds Company, Vienna, Austria

    October 2021 – present

    Continuing to support The Blue Minds Company in the role of Senior Technology Advisor.

    Industry: Energy, Investments

    Responsibilities and applied knowledge: Technology analysis, Technical due diligence, Technology Coordination

    Chief Technology Officer

    The Blue Minds Company, Vienna, Austria

    October 2019 – October 2021

    As the CTO, I was responsible for the technology side of implementing and driving forward the The Blue Minds Company vision in the areas of energy innovation, company building, and consulting.

    I oversaw the strategic planning and development of IT by analysing technological innovations in collaboration with the company’s network of solution partners.

    • Successfully planned and managed the implementation of an AI enabled, fully transparent energy tariff switching engine that based on smart-metre data TariffHero, FFG/Eureka project
    • Analysed from customer and product perspective and then implemented and launched a new customer oriented platform for Energy Hero
    • Numerous technical due diligence interviews and analyses
    • Supported the company on many other fronts

    Industry: Energy, Investments

    Responsibilities and applied knowledge: Technology analysis, Technical due diligence, System integration, Scalability, Cloud, Development process governance, Company process implementation, Provisioning, Hiring

  • PlantUML – UML Diagramming Tool

    This looks like a great set of tools to create different types of UML diagrams from simple text representations. Uses Graphviz for some diagram types.

    https://plantuml.com/

    Quoting their website

    PlantUML is a component that allows to quickly write :

    • Sequence diagram
    • Usecase diagram
    • Class diagram
    • Object diagram
    • Activity diagram (here is the legacy syntax)
    • Component diagram
    • Deployment diagram
    • State diagram
    • Timing diagram

    The following non-UML diagrams are also supported:

    • JSON data
    • YAML data
    • Network diagram (nwdiag)
    • Wireframe graphical interface (salt)
    • Archimate diagram
    • Specification and Description Language (SDL)
    • Ditaa diagram
    • Gantt diagram
    • MindMap diagram
    • Work Breakdown Structure diagram (WBS)
    • Mathematic with AsciiMath or JLaTeXMath notation
    • Entity Relationship diagram (IE/ER)
  • s-IT

    Information Systems Architect

    s IT Solutions AT Spardat GmbH, Vienna, Austria

    January 2019 – October 2019

    s IT Solutions (currently Erste Digital) was the IT service company of Erste Bank Austria.

    I was in charge of architecture strategy, coordination and governance for the Branch & Lending division. During that time, I was actively involved in the company wide and division specific target architecture development and gap analysis.

    Analysis and providing insights into the current landscape from the logical, technical, and operational side plays a significant part.

    The challenge was to define the process and ensure the correct implementation of new, and reuse of existing products and platforms via architecture governance.

    Additionally, I was supporting strategic product and project development.

    Industry: FinTech

    Responsibilities and applied knowledge: Enterprise architecture, Software architecture, System integration, Scalability, Cloud, Streaming, Development process governance, Process implementation

  • Grady Booch – A thread regarding the architecture of software-intensive systems.

    Quoting Twitter thread by @Grady_Booch on 4th of September 2020.

    There is more to the world of software-intensive systems than web-centric platforms at scale.
    A good architecture is characterized by crisp abstractions, a good separation of concerns, a clear distribution of responsibilities, and simplicity.

    All else is details.
    You cannot reduce the complexity of a software-intensive systems; the best you can do is manage it.
    In the fullness of time, all vibrant architectures must evolve.

    Old software never dies; you must kill it.
    Some architectures are intentional, some are accidental, most are emergent.
    Meaningful architecture is a living, vibrant process
    of deliberation, design, and decision.
    The relentless accretion of code over days, months, years
    and even decades quickly turns every successful new project into a legacy one.
    Show me the organization of your team and I will show you the architecture of your system.
    All well-structured software-intensive systems
    are full of patterns.
    A software architect who does not code is like
    a cook who does not eat.
    Focusing on patterns and cross-cutting concerns
    can yield an architecture that is smaller, simpler, and more understandable.
    Design decisions encourage what a particular stakeholder can do as well as what constrains what a stakeholder cannot.
    In the beginning, the architecture of a software-intensive system is a statement of vision. In the end, the rchitecture of every such system is a reflection of the billions upon billions of small and large, intentional and accidental design decisions made along the way.
    All architecture is design, but not all design is architecture.

    Architecture represents the set of significant design decisions that shape the form and the function of a system, where significant is measured by cost of change.

    https://threadreaderapp.com/thread/1301810358819069952.html
    https://twitter.com/grady_booch/status/1301810358819069952?s=21
  • Global Blue

    Tech lead

    Global Blue Service Company Austria GmbH, Vienna, Austria

    February 2018 – November 2018

    Global Blue offers different services and operates in many locations with various regulations, so the business and technology processes are quite complex.

    I was responsible for the architecture, solution design, and the development team for the end-to-end transaction monitoring platform.

    The goal of this system was to integrate data from discrete domain-specific systems and provide a consolidated overview of the business.

    Responsibilities and applied knowledge: Team lead, Software architecture, Hiring, System integration, Scalability, Technical evaluation, Cloud, Event streaming, Process implementation, Database integration, SQL, Services

    Enterprise architect

    Global Blue Service Company Austria GmbH, Vienna, Austria

    April 2016 – February 2018

    Working tightly with both the business and IT side to analyse, define, and improve organisation, transparency, and technical solutions.

    Defining strategies of enterprise architecture, enterprise-wide guidelines and principles, developing proof of concepts, working with infrastructure and operations support, designing solution architecture.

    I also managed the implementation of the system-wide real-time payment method processing system with the goal of having a standard system that enables other components to stay out of various security and compliance standards.

    Industry: FinTech

    Responsibilities and applied knowledge: Enterprise architecture, System architecture, System integration, System analysis, Product management, Services, Release management

  • Greentube Internet Entertainment

    As a generalist in the role of technical project manager, I was working with software projects from many perspectives – system integration, guiding the development, conceiving new solutions.

    Integrations of internal and external systems, scalability, system details knowledge, and having the big picture in mind all play a significant part in daily work.

    (more…)

  • Ahau

    In close collaboration with the client, a new breed of portal closely integrated with forum was created.

    The integration with phpBB was a critical point of development, and the end product fully exploits this.

    The content is on German, check it out.

  • Pole Energy

    The Pole Energy online shop project was truly interesting and creative, but on the other hand a big challenge as well.

    The goal was to create a secure, modern, multilingual online shopping application. It has taken about a year, from the initial idea until the full version, during 2009 and 2010, with the first release at the beginning of 2010.

    At the beginning of the project I have created the application architecture, entities, relations, and use cases. As we did agree to loosely follow Agile development process, the architecture was redesigned several times during the project.

    During the implementation, I have lead a crew of experienced developers in the effort to achieve high quality and performance.

    We have decided to go with the Microsoft stack, using ASP.NET MVC enhanced with jQuery to create the user interface, using Entity Framework, LINQ, and C# for the middle tier DAL (Data Access Layer), and Microsoft SQL Server as the back end.

    The project is successfully running on the cloud platform at www.poleenergy.ch