6 reasons to prefer a «use» Dependency to «instantiate» and «create».

Less is more in UML models.

My guest blog on May 20th mentioned that Ivar Jacobson's and Microsoft architect Steve Cook's article about the “road ahead”, toward a slim UML3 kernel with extension mechanisms (2010, on Dr Dobbs), makes even more sense in 2015 than back in 2010.

1. Standard subtleties
The new, slimmed UML 2.5 spec (March 2015, by the OMG), table C.1 (included keywords) lists only «use» and none of «create» or «instantiate»; the text also states it's an open list. That makes it one of the steps down the Jacobson & Cook road to a much-welcome smaller kernel with a very simple extension mechanism.  

2. Practical subtleties
The distinction between a «create» and an «instantiate» Dependency is tiny.
Both are shades of usage, so that «use» would suffice in most cases: the source uses the target (for some reason — be instantiation or other).

3. Interpretation subtleties
I’ve often wondered whether the slightly higher expressive power was worth the hike in notation bloat. I used «create» the standard way, for instantiation with full initialization of attribute values, typically from in-parameters passed through the constructor operation. By the same token, I used «instantiate» for raw instantiation (with just zeroes or similar default values instead), but that didn't make any difference to the many who interpreted «create» and «instantiate» as synonyms anyway… The 2.0 notation, especially arrow direction, hardly made things easier to explain:
 - Creation: a dashed arrow (…) to the creation operation.
 - Instantiation: a dashed arrow from the operation performing the instantiation.

4. Usefulness subtleties
Middleware, SOA UDDI, auxiliary classes, object-relational mappers such as Hibernate, and Design Patterns such as Factory, automate and encapsulate more and more of object loading, instantiation, or creation. That is, mainstream technologies make it less and less meaningful to model its detail, see diagram 1 (I might imagine a simple illustration in an architecture document, to explain the architectural principle and the mechanism once and for all, i.e. once per company or group of companies, definitely not every time applications incorporate the mechanism).

In contrast, I occasionally showed «create» explicitly, back in the early days of UML, to explain why there were both a «call» Dependency to an «interface» (operations in the interface are called, «call» being a third stereotype of «use» ) and along with that one, another Dependency ( «create» ) as a "shortcut" actually bypassing my nice «interface», see diagram 2.

That was pretty common in a simple environment without any automatism: the designer of the caller ensured "by hand" that there was an implementing object behind the «interface», to begin with. Which meant, the caller «create»d this object before the first call.

Some people argued that two «use» Dependencies (one for the creation, one for the calls) would be too generic for such cases. So, for the incorrigible «create» fan, remember the “open list” in the current UML 2.5 standard: no big deal extending the list, for company-internal purposes (e.g. for code generation).










5. Separation of concerns
This is a key idea underlying both the UML and Informator’s courses (T2715 and T2716): avoid a split of focus, don’t force-fit a whole bunch of areas of concern into a Class Diagram. Sequence diagrams show creation graphically (ever since UML 1) without a keyword, plus they do it “in context” of the actual scenarios where it happens. So, where detail really matters, they’re better and more precise to show creation. 

6. Abstraction
Abstraction is a vital point in architects’ job description. With the current shift of focus from detailed design to architecture, the level of abstraction thus shifts as well: to components or subsystems.

A Dependency between Components “summarizes” the fact that some Class/es or subcomponent/s in one Component have relationships to their counterparts in another Component; at this level of abstraction, it rarely makes sense to show the detail of loading or creation (unless you're a platform & infrastructure vendor). Rather, the UML 2.5 “kernel” seems to take mainstream built-in functionality into account.  


// Milan Kratochvil consultant, Kiseldalen.com and teacher in IT architecture at Informator.

UML 2 Professional, OCUP Advanced Level (level 3, of 3)


In addition to consulting, Milan cooperates with Informator since 1996 in modeling, UML, requirements, analysis, architecture and design. He currently teaches courses and workshops on Architecture fundamentals, Modular Product Line Architecture (T1430), agile modeling (T2715T2716), and formerly also Informator’s full-up Seminar on Use Cases.

What Is Agility?

Agility is the ability to move swiftly and change direction at ease. When we talk about agility in the organisation, we refer to the ability to change direction. Organisational agility is the ability of people who are working together to quickly adapt their collaboration according to changing circumstances.
From where do these changing circumstances come? They might be external to your organisation:
New innovations changes how people can get their needs met, just remember systems development before and after there was a widespread use of mobile phones. New ways of doing business might challenge your way of doing business, just think about how it all of a sudden becomes acceptable to have your internal data handled by an external party with a “cloud”-solution that directly competes with your product. Or it might just be a boom or a bust in the economy that increase or reduce the number of clients and competitors you have.
But there might also be internal insights. This is especially common in software development. We try to understand the people that will use the systems we create. We try to understand, and represent in valid models, the problem domain people operate in. And we try to understand what an optimal solution would look like and what the consequences are when we try to implement it.
As we reach new understandings, our plans and strategies has to change. This will affect our solution designs, and therefore our plans on how we staff, how we work, how much time it will take, and what it has to cost us.
Changes are inevitable, either they have internal or external sources, and we need to have methods in place to make it possible for us to accommodate change. We, as an organisation or a collaboration, need to become agile.
We sometimes talk about agile methods. But we need to keep in mind that it is not the methods that are agile. It is actually the opposite: the methods are often rather strict and rigid. But the methods have the same effect on a collaboration as a exercises has on the body of a dancer or a martial artist: it makes them agile.
Ola Berg är lean/agil-vägvisare med fokus på de lite större sammanhangen: den agila organisationen (vertikalt) och det smidiga värdeflödet tvärs genom organisationen till en mottagare (horisontellt). Hur får vi frihet på arbetet utan att vi själva eller organisationen går sönder?

Ola har under flera år hållit kurser hos Informator kring Agila Metoder

6 tips för blivande och nyblivna arkitekter.

Under semestern byter man gärna flyghöjd och tänker till långsiktigt kring sin yrkesbana. Under sensommaren blir det dags för både företaget och en själv att planera in konkreta steg, inklusive kompetensutveckling, i önskad riktning. Här följer 6 uppslag för sensommaren/höstkanten.

1. Bredden-först eller djupet-först
Oavsett om man anser sig ha sina rötter i verksamhet eller IT, är det klokast att lära sig båda, och då stegvis snarare än allt på en gång. Egentligen är det ingen dramatisk skillnad mellan designvalet av sökstrategi för en sökmotor och kunskapsvalet av kompetensstrategi för en praktiskt inriktad roll: Att kombinera bredd och djup lönar sig först lite längre fram på vägen.
Djupet-först förutsätter dels ett informerat val, dvs information och tumregler i företaget som leder in ”rätt” på de grenar i (sök- resp kunskaps-)trädet som är kandidater för fullträff, och dels backtracking ur grenar som visat sig vara återvändsgränder. Bredden-först å andra sidan är feltolerant (det går inte att totalmissa något) och ibland mer resurskrävande men kan också ge ”biprodukter” användbara i närtid. Bland Informators arkitekturkurser finns båda alternativen (SoftwareArchitecture resp ArchitectureFundamentals).

2. Grepp om modellering (och animering)
I agil miljö krävs tillräcklig kunskap om modellering, UML, och framförallt om olika rollers behov av olika information, för att göra dokumentationen till ett slimmat och selektivt kommunikationsstöd. Dels handlar det om ”rätt” abstraktionsnivå (vad man utelämnar när), dels om att använda en passande mix av diagram, affärsregler, formler, kodexempel, testfall, animeringar, skrift, tal, osv. Alla roller behöver inte se allt, och all kommunikation är inte diagram, men några UML-diagram på rätt plats snabbar märkbart upp diskussionen vid en whiteboard och håller den till punkt. En del diagram kan också vara värda att animera, för att åskådliggöra för andra hur saker fungerar. I högskolemiljön blev UML ibland som två läger: ”allt” (bild) mot ”inget” (”bild överflödig” i dubbel bemärkelse J). Praktiskt handlar det mest om relevant modellering, att betona de diagram som är mest ändamålsenliga, och att få dem ”lagom bra” (Just Barely Good Enough).


3. Mönster
“Patterns are tools, not rules” hette det redan på Gammas & GoF:s tid, och det är än mer sant ur en arkitekts synvinkel. Förutom att de banar vägen för kunskapsdelning och komponentifiering stödjer de också kontinuerligt lärande ”i portioner”, vilket passar in i agila praktikers vardag. Det är viktigt att förstå och förankra skillnaden mellan objekttänkande, designmönster, processmönster, analysmönster, och arkitekturmönster (och naturligtvis även arkitekturtaktiker, som är mer ”one-pointed” än mönster). Det är en nyansskillnad och ingen avgrund, visst, men det finns få mönster som verkligen tillhör flera kategorier.

4. Grepp om icke-funtionella krav (NFR) och kvalitetsegenskaper (QA)
Även sådant som handlar om annat än funktionalitet kan hjälpa eller stjälpa en given arkitektur (säkerhet är ett välkänt exempel). ISO 25010-standarden (bild) listar 8 ”kvalitetskarakteristika” (40 inklusive ”subkarakteristika”), så det gäller att välja rätt i mängden. I en agil miljö med tydliga tidsramar är det mest produktivt att ”skjuta in sig” på de QA som varit mest eftersatta i företaget. Oftast är det de som är svårare att mäta än prestanda och tillgänglihet. Till exempel säkerhet, modifierbarhet/varierbarhet, användbarhet... Det i sin tur skapar nya utmaningar för arkitekter, dels i form av testfall och verifiering (det räcker inte att ”man tycker” att nu är systemet och kringrutinerna ”säkra”), dels intern insäljning då säkerhetsinvesteringar är ungefär lika omtyckta hos budgetansvariga som höjda försäkringspremier...



5. Att stödja och fungera i en agil kultur
Här behöver man kommunikation, soft skills, ibland diplomati, och kunskapsledning genom informell auktoritet (mer av en ”influencer” med erfarenhet än en uppifrån bemyndigad ”polis”).
Med det följer att föregå med gott exempel, så att även arkitekturen, arkitekturdokumentationen, och sättet att arbeta fram dem, följer agilt tänkande med minimerad overhead, iterationer, snabb informell relevant kommunikation, horisontella samarbetsformer, stand-up möten, mm.

6. Att tidigt stödja, använda, och anpassa modern kommunikation
Videomöten, webinarier med desktop-sharing, interna ”sociala medier” med olika ämnestrådar, m fl nya leveransformer (för kunskap) har många fördelar. Samtidigt gäller det att i arkitektrollen pusha för deras säkerhet, användbarhet, feedback och anpassningar, och att ändå träffas face-to-face när det tillför ett mervärde utöver remote-kontakten (att kommunicera elektroniskt med alltifrån kaffekokaren till utvecklaren i rummet bredvid är att gå över ån efter vatten, och kan dessutom ge ryggproblem av sittande. J)  

// Milan Kratochvil konsult, Kiseldalen.com och kursledare hos Informator inom IT-arkitektur.

UML 2 Professional, OCUP Advanced Level (certifikatnivå 3 av 3)

Milan samarbetar med Informator sedan våren 1996 inom modellering, UML, krav, analys, arkitektur och design. Håller f.n. kurser i grundläggande Arkitektur, Modular Product Line Architecture (T1430), i modellering (T2715, T2716), och 2013 höll han också Informators fullsatta Frukostseminarium om användningsfall.

Agile modeling and architecture under paradigm diversity

Many expert notes here mention non-relational paradigms, and these coincide with non-procedural trends in programming — in contrast to a past of procedural/imperative languages hosting non-procedural SQL-only statements; a fine combination in theory, yet often misinterpreted by host-language programmers who habitually hand-wrote loops reading one table line at a time and thus duplicated (in the host language) the tedious work that SQL and RDBMS engines had automated in the first place.

Today, there are several programming paradigms to choose from, in both data-intensive applications and signal-intensive (e.g. the Ericsson ERlang language and its spinoffs), as well as data-architecture paradigms. Also, architects now apply several integration patterns, apart from shared data stores. These trends largely match with the Object Management Group’s initial mission from 1990: to “narrow the communication gap” between IT and business by lifting the level of abstraction. At the same time however, the diversity and rapid pace of hardly-predictable change have made it more difficult to revise the corresponding standards in time.

Given an agile approach, architects communicate via lean documents that address known roles and their expected information needs, although the ever-expanding architectural landscape makes even these needs change faster.

The detailed notation bloat within the Unified Modeling Language often gets in their way (even the slimmed, OMG UML 2.5 spec is still 800 pages), because abstraction is key in the job description of an architect.

The difference in abstraction between two sequence diagrams (architecture level versus detailed level) is visible in this note even if you don’t read a Nordic language. A flight-price calendar on an airline-booking page is put together there, day by day. The text points out that the UML lifeline decomposition (resulting in the detailed right-hand part of the second diagram) is of little importance to architects and can be misleading too, because nobody knows in design time what the actual scenario path will look like, in run time, after access optimization by the DBMS. Given a non-procedural platform, we can suppress the detail without loss of clarity in communication (with most roles).

Microsoft’s architect Steve Cook mentioned already five years ago (on his MSDN blog ) that even mainstream OO PLs are all poorly represented by “vanilla UML class diagrams”.
That’s very true in today’s multitude of paradigms, and evolution of high-level constructs within Java, Dotnet/LINQ, and more (prof. Reichenbach’s big-data article here mentions that declarative languages “can offer the quickest path from idea to implementation”). With multicore and multithread, non-procedural languages also facilitate automation by compilers, which makes them less prone to programmer error than procedural ones. To architecture, they add a reasonably restricted vocabulary (fewer ways to do one thing), improving semantic coherence and standards (and thereby maintainability and quick upgrades, to make the enterprise more responsive).

I recently re-read Steve Cook's and Ivar Jacobson's article about the “road ahead” toward a slim UML3 kernel plus an extension mechanism (2010, on Dr Dobbs), and it makes even more sense with today’s diversified architectural toolbox. They are met with sympathy — but still a way to go, down the standardization road.

Summing up, today’s diversity of integration patterns, programming paradigms, and data-architectures (including in-memory storage & computing) transfers and encapsulates a wider variety of detail into extended platforms and infrastructure. This in turn gives cause for a shift of emphasis in modeling, from “vanilla-design detail” and “vanilla-code generators” to an architect level in encapsulation (of, typically, procedural detail), matching with the Object Management Group’s initial mission.   

// by Milan Kratochvil,  Trainer at Informator, and senior modeling and architecture consultant, Kiseldalen.com, Author (w. Barry McGibbon) of UML Extra Light (Cambridge University Press). Milan and Informator collaborate since 1996 on modelling, UML, architecture, requirements, analysis and design. In June, you can meet Milan at Architecture ( T1101 , T1430 ) or Modeling courses ( T2715T2716 , in Swedish).
Posted by courtesy of  ODBMS.ORG —The Resource Portal for Big Data, New Data Management Technologies and Data Science

Arkitektur mot Product Portfolio Mismanagement

variabilitet för att få storföretag mer agila.

Några veckor efter mitt förra blogginlägg (om Software product lines) kom Nyårsledigheten då man träffar en del släkt som man inte sett live på länge, vilket är extra kul med dem som råkar bo på andra sidan Klotet. Kalifornienkusinen och jag pratar fyra språk var, varav två gemensamma, men vi drev ändå mest iväg i nördiga IT-förkortningar (han är Senior Architect i Kiseldalen, på ett av världens fem största IT-företag). I år hamnade två saker i förgrunden.

Först, hur lite ”ny” ekonomi hittills lärt av produktarkitekturer och kravspecar i ”gamla” komplexa ingenjörsprodukter. Agreed - inte mycket att orda om. Sedan, agilt - mer att prata om.

- Hos oss har vi Agile project management, Agile devs som utvecklar agilt, osv osv. Men... Innan ett agilt projekt får sitt definitiva ”go” uppifrån, så sker en rad långtifrån agila beslut, som ska successivt godkänna den blivande produkten. Produktidén ska passera checkpoint 1, 2, 3, ...X, där olika roller på olika nivåer ska ge var sitt OK. Efter några checkpoints får den ”first go” och man gör en förstudie. Efter ytterligare ett antal checkpoints får produkten ”final go”.

- Hmm. Men vad baseras besluten vid de tidigaste avstämningspunkterna på?

- En löst och ostandardiserat beskriven idé. Det är ett Moment 22: de som fattar beslut före förstudien har knappt ett hum om vad det är de beslutar om.

- Blir det märkbart bättre i de avstämningspunkter som ligger efter förstudien?

- Måttligt. De tar fortsatt mycket tid av dyra och mycket upptagna roller.

- Du är inte den första som talar om problemet för mig. Ursäkta mina konsultyrkesskador, men detta är ett av flera knepiga problem som blir enklare med produktfamiljstänket, Software Product Line.

Jag klottrar en bild ur en Informatorkurs (på en vit servett, i bästa gamla dotcom-stil):



- Så hur förenklar det mitt problem?

- Framförallt kan du skapa en enklare agil gräddfil i godkännandeprocessen för allt som ligger ”within scope”. Dessutom är sådana produktförslag billiga att förverkliga m h a redan  förprogrammerade mekanismer, och kostnaderna mer förutsägbara, och idéerna lättare att förstå internt. Och, och...  Snarlika fördelar som vid offertberedning för externa kunder. Ju mindre ”promiseware” i produkten, desto lägre osäkerhet. Informator i Sverige kör för övrigt en kurs om Modular Product Line Architecture, T1430.

- Synd då att det är nio tidszoner mellan Mälardalen och The Valley...


//
konsult, Kiseldalen.com


UML 2 Professional, OCUP Advanced Level (certifikatnivå 3 av 3)



Milan samarbetar med Informator sedan våren 1996 inom modellering, UML, krav, analys, arkitektur och design. Håller f.n. kurser i Arkitektur, i modellering (T2715, T2716), och 2013 höll han också Informators fullsatta Frukostseminarium om användningsfall.

Agil arkitektur behöver vara adaptiv

- om variabilitet, SW product lines, och hur ”gamla ekonomin” tänker efter före.

Den som gått kursen Architecture Fundamentals, eller läst på själv, kommer ihåg resonemanget om symbiosen mellan Agile och arkitektur. Krasst ekonomiskt är drivraften bakom bådadera den samma: att slippa onödigt jobb.

Medan Agile förebygger onödig hierarki och overhead framförallt i närtid, förebygger arkitektur onödig upprepning och dubbelarbete även på sikt. En agil arkitekt strävar efter att minimera dubbelarbetet utan att öka overhead och mängden TAGRI (They Ain’t Gonna Read It). En agil arkitektur:

  • tas fram med de agila metoder, teamen använder i övriga projekt
  • dokumenteras på ett agilt sätt
  • är agil i sig särskilt när det gäller de första 4 principerna (av 12) i Agile Manifesto,
    1. kundnytta
    2. förändringsvänlighet
    3. täta snabba leveranser av fungerande system
    4. nära samarbete med verksamheten.

Utöver att agila metoder/processer strävar efter att svara på förändringsönskemål snabbt, med de medel och färdigheter som finns att tillgå, så tänker en agil arkitekt också långsiktigt, på tvären av projekt- och  produktgränser. Särskilt när det gäller att proaktivt bygga in färdiga variationsmekanismer, som i sin tur kan snabbt och förutsägbart svara på förändringsönskemål även i ett sent skede.

Av arkitektrollen kräver detta utöver komponenttänkandet också flexibla komponenter och även en flexibel arkitektur/plattform. Den senare skrev jag ett gästinlägg om på denna blogg, i november 2013, inspirerad av VW-koncernen efter att HHS i Stockholm konstaterat att bilindustrin ligger årtionden före ”nya ekonomin” (t ex läkemedel) vad gäller konkurrenstryck, processeffektivisering, Lean-tänkande, mm.

Trots att varannan jämförelse mellan bilindustrin och kunskapsindustrin haltar, så tillhör flexibla produktarkitekturer områden där vi har något att lära. Ett år senare har nu VW:s häpnadsväckande plattformsinvestering (500 miljarder SEK) gett ett globalt eko och ett race till megaplattformar (vad var det vi sa 2013, när man ännu skrev ”megaplattform” med citationstecken...) Tala om en gammal bransch som tänker nytt och har grepp om inte bara på vad arkitektur kostar utan även på vad den inbringar.

Det förvånar knappast att racet till megaplattformar sammanfallit med ett nygammalt mjukvaruhus-tänk inom systemarkitektur: en varierbar software-product line, fritt översatt att tänka som de svenska ”I:na” tänkt i många år inom ERP, CRM, SCM, m m. Att sätta tydliga ramar, sammanhang och mål för komponentifiering, återanvändning, och variabilitet (framförallt hur långt det är praktiskt rimligt att variera/tänja komponenterna resp plattformen, och med vilka mönster och taktiker/tekniker).

Tekniskt sett är variabilitet (utan ytterligare programmering) både en förutsättning för och ett mått på ”SW-product line mognad.” Mer följer i endags-kursen på Informator (fr o m vinter 2014), Modular Product Line Approach in Architecture (T1430).


Bild: drivkraften bakom inbyggd variabilitet är en kombination av att efterfrågan blivit mer heterogen (för at inte säga spretig) samtidigt som tids- och kostnadspressen ökat.


Milan Kratochvil

konsult, Kiseldalen.com

Huvudförfattare: Growing Modular: Mass Customization of Complex Products, Services and Software samt UML Xtra Light: How to Specify Your SW Requirements

UML 2 Professional, OCUP Advanced Level (certifikatnivå 3 av 3)

Milan samarbetar med Informator sedan våren 1996 inom modellering, UML, krav, analys, arkitektur och design. Håller f.n. kurser i Arkitektur, i modellering (T2715, T2716), och 2013 höll han också Informators fullsatta Frukostseminarium om användningsfall.