During holidays very strange and different thoughts come to mind. For example, when we use UML in project design for development, what is the difference between a top-down and bottom-up design?
Ok, let’s start with the simple case. As we know, traditional UML operates with Class as the basis element. The latest 2.4 and 2.5 versions of UML more and more deviate from the programming primitive of Class. This is a very positive trend from the architectural perspective, but an almost betrayal in the developer’s opinion. Indeed, when a developer looks, for example, at the Collaboration Use diagram depicting elements like Doctor, Visit, or Patient, who on the Earth does know what they are? Before, it was very simple – all of them were Classes. However, if you ask Architects, before was a nightmare – they had to operate with Classes in such diagrams having 20 not-walked-yet steps to the granularity of Class, i.e. they have 20 changes to change the knowledge f his Class (and every time re-factor everything backward).
In my architectural practice (after many years of wearing a developer’s hat), I have finally understood that when you deal with developers, there is no real difference between top-down and bottom-up approach, as shown in the picture below, – bottom is always up.
The conclusion is this: if you want to deal with architecture and functional design, do not talk to developers directly but hire a technical architect or designer. This person will translate your business entities into the “specification for programming”, i.e. to the diagram operating with Classes. Otherwise, you have to do this work by yourself. The problem with the latter is that you have to be an expert in the programming language, which is not required for the business/functional modelling that should be implemented via programs.
Overall, it seems that UML trends toward the paradigm of Model-Driven Development, which is a good thing, in my opinion. In other words, UML is starting to separate between modelling capabilities that are implementation agnostic and the design for implementation capabilities that are dependent on the particular programming platform. If my understanding is correct, I would be happy to use UML per se or in conjunction with other architectural semantics (like ArchiMate) or frameworks (like PEAF & Family) for years to go.