Tuesday, September 8, 2020

The power of Tags and Comments

A software architect models customer domains and maps them to excellent software constructs. The solution shall support future customer groups and expand to store additional information.

Tags, also called labels provide an informal ontology to classify customer data. Tags are extensible and are machine readable.

Comments empower users to store relevant unstructured information. Comments are only for human beings.

What are good approaches to provide searchable tags and labels and avoid wild growth of useless records?
Can you as a designer govern the ontology defined through labels?

Monday, August 24, 2020

Entities, Identifiers, External identifiers and Names

A software architect models customer domains and maps them to good software abstractions. Soon you correlate internal efficient identifiers, meaningful external identifiers and domain entities. 

How do you relate with external systems and communicate with other companies?  

How do you define internal identifiers which grow with the application success? 

How can you bridge the customer world with your software solution?

What are the good practices to create a maintainable, legible and efficient model of your domain model? 

Wednesday, July 15, 2020

A Journey Implementing Digital Invoices

Our company has the ambition to digitalize all our workflows. We proudly state we never bought a printer or a fax machine. 

Analog machines should become obsolete in the digital age. Companies should be more environment aware and save some trees.

Switzerland finally introduce a digital payment slip. It is based on a QR code and still assume you need to print it. The European Union is more inovative and mandates that invoices to government parties must be digital.

Our company exchanges contracts and invoices with partners and customers using the standardized and well-known PDF format. It is time to explore extensions to support the new legal requirements in Switzerland and in Europe.

We show open source based solutions and the trade-offs we had to accept. Beware our solutions are based on the Java stack.

Monday, June 1, 2020

Legacy Systems Refactoring

With refactoring you can take a bad design, even chaos software, and rework it into well-designed code. Most often it is cheaper refactoring a legacy application instead of rewriting it from scratch.
Each refactoring step is simple, even simplistic. Yet the cumulative effect of these small changes can radically improve the design.
Martin Fowler




Saturday, May 9, 2020

Gradle 6.4 Has Finally Java Module Support

Java 9 release introduced the concept of modules within the Java language. Java 9 was released in September 2017.

Until now creating Java modules was quite cumbersome and Gradle did only offer limited support through external plugins.

Finally with the release of Gradle 6.4 in May 2020 software developers can easily generate well-behaved Java modules. We had to wait almost three years for native support!

Support for modules is native in the Java plugin. You only need to add one configuration line. Start using Java modules and have language support to enforce modularity in your product.


Friday, May 1, 2020

Four Powerful Sentences

You are a line manager, a Scrum master, a senior developer. Investigate the use of four powerful sentences.
- Sorry (one word)
- Thank You (two words)
- I am Wrong (three words)
- Can I Help You? (four words)

Walk the talk. Be a leader. Prove you have honesty and empathy.
You shall use these four sentences below as a way to calibrate how you interact with your teams.

As a rule of thumb state honestly and genuinely these four sentences multiple times each week. Otherwise you are probably more a command and control boss and not truly a servant leader.

Friday, April 17, 2020

Agile Component Design


Your are responsible to create or modify a component in your current application. This is a design activity.

How can you create a good, legible, maintainable component architecture? How can you validate your functional and non-functional requirements?

Yes you are right. You are responsible for architecture decisions at component or subsystem level. Below a set of tools to improve the quality of your design.



Tuesday, March 31, 2020

Java Records Are Here - Available in JDK 14


We need justification not to use immutable objects in ours solutions, rather than an affirmative reason to use them.
Records provide a first-class means for modeling data-only aggregates. They are available in Java since release of JDK 14.

Records are often seen as syntactic sugar to easily create immutable objects without having to write a lot of boilerplate code. And records as a clean definition of immutable objects can have a tremendous impact on your component design.

You as a designer have to reflect why your abstractions are not immutable and what is the rational behind. From experience it improves greatly the quality of your design.

Saturday, February 29, 2020

How Agile Collaborators Learn

Most products are developed by a team, and these achievements are the fruit of teamwork.

Software product development is now agile, and most often uses the Scrum approach.

Just putting a bunch of people together will not produce a high performance agile team. Quite a few companies find that out the hard way.

How can you increase the odds to create an environment where agile teams bloom and perform?

Monday, January 6, 2020

Calibrate Your Agile Approach: Bill of Rights

When eXtreme Programming first came out, one expectation it worked hard to set is who gets to make what calls on software projects.

For example, business has the right to know how long something is going to take and when it can expect things to be done.

Conversely, developers have the right to know what the priorities are, and to be able to do good work.

To that end, eXtreme Programming - XP - created the Customer and Development Team Bill of Rights.