Hvordan skrive forretningsregler på norsk

april 22, 2025

En guide til klare og presise forretningsregler med RuleSpeak®

Forretningsregler er avgjørende for å sikre at organisasjoner opererer i samsvar med lover, retningslinjer og interne prosedyrer. Dessverre blir slike regler ofte formulert på en måte som skaper forvirring, misforståelser og inkonsistente tolkninger.

I denne artikkelen skal vi se på hvordan RuleSpeak®, en metode for å uttrykke forretningsregler på naturlig språk, hjelper oss med å skrive regler som er klare, presise og utvetydige.


Hva er RuleSpeak®?

RuleSpeak® er en samling retningslinjer for å uttrykke forretningsregler på en strukturert og entydig måte. Retningslinjene er utviklet for å:

Forbedre kommunikasjon mellom forretningsfolk, analytikere og IT-utviklere
Sikre at regler er praktiserbare, uten å være for tekniske
Bygge bro mellom forretningslogikk og IT-systemer
Unngå vanlige feil, som tvetydighet eller unødvendig kompleksitet


5 grunnprinsipper for gode forretningsregler

1️⃣ Forretningsregler skal være deklarative, ikke prosessuelle

Dårlig regel (prosedyre-fokusert):
Hvis en kunde legger inn en ordre, sjekk om kunden eier en konto. Hvis ikke, avvis ordren.

God regel (deklarativ):
En kunde kan bare legge inn en ordre gitt at kunden eier en konto.

👉 Unngå regler som beskriver steg-for-steg-prosesser. Fokuser heller på hva som er tillatt eller ikke.


2️⃣ Bruk «skal» og «bare» for å gjøre reglene entydige

Dårlig regel:
En leietaker tillates ikke å delta i sameiets styre.

God regel:
En leietaker skal ikke delta i sameiets styre.

👉 Alle forretningsregler må inneholde enten «skal» (obligatorisk krav) eller «bare» (begrenset mulighet).


3️⃣ Unngå upresise uttrykk og overflødige ord

Dårlig regel:
En leveranse skal alltid ha en status.

God regel:
En leveranse skal ha en status.

👉 Ord som «alltid», «uten unntak» eller «på noe som helst tidspunkt» er ofte overflødige. Fjern dem med mindre de tilfører spesifikk betydning.


4️⃣ 🄰 Bruk presise subjekter og unngå flertall

4️⃣ 🄱 “Kan” uten “bare” er ikke bra

Dårlig regel:
Kunder kan kjøpe plantevernmidler hvis leverandøren har dem på lager.

God regel:
En kunde kan bare kjøpe et plantevernmiddel gitt at plantevernmiddelet finnes på leverandørens lager.

👉 Bruk entallsform og unngå generelle uttrykk som kan føre til tvetydighet. Forretningsregler gjelder for enkeltforekomster. Visse typer tvetydighet kan lett unngås ved å plassere subjektet i setningen i entallsform.

👉 Ordet “bare” innskrenker handlingsrommet, og uttrykket blir dermed en forretningsregel.


5️⃣ Aktører som subjekt er ofte ikke bra

Dårlig regel:
En kunde kan gjøre et uttak bare hvis kontoen er aktiv.

God regel:
Et uttak fra en konto kan bare gjennomføres gitt at konten er aktiv.

👉 En forretningsregel som indikerer en aktør som subjekt bør granskes nøye. Gjelder virkelig forretningsregelen bare for denne aktøren? Ofte er svaret nei. I så fall bør aktøren erstattes med et subjekt som ikke er en typisk aktør (f.eks. uttak, som ovenfor).

⁉️ Spør: Bare kunden?

↪ Hva med autoriserte tredjeparter?
↪ Hva om banken selv?
↪ Hva med andre aktører?


Oppsummering

Ved å bruke RuleSpeak kan vi skrive forretningsregler som er presise, klare og enkle å forstå. Husk disse 5 prinsippene:

🔹 Unngå prosessuelle regler – fokuser på hva som gjelder
🔹 Bruk «skal» og «bare» for entydighet
🔹 Fjern overflødige ord
🔹 Bruk entallsform og presise subjekter og unngå “kan” uten “bare”
🔹 Aktører som subjekt er ofte ikke bra

Ved å følge disse prinsippene sikrer vi at forretningsreglene blir forstått riktig, både av mennesker og systemer!


Ønsker du å lære mer? Sjekk ut RuleSpeak-veiledningene for flere detaljer om hvordan du kan uttrykke forretningsregler på en optimal måte.

RuleSpeak® har blitt utviklet av Ronald G. Ross siden 1996. Siden den gang har RuleSpeak blitt brukt i hundrevis av prosjekter av blant annet oss i Decisive og Business Rule Solutions, LLC (BRS). RuleSpeak har vært tilgjengelig på BRS nettsiden siden slutten av 1990-tallet.

Hva synes du om denne tilnærmingen? Har du eksempler på uklare forretningsregler fra din bedrift? Del gjerne dine erfaringer i kommentarfeltet under innlegget vårt på LinkedIn! 🚀

Portrett av Alf-Kenneth, CTO, Arkitekt, Utvikler hos Decisive

Alf-Kenneth Aabel

CTO, Arkitekt, Utvikler

alf-kenneth.aabel@decisive.no
Portrett av Tobias, teamleder og rådgiver hos Decisive

Tobias Vigmostad

Teamleder og Rådgiver

tobias.vigmostad@decisive.no

Asfalt og krøtterstier

mars 26, 2025

Det er vår i luften, været blir varmere og snøen er endelig i ferd med å forsvinne! I dag bestemte jeg meg for å ikke ta t-banen hele veien til jobb, slik jeg må innrømme at jeg har gjort i hele vinter, men i stedet gå av noen stasjoner tidligere og gå resten av veien. En av fordelene med å jobbe i byen er at man kan gå på asfaltert vei og dermed komme seg tørrskodd på jobb, selv om vårløsninga er i gang. På akkurat den veien jeg går forutsetter det at jeg må gå en omvei rundt en gressplen. I likhet med de fleste andre gjorde jeg ikke det, og det er godt synlig…

Asfalt og krøtterstier fagblogg

Dette fikk meg til å reflektere litt over et begrep jeg kom over for noen år siden. På engelsk heter det «desire path». Det finnes ikke et veletablert begrep på norsk, men la oss kalle det for en «krøttersti». En krøttersti er en sti som oppstår der folk eller dyr ønsker å gå, og ikke der hvor by- eller landskapsplanleggere ønsker at man skal gå. En krøttersti kan for eksempel være en snarvei gjennom et hull i gjerdet, et hjørne som kuttes i et veikryss, eller sånn som på veien til jobb, en gjørmete sti som deler en ellers fin plen i to.

Krøtterstier er lett synlige i terrenget og oppleves ofte som skjemmende. Oppstår det en krøttersti settes det gjerne opp et skilt som sier «Ikke trå på plenen», eller kanskje det dukker opp et gjerde (som de fleste likevel klatrer over). Krøtterstier blir ofte gjenstand for en kamp mellom folk flest og frustrerte anleggsgartnere.

Som en analogi er krøtterstien svært treffende i mitt fag, som er programvareutvikling. Vi som er arkitekter og utviklere er planleggerne som har idéer og meninger om hvordan brukerne skal agere. Menyer, datafelter og informasjon blir plassert og organisert slik våre idealistiske planer og ønsker dikterer. Alt skal se flott og ordnet ut, og hvis brukerne bare gjør slik som vi ønsker, så blir alt helt tipptopp.

Men brukere er som folk flest, og vil gå der de selv ønsker. I møtet mellom programvare og bruker finner vi fort ut hvor krøtterstiene i programmene våre går. Vi, som tross alt er eksperter på slike ting, responderer helst med å forsøke å tvinge gjennom at programvaren skal brukes slik vi har bestemt. Vi må sette opp gjerder og skilt for å hindre uønsket adferd. Vi kaller det gjerne «patching» eller «bugfixing».

Når jeg i morges traverserte den nå litt blaute krøtterstien på vei til jobb, tenkte jeg at det hadde jammen vært fint om noen kunne asfaltert dette stykket over plenen, slik at jeg slapp å bli gjørmete på skoene. Jeg tenker at vi som utviklere kan lære to viktige ting av dette:

  1. Et godt forarbeid, der man kartlegger brukernes behov og ønsker, reduserer behovet deres for å tråkke opp egne stier i programvaren.
  2. Et godt etterarbeid identifiser krøtterstiene som unektelig oppstår, slik at de kan endres, tilpasses og asfalteres etter brukernes ønsker og behov.

Portrett av Bengt-Olav, utvikler hos Decisive

Bengt Olav Olsen

Utvikler

bengt.olav.olsen@decisive.no

Business Apps i SMARTS

februar 27, 2025

Hva er Business Apps? En forretningsapplikasjon, også kjent som en business app, er et generelt begrep for programvare eller en samling av programmer som støtter forretningsdriften i organisasjoner. 

Bedrifter bruker vanligvis forretningsapper slik at deres ansatte kan utføre spesifikke oppgaver mer effektivt og nøyaktig. For eksempel kan en detaljhandel som ønsker å forbedre lagerstyringen for å redusere kostnader og unngå utsolgte varer ta i bruk en forretningsapplikasjon. Denne applikasjonen integreres videre med lagerstyringssystemene og gir et brukervennlig grensesnitt for at ikke-teknisk personell kan ta i bruk løsningen og utføre arbeidsoppgavene sine.

Business Apps i SMARTS, bilde mennesker pc møte

Hva er forskjellen mellom en forretningsapp og en plattform? 

Teknisk sett gir en plattform et grunnlag for at applikasjoner kan bygges og kjøres. De fleste plattformer i dagens marked kommer med forhåndsbygde applikasjoner, og mange applikasjoner utgir seg også for å være plattformer. I tillegg bruker leverandører gjerne generelle termer som system, programvare, løsninger og teknologi for å kunne markedsføre sine produkter mer effektivt. I praksis er skillet mindre klart.  

Mens ferdig programvare har en viss brukervennlighet for sluttbrukeren, har de ofte begrenset fleksibilitet. Ofte er fleksibilitet mindre viktig, fordi de fleste programvarer allerede kommer med all mulig funksjonalitet. Men når det gjelder programvare for å automatisere og administrere forretningkritiske beslutninger som er operasjonelle, er fleksibilitet enormt viktig. For eksempel når det gjelder underwriting og krav i forsikring eller svindel i finansielle tjenester. Jo mindre fleksibel programvaren er, desto mer ressurser vil du bruke på å utvikle legacy IT-løsninger som kan være kostbare å vedlikeholde. For å ivareta fleksibilitet bør man tenke på hvor enkelt det vil være for både utviklere og teknisk personell å få produktet til å gjøre akkurat det du vil at det skal gjøre.  

Dette er hvor forretningsapplikasjoner som modul i plattformen SMARTS kommer til nytte. SMARTS forretningsapper er tilpassede, brukervennlige brukergrensesnitt som gjør det mulig for ikke-tekniske brukere å enkelt utføre beslutningsstyringsoppgaver. Brukere kan gjøre dette uten å bli opplært på SMARTS™ plattformen eller vite hvordan man koder. I stedet for å eksponere alle regler og alle SMARTS funksjonaliteter for alle brukere, kan forretningsapplikasjoner eksponere bare det som er nødvendig for å fullføre spesifikke oppgaver/beslutninger, for den spesifikke brukeren. Forretningsapplikasjoner kan opprettes av forretningsanalytikere og programvareutviklere direkte i SMARTS-grensesnittet ved å bruke de samme «low-code/no-code»-verktøyene for å definere regler. 

Avslutningsvis mener vi i Decisive at forretningsapplikasjoner vil spille en avgjørende rolle i å støtte forretningsdriften til organisasjoner og være en bro mellom IT og business i årene som kommer.  

Portrait of Luis, Commercial Director at Decisive

Luis Pinzon

Kommersiell direktør

luis.pinzon@decisive.no

Digitaliseringens treenighet

En liten kikk på forvaltningsinformatisk metode
desember 12, 2024

Introduksjon

Som et siste blogginnlegg før jul tenkte vi å skrive litt om digitalisering, og hvordan endringer i forskjellige dimensjoner henger sammen og påvirker hverandre. Begge forfatterne av dette blogginnlegget er utdannet forvaltningsinformatikere, hvor tverrfaglighet ligger i kjernen av faget. Forvaltningsinformatikk er en tverrfaglig utdanning som kombinerer juridiske, informatiske og samfunnsfaglige innfallsvinkler. Denne kompetansen er nyttig for å forstå hvordan IKT, organisasjoner og mennesker spiller sammen og påvirker hverandre, hvordan teknologi påvirker samfunnet, og hvilke juridiske konsekvenser utnyttelse av teknolog kan gi.  

I og med at vi er over gjennomsnittet opptatt av hvordan digitalisering påvirker samfunnet har vi sett frem til og satt pris på den nye digitaliseringsstrategien, «Fremtidens digitale Norge», som virkelig setter digitalisering på dagsordenen. I digitaliseringsstrategien står det blant annet om hvordan forskjellige drivkrefter i samfunnet påvirker hvordan samfunnet digitaliseres. Videre beskriver den hvordan drivkreftene og trender beveger seg raskt og at alle land bør arbeide med innsikt om fremtiden. Derfor tenkte vi at det kan være nyttig å diskutere en enkel metode for å analysere noen endringer og hvordan disse påvirker digitalisering.

Tre dimensjoner i endring

Begrepet digitalisering kan brukes om konvertering av analoge til digitale data, men også om innføring av digital teknologi som effektiviserer prosesser og endrer hverdagslivet. Kunstig intelligens er et eksempel på en teknologi som mange offentlige virksomheter nå inkorporerer i sine arbeidsprosesser, og som har potensialet til å effektivisere enkelte av disse prosessene betydelig. Samtidig er det viktig å huske på at teknologisk endring, slik som innføring av ny teknologi, ikke skjer i et vakuum – og at denne endringen vil føre til endringer i andre dimensjoner. Nedenfor har vi illustrert dette i en forvaltningsinformatisk figur, som viser hvordan teknologisk endring påvirker (eller fører til) både rettslig- og organisatorisk endring.     

Teknologisk endring 

Skjer det endring i teknologien, ved eksempelvis innføring av kunstig intelligens, vil dette også føre til rettslig og organisatorisk endring. Den nye teknologien påvirker samfunnet på flere måter, for eksempel ved at den kan utgjøre en risiko for individets rettigheter og friheter og at lovgiver dermed ser behov for å regulere den nye teknologien og lager en lov med mål om å gjøre nettopp dette. Dette har skjedd i forhold til kunstig intelligens med KI-forordningen, som skal sikre at KI-systemer som brukes innenfor EU er trygge, og at de respekterer våre grunnleggende rettigheter og verdier.  

Videre vil ny teknologi som KI kunne ha stor innvirkning på organiseringen av samfunnet. Vi ser allerede nå en bekymring fra enkelte yrkesgrupper når det kommer til om jobber vil gå tapt til forsøk på å automatisere stillinger. Per i dag er dette særlig relevant for kreative oppgaver som involverer å lage bilder eller skrive tekster. En endring som dette vil igjen kunne kreve vern for visse yrkesgrupper i lov, eller evt. subsidier for å beskytte ønsket kompetanse.  

Rettslig endring

En rettslig endring kommer sjeldent ut av det blå. Innføring av nye lover, eller endring i eksisterende lov og forskrift vil ofte skje som et resultat av endring i teknologi eller organisering. Selv om rettslig endring ofte trigges av teknologisk eller organisatorisk endring, vil innføring av nye lover også ha effekt på både teknologi og organisering når loven trer i kraft. Bruker vi den ovenfornevnte KI-forordningen som eksempel kommer denne som følge av bekymringer for konsekvensene KI vil kunne ha for våre europeiske grunnleggende rettigheter og verdier, og er med det lagt opp slik at den regulerer hvilke produkter som er akseptable på markedet og hva som skal til for at det enkelte produkt er akseptabelt. Forordningen vil ha potensiale til å styre produktutviklingen og kvalitetssikringen av KI-produkter, da vi antar virksomheter fremdeles ønsker å kunne selge sine produkter på det europeiske markedet.  

På grunn av kravene som stilles til systemene som treffes av KI-forordningen vil mange virksomheter se behov for å skaffe kompetanse om KI-forordningen og hvordan å sørge for etterlevelse. Dette kan fort føre til at nye roller blir opprettet for å sikre etterlevelse. På nasjonalt plan stiller KI-forordningen også krav til at medlemslandene skal ha et KI-tilsyn, akkrediteringsorganer for sertifiseringsorganer og at det skal opprettes minst en sandkasse for KI i hvert land. Alt dette er eksempler på hvordan en rettslig endring vil føre til organisatoriske endringer. Et annet eksempel er krav om personvernombud for enkelte virksomheter etter GDPR, som førte til at mange virksomheter måtte opprette en ny rolle og ny organisering for enkelte oppgaver.      

Organisatorisk endring 

Ved innføring av ny teknologi eller ved en rettslig endring, vil det også skje en organisatorisk endring. Dette kan både være at det opprettes nye roller slik vi har nevnt ovenfor, men det kan også være at interne prosesser må omorganiseres eller endres. Oppgaver som tidligere ble utført manuelt kan effektiviseres eller automatiseres, noe som kan føre til at enkelte roller blir overflødige. Rettslige endringer som ikrafttredelse av KI-forordningen fører også til en lovpålagt plikt til opplæring av ansatte.  

Bruk av hjemmekontor er et eksempel på en organisatorisk endring som har ført til tekniske endringer, ved at videokonferanseteknologi har blitt standard for alle virksomheter og kvaliteten på dette har blitt langt bedre enn før pandemien. Videre førte dette til behov for regelverksendringer som gjør at offentlige virksomheter må avtale med ansatte om bruk av hjemmekontor.  

Avslutning  

Digitalisering er et evig spill av påvirkning mellom disse dimensjonene (Og flere! Her har vi for eksempel ikke trukket inn økonomiske endringer). Det er viktig å analysere enhver kommende endring i en enkelt dimensjon, og avklare hvordan dette vil påvirke de andre dimensjonene for å kunne planlegge den videre digitaliseringen på en god måte.  

Vi mener at verken teknisk- rettslig eller organisatorisk endring kan skje i et vakuum: Ha et helhetlig perspektiv – se alt i sammenheng! 

 

Portrait of Marianne, Consultant at Decisive

Marianne Bang

Advisor

marianne.bang@decisive.no
Portrait of Pernille, Consultant at Decisive

Pernille Nilsen

Advisor

pernille.nilsen@decisive.no

Principles, Methods, and Tools for Generating Text: Part 2

November 28, 2024

Automatic generation of letters 

This is part 2 of 2 on text generation. This builds on part 1, so to get the full picture, I recommend reading that post first.

In essence, we generate letters in the following way: The system selects the appropriate letter template for the situation, uses information from the case file to determine whether certain phrases should be included in or excluded from the letter for this specific case, and fills in merge fields to customize the phrases for the specific case. Finally, the letter can be sent to the recipient, either through Altinn or by printing it out and mailing it. 

To generate letters automatically, I will use a letter template and a document template. The letter template contains standard phrases and rules that determine which phrases should be included in different situations. The document template defines fonts, font sizes, line spacing, margins, how we number pages, etc. The advantage of having both is that you can define a document template once, and then anyone who wants to follow that same document template can simply specify that their letter template should use a certain document template. It’s faster to create new letters when you don’t have to figure out all those details, and the letters look consistent without everyone having to go out of their way to get it right. You simply say, “This letter template should use the standard document template,” and you’ll get the organization’s preferred font sizes, fonts, etc. 

Letter templates define the content of a letter. You can have a letter template for multiple situations and control the content using various rules. In that case, a single letter template can include text for both approving and rejecting an application. However, if most of the content for the two situations differs, it may be wise to have two letter templates: one for approval letters and one for rejection letters. 

A letter template can be created by including some standard phrases and some phrases that are only included in certain cases, depending on the nature of the matter. For example, a letter template might look like this: 

Document template = Standard letter 

Application Processing/Grant Letter/Heading 

Application Processing/Grant Award Letter/Introduction 

Application Processing/Grant Letter/Justification 

<SpesiellSak == true> Søknadsbehandling/Innvilgelsesbrev/EkstraInformasjon 

General/Right of Access 

General/Relevant Rules for This Letter 

General/Contact Us 

General/Signature 

Here we have many standard phrases, and one phrase that depends on the “SpecialCase” field being set to “true.” In other words, a phrase that only appears in some approval letters. More on this field and similar ones in the next chapter. We have some phrases that are specific to this grant letter, and some phrases that are common to other letters. The phrase Common/RelevantRulesForThisLetter will have different content from letter to letter, since what it actually contains are the legal references to which the letter’s phrases are linked. Nevertheless, it is a common phrase that contains the logic for compiling the legal references for each individual letter. 

Development and architecture, developers, and PCs with code

Using the letter template 

When you work on case processing, you make certain decisions. We need to communicate some of these decisions in a letter. Some cases are unique in themselves, for example, due to the applicant’s circumstances. How will the system know which phrases to include in a letter? We need to define some rules for selecting which phrases should be included in the letter. For example, we could have a rule that says “Given that the applicant is under 18, text regarding minor applicants must be included in the letter,” or “Given that the case worker selected ‘Yes’ on screen 4 (‘Is this a special case?’) then text regarding special cases must be included in the letter” or “Given that there are late payment interest charges in the case, text regarding late payment interest must be included in the letter.” In addition, there are various numbers, names, and other details that must be included in the letter. For example, the applicant’s name, the applicant’s address, the current late payment interest rate, today’s date, or the amount to be paid. 

I will describe one way to structure this. I am assuming that the system has several technical components, and that the letter component is a shared component used by multiple case management components. I assume that the general letter rules are located in the letter component, while the rules for extracting the information we want to include in the letter are located in the case management component that is closest to that information and where the expertise for that case management resides. Then we must gather information about the case in the case management component and send it to the letter component. 

We need to define rules for extracting the desired information and structuring it in a way that is agreed upon with the mail module. One way to do this is in JSON format, similar to what is shown here: 

    "name": "Per Persen", 

    “address”: “Gateveien 1”, 

    “late payment interest rate”: 12.5, 

    "specialCase": false, 

    "minorApplicant": false, 

    “Date of decision”: “October 25, 2024” 

The letter module uses this to determine whether the phrases "Application Processing/Approval Letter/Introduction" and "Application Processing/Approval Letter/Special Case" should be included in the letter, and to populate merge fields in the phrases. 

We also need to choose the language variant. We have all phrases in Bokmål, Nynorsk, and English. Which ones should be used for a given recipient? Perhaps we have a customer database or some other type of registry where we have the preferred language variants for different users. In that case, the letter component can look up the preferred language variant and select the correct version of all phrases. We should define a rule for what to do if we don’t have phrases in the desired language variant. For example, whether we want to display an error message, use the available language variant, or forward the case to a human case handler to write the letter manually. 

Conclusion 

There are many advantages to handling letters and phrases as described here, but there are, of course, some drawbacks as well. It takes a lot of work to get everything set up. It can be a major change from how you write letters today, especially if there are tasks that case workers currently perform manually. Such a change requires not only IT development but also change management. Case workers may feel they are losing control over the letters, and you must ensure they trust the automatically generated letters. Organizations of different sizes and with different goals and frameworks can benefit from different aspects of this. One advantage is that you can use the phrase library table to achieve a more consistent structure and text in the letters even if you don’t have any of the technical components to automatically generate letters. I’d also like to remind you that it’s possible to use this generally to generate text, not just for typical “letters.” 

The most important thing is to assess whether you are satisfied with the way your organization communicates in writing. If you are not satisfied, you can start by considering what you want to achieve, and then identify appropriate measures. These may include some or all of the measures described here, or they may involve other measures and solutions. 

Portrait of Øystein, Consultant at Decisive

Øystein Grøndahl

Advisor

oystein.grondahl@decisive.no

Principles, Methods, and Tools for Generating Text: Part 1

November 21, 2024

Introduction

In this and the next blog post, I’ll be writing about principles, methods, and tools for generating text. I’ll be focusing on writing a letter to someone to provide information about something. This could be a decision made by a government agency, a letter to bank customers with information about new interest rates, or other matters. This is actually quite general and is about how you can generate a text. Whether it’s in A4 format sent as a PDF or on paper, text in an email, text message, or something else doesn’t matter. For simplicity’s sake, I’ll use the example of sending a decision letter in PDF format to inform someone of a decision. 

What I’m describing in this blog post isn’t something I came up with on my own. It largely consists of specific features developed within the “Fremtidens innkreving” program at the Norwegian Tax Administration, but it also includes general principles and methods. I’m writing about this to share something I think is smart that others might find useful. 

Overall, what I’m describing will likely be most relevant to large organizations, but some aspects may be relevant even for small organizations. 

Principles for written communication 

Here, I describe some principles that underlie the methods and tools I will discuss later. Most of this stems from how the Norwegian Tax Administration wants to communicate in its letters and present itself to the public. I believe these are relatively general principles, which some will agree with and others may disagree with. Different organizations may have different needs and preferences, so you must assess which of these are relevant to you and your organization. 

  • The content must be accurate. It must be approved by subject matter experts, department heads, lawyers, or others.
  • The content must be written in plain language so that all recipients can understand the message. It must be reviewed by someone with expertise in plain language.
  • We must maintain consistent external communication to present a unified image:

    Some content should be consistent across different subject areas. For example, if you have a section at the end of the letter that says, “Do you have any questions? Contact us this way: …,” it should be the same in all letters where you want to include such text.

    The content should follow a consistent format across all departments. For example, decision letters from one part of the organization should resemble decision letters from another part of the organization. This could include, for example, the order of the sections “Relevant rules in this letter,” “Do you have any questions?” and “Signature.”

    Letters with essentially the same content should be identical. If one case worker is handling a case and approves an application, and another case worker approves a different application, both approval letters should be identical (with the exception of details specific to each case). 

  • Some content must be presented in multiple language variants, such as Bokmål, Nynorsk, and English, because the audience requests it. In such cases, the texts must be reviewed or written by someone who is proficient in those language variants. 
  • Letters that can be generated automatically should be generated automatically. This saves time in case processing, ensures consistent letters, and allows us to send out letters more quickly when something happens. For example, if we have an automated case processing system, it’s helpful if you can send the decision letter immediately instead of having to ask a human case worker to review the case and write a letter conveying the outcome. 

These principles may be waived when there are good reasons to do so. 

One possible objection to the principles above is that they lead to the centralization of letters and text within the organization. This could result in it taking longer to create new letters or modify existing ones. It is true that this can happen, but it is not true that it has to happen. It must also be weighed against how important these principles are to the organization, so you may end up with varying degrees of centralization. We will now look at methods and tools that can be used in different ways depending on how much weight you place on the various needs and preferences mentioned above. 

Phrase Bank 

One way to meet many of the needs and preferences listed above is to have a place where all letter text is stored. I use the term “phrase library,” where a phrase is a piece of text. It can be a sentence or an entire paragraph, but is never shorter than a single sentence. A phrase will have a specific formatting and may include headings, bulleted lists, etc. 

I assume that a letter written in Bokmål, Nynorsk, or English can be structured in the same way and translated paragraph by paragraph or even sentence by sentence. You have to consider the text as a whole, but I think it’s fair to say that a particular sentence or paragraph in Bokmål can be equivalent to a sentence or paragraph in English. There may be exceptions, and they can be handled, but this is the general rule. 

We can create a simple phrase store like this:

Her har vi formatert teksten mellom <h2> og </h2> som overskrift nivå 2. Vi kunne også hatt fet, kursiv, ulike skriftstørrelser osv. Der det er rød skrift på entall/flertall som f.eks. du/dere kan styres av f.eks. om du skriver brev til en person eller en organisasjon. Feltene <forsinkelsesrentesats> og <rentebeløp> skal fylles ut med konkrete tall i hvert enkelt brev. Vi kaller slike felt «flettefelt», for å vise at her skal det flettes inn noe i setningene. 

If you have such a list of texts, you can ask everyone who needs to write new texts to use them whenever possible. New letters can be written by selecting some existing texts and creating new ones. You’ll get more consistent texts and communication, and you can save time on drafting your own texts and getting them legally approved. You won’t have to translate the same text between Bokmål, Nynorsk, and English multiple times, because everyone can use the same translation. 

Such a list can become confusing, so we can add some identifiers. The table below includes the columns “Level 1,” “Level 2,” and “Level 3”: 

These identifiers can be used to filter and sort the list, and they can be used to create a letter template with various phrases. I’ll come back to this in more detail in my next blog post.   

We may also want to include legal references in our letters. For example, whenever we write about late payment interest, we may want to refer to a specific section of a specific law. It is helpful if everyone does not have to figure out for themselves which section to cite, e.g., whether it is “the Late Payment Interest Act, Sections 14 and 15” or “the Late Payment Interest Act, Chapter 3.” It’s also helpful if everyone who needs to refer to this does so in the same way—meaning they use only one of the following: “our right to calculate late payment interest, see the Late Payment Interest Act §§ 14 and 15,” or “for information on why we calculate late payment interest, see §§ 14 and 15 of the Late Payment Interest Act.” If you set this up once and for all, you’ll have a consistent format, and all new users of the same text won’t have to worry about how it should look. One way to do this is to link specific legal references to specific phrases. I’m now removing Nynorsk and English so the table doesn’t get too wide. 

This way, all letters containing the phrase “joint/late payment interest/text” will include the same legal reference. Such legal references can be listed in a separate section of the letter under a heading such as “Relevant provisions for this letter.” 

To create a new letter, follow these steps: 

  1. Find out what must be included in the letter to meet legal requirements. 
  2. Think about what else you want to bring  
  3. Think about the general structure of the letter, but don't get too bogged down in the details. 
  4. Browse the phrase library to find suitable texts, especially under “Common.” 
  5. If necessary, write any new text you need that isn't already in the phrase library. 
  6. New text should be added to the phrase database. All content from every letter should be included there. 

All of this can, in fact, be used to create letter templates that you distribute to case workers for manual letter writing, but a key benefit comes when it’s used to generate letters automatically. We’ll take a closer look at this in the next post on the professional blog. You can read Part 2 here.

Portrait of Øystein, Consultant at Decisive

Øystein Grøndahl

Advisor

oystein.grondahl@decisive.no

Grønn koding: Bærekraftig koding for en grønnere fremtid

oktober 17, 2024

Introduction

Ettersom verden blir stadig mer digitalisert, er det relevant og nødvendig å rette søkelys på hvilken påvirkning digitaliseringen kan ha på miljøet. IT-sektoren er en av de raskest voksende industriene globalt, og den står for en stadig økende andel av de globale CO2-utslippene. Faktum er at IT-sektoren gir like store klimaavtrykk som flysektoren [1]. Som følge av denne utviklingen, har grønn IT og mer spesifikt grønn koding blitt et fremvoksende konsept.

I dette blogginnlegget søker jeg å gi et innblikk i hva grønn koding er, hvorfor det er viktig, og hvordan utviklere kan implementere bærekraftig kode.

Hva er grønn koding?

“Green coding is an environmentally sustainable computing practice that seeks to minimize the energy involved in processing lines of code and, in turn, help organizations reduce overall energy consumption.” [2]

Grønn koding er et segment av grønn databehandling (grønn IT). Grønn databehandling er en praksis, dvs. fabrikasjon, bruk og avhending av IT-utstyr, som har som mål å begrense teknologiens klimaavtrykk. Grønn koding dreier seg om å utvikle programvare som påvirker miljøet i så liten grad som mulig. Mer konkret vil det si å skrive kode som er energieffektiv, ressursbesparende og optimalisert for å kjøre på enheter og servere med lavt energiforbruk. Et hovedpoeng med grønn koding er altså at programkoden er effektiv. Med dette menes det at koden ikke gjør mer enn nødvendig for å oppnå sitt definerte funksjonelle formål.

Grønn koding handler også om hele programvarens livssyklus, fra utvikling og distribusjon til bruk og avvikling.

Flere open-source prosjekter og fellesskap har begynt å fokusere på bærekraft i programvareutvikling. Green Software Foundation er et eksempel på et initiativ som samler utviklere, forskere og organisasjoner for å fremme energieffektiv og bærekraftig programvare.

Hvorfor er grønn koding viktig?

Dagens digitale infrastruktur drives i utstrakt grad av datasentre. For å opprettholde drift, kjøling og sikkerhet forbruker datasentre veldig store mengder energi. Stadig økende databehandling skaper store mengder varme, som igjen krever energi for å avkjøles. Her spiller grønn koding en viktig rolle. Grønn koding kan bidra til å redusere energiforbruket i IT-sektoren, og derav redusere sektorens klimaavtrykk. Dette kan oppnås ved å optimalisere programvarens bruk av ressurser. Effektiv kode som grønn koding representerer kan redusere behovet for maskinvareoppgraderinger, forlenge levetiden til eksisterende teknologi, og altså minimere energikostnader. Alt dette uten å gå på bekostning av ytelsen.

Grønn koding vil ikke bare kunne være fordelaktig for miljøet, men også for organisasjonen som implementerer det [3]. Hvis grønn koding gjør at organisasjonen forbruker mindre energi, kan dette gi økonomiske besparelser, som vil bidra til å opprettholde forretningens bærekraft. Dessuten kan en organisasjon som forplikter seg til bærekraft, trolig få et bedre omdømme og derav potensielt øke sin markedsappell blant miljøbevisste kunder [4].

Hvordan implementere grønn kode?

En fundamental forutsetning for at en organisasjon skal kunne redusere sin miljøpåvirkning, er at organisasjonen forstår hvilken miljøpåvirkning den har. På den måten kan organisasjonen legge planer og ta veloverveide beslutninger om hvilke bærekraftige programvareutviklingstiltak de bør gjøre for å maksimere effekten. Det fins en mengde målemetoder som kan brukes for å vurdere og forstå miljøpåvirkningen. Mange programvare- og skyleverandører tilbyr verktøy og dashboards som kan synliggjøre miljøpåvirkningen til tjenester som en organisasjon benytter. Noen eksempler er AWS Carbon Footprint Tool og Azure Emissions Dashboard [3].

Hvis man har gjort tiltak for å introdusere grønn tenkning i en organisasjon, vil det øke sjansen for en kulturendring i organisasjonen med mer fokus på bærekraft i hver ansatt sitt daglige arbeid [3]. Dette vil gjøre det enklere å implementere grønn koding.

Når det gjelder IT-arkitektur, er det anbefalt ut ifra et grønt koding perspektiv å satse på mikrotjenester fremfor monolitt [3]. I en monolittisk applikasjon er alle komponenter og all funksjonalitet pakket sammen. Hvis en komponent i en monolitt opplever høy etterspørsel, må som oftest hele applikasjonen skaleres. Dette kan føre til at ressursene brukes mindre effektivt. Med en mikrotjenestearkitektur er applikasjonen delt opp i flere uavhengige tjenester som kan rulles ut og skaleres hver for seg. Det vil gi bedre ressursbruk, serverutnyttelse og generelt bedre energieffektivitet.

Et annet tiltak for å optimalisere serverbruk er containerisering (f.eks Docker) eller virtualisering [4]. Dette kan maksimere bruken av serverressurser og redusere behovet for flere fysiske servere og dermed energibruken. Hvis de brukes på riktig måte, kan skyplattformer være energibesparende. Ressursskaleringsløsninger som skyleverandører ofte tilbyr, kan optimalisere ressursforbruket i forhold til etterspørselen.

Det finnes noen mer konkrete implementasjonsråd hva angår grønn koding:

  • Optimalisering av algoritmer: Ved å bruke effektive algoritmer som bruker mindre prosessorkraft og minne, kan dette redusere energien som kreves for å kjøre koden. [4]
  • Unngå redundant kode: Ved å fjerne unødvendig og ubrukt kode vil mengden prosessering som trengs bli redusert, noe som igjen reduserer energibruken. Dette vil også forenkle vedlikehold av programvaren. [5]
  • Begrens bruk av løkker: Løkker er ofte veldig ressursintensive, ettersom de kan utføre et stort antall beregninger. Ved å minimere antallet løkker, kan man optimalisere dataprosesseringen. [7]
  • Asynkron programmering: Å kjøre prosesser i parallell (asynkront) kan øke effektiviteten og redusere energibruken. Synkronitet gir mer ventetid for prosessoren og dermed mer unødvendig energibruk. [6]
  • Caching-teknikker: Implementasjon av caching av eksempelvis ofte aksesserte data i minnet, kan gi besparelser i prosesseringstid. [7]
  • Lazy loading: Ved å bare laste data når det trengs, kan utviklere redusere minne-fotavtrykket i programvaren. [7]
  • Oppdater til nyere versjoner: Ressursbruk kan optimaliseres ved å ta i bruk oppdaterte biblioteker og rammeverk
  • Valg av programmeringsspråk: Programmeringsspråk har ulik energieffektivitet. C, C++ og Rust er kjent for å være noen av de mest energieffektive språkene. Python og Ruby er ansett for å være blant de minst energieffektive. [4]
  • Open source software: Åpen kildekode-programvare kan bidra til bærekraft ved redusert behov for utvikling fra bunnen av, noe som sparer tid og ressurser. [4]

 

Avslutning

Grønn koding er et sentralt konsept innen grønn databehandling. Det er en mulighet til å kombinere teknologi med ansvar. Ved å gjøre små justeringer i hvordan vi skriver og optimaliserer kode, kan utviklere bidra til å redusere teknologiens miljøpåvirkning og fremme en grønnere fremtid.


Kilder

[1] https://www.tu.no/artikler/it-bransjen-har-like-stort-klimaavtrykk-som-flybransjen-hva-gjor-vi-med-det/486098
[2] https://www.ibm.com/think/topics/green-coding
[3] https://www.computer.org/publications/tech-news/trends/implementing-green-coding-practices
[4] https://green.org/2024/05/24/best-practices-of-sustainable-software-development/
[5] https://greensoftware.foundation/articles/10-recommendations-for-green-software-development
[6] https://www.asioso.com/en_BA/blog/green-code-4-principles-for-environmentally-friendly-software-development-b1001
[7] https://www.suso.academy/en/2023/03/13/green-coding-the-5-most-important-basics-for-sustainable-software-development-with-code-examples/

 

Portrett av Espen, utvikler hos Decisive

Espen Vikskjold

Sjefskonsulent

espen.vikskjold@decisive.no

Erfaringer med SMARTS fra en forretningsarkitekt

september 19, 2024

På denne bloggen har det allerede blitt skrevet en del innlegg som handler om Decision Intelligence Platform (DIP), eller beslutningsstyringssystem på norsk. Jeg ønsker å skrive litt om min opplevelse med SMARTS fra en person som har bakgrunn som forretningsarkitekt, der hovedfokuset oftest er på krav, forretningsprosesser og livlige diskusjoner mellom personer i grenselandet mellom IT og fag. 

Alf-Kenneth har allerede skrevet en god introduksjon til hva SMARTS er, og fordeler ved å bruke verktøyet. Øystein har skrevet et 2-delt innlegg om hvordan A-B testing i SMARTS kan utføres, der det er synliggjort hvordan du enkelt kan vurdere konsekvenser av endringer i reglene.  

Uten den tekniske bakgrunnen kan det oppleves som å vandre inn i ukjent terreng med mange fallgruver når man selv skal begynne å «kode» regler. Mitt hovedpoeng er at det er det liten grunn til, fordi dette er så enkelt at man kan lære seg de mest elementære (og viktigste) bruksområdene på kort tid – uten særlig teknisk kompetanse. Jeg har nå brukt en knapp uke på å sette meg inn i SMARTS, og selv om jeg ikke kan påberope meg ekspertise på systemet kan jeg allerede nok til å sette opp et enkelt regelsett med fakta, vilkår og utfall. Og vel så viktig kanskje – jeg kan lese og forstå hva som foregår i etablerte regelsett uten å måtte ty til utviklere for hjelp. Om du  har satt opp et Excel-ark med noen enkle formler er du kapabel til å ta i bruk SMARTS, som er et såkalt «Low-code/No-Code» verktøy. 

Uten at jeg kan eller skal skrive en komplett guide her, vil jeg vise hvor enkelt det er å sette opp et enkelt regelsett med noen fakta og en enkel beslutningstabell. Med min bakgrunn fra pensjonsfaget er jeg moralsk forpliktet til å ta et eksempel derfra. Vilkårene for innvilgelse av «påslagspensjon» (fra offentlig sektor) er gjort betraktelig enklere sammenlignet med den gamle «brutto-ordningen», og handler i hovedtrekk om tre enkle vilkår: 

  • Medlemmet må være fylt 62 år  
  • Medlemmet må ha søkt i tide (med andre ord kan en ikke søke tilbake i tid)
  • Medlemmet må ha minimum 1 dag opptjening etter 31.12.2019  

(Så håper jeg at mine kollegaer med pensjonskompetanse kan tilgi meg for å ha gjort noen forenklinger for eksempelets skyld) 

Rekkefølgen for hvordan man ønsker å gjøre dette er fleksibel, men vi ser med en gang at vi her trenger å få etablert tre enkle faktum. Vi begynner med å sette opp faktum i SMARTS, som tre true/false (boolske) variabler.  

I SMARTS har du i prinsippet mulighet til å strukturere felter og seksjoner som du ønsker, men for å gjøre et tydelig skille mellom hva som er input (som er avhengig av- og prisgitt eksterne data og deres modeller) og fakta anbefaler vi at regler kjører på det vi enkelt kaller «fakta». Hva som er fakta i denne sammenhengen er det lovverket som bestemmer – ikke hva man har som input i en gitt kontekst. Rent praktisk er det å legge til seksjoner og felter svært enkelt – så lenge man tar stilling til datatypen (som i dette tilfellet altså er boolske).  

I SMARTS kan vi med enkle grep benytte oss av disse faktaene og sette opp regelen som en beslutningstabell:  

Tabellen viser de tre vilkårene (sendt innen fristen, fylt 62 år og har opptjening etter 31.12.2019) som kolonneoverskrifter. Hver rad i tabellen kan ses på som en regel – der utfallet av hver regel leses i den siste kolonnen (VilkårForPåslagOppfylt).

Noe forenklet forklart er dette så enkelt som å trykke add new decision table, og legge til rader og kolonner (add row og add column). Den mest kompliserte biten er å knytte kolonnene med de (etablerte) fakta til tabellen – og det tok ca. 2 minutter. Ellers er det å fylle inn enten «true» eller «false» slik at en får en fullstendig tabell med alle potensielle varianter.   

Utfallet fastsetter her verdien «Vilkår for påslag oppfylt» som enten true eller false. Her har du mulighet til å legge inn flere utfalls-kolonner, om du for eksempel vil legge til hjemmelshenvisning, begrunnelse eller annet for hver rad som kan slå til.   

Når jeg har fylt inn tabellen kan jeg endre visning av regelen til rule list, der jeg ser koden som er generert:  

Bildet viser de samme reglene som uttrykt i beslutningstabellen over som individuelle kodede regler. I hver regel er det en tittel (fet skrift), vilkår og utfall.

Foreløpig har vi tatt utgangspunkt i en regel der forutsetningen er at faktum er etablert. I den virkelige verden vil vi også måtte utlede disse faktaene – med andre ord transformere input til de faktaene vi trenger. Her er det flere veier til mål, men én enkel mulighet er å utlede dette med flere regler i SMARTS. I mitt eksempel har jeg skilt mellom regler som utleder fakta, og vilkårsregler (som igjen kjører på fakta). For å utlede fakta har jeg lagt inn noen enkle utledningsregler: 

Utledningsreglene fastsetter altså de fakta som vi benytter for å kjøre de «reelle» forretningsreglene våre. Dette var nok det vanskeligste å få fatt på for min del – men her er det prøving og feiling, og det å gjøre seg kjent med SMARTS sin dokumentasjon og veiledning som gjelder. Du kan også få hjelp av den innebygde AI-assistenten til SMARTS, som jeg har vist med et enkelt eksempel her:  

Det er langt flere muligheter og funksjoner i SMARTS enn det jeg har fått vist med mitt enkle eksempel her – og erfarne brukere eller kodere vil nok ikke være 100% overbevist av mitt forsøk på å implementere denne regelen. Men det er heller ikke poenget med denne bloggposten.  

Som funksjonell arkitekt er det en kjent problemstilling at forretningslogikken er lite tilgjengelig. Både fagpersoner, forretningsressurser, testere og andre har ofte lite innsikt og tilgang til den faktiske koden. Og selv om vi hadde sittet med koden foran oss er det ikke gitt at vi hadde blitt mye klokere. Fagpersoner som sitter med den faktiske forretningskompetansen jobber aktivt med faget og utarbeider oppslagsverk og wikier, men har sjelden eierskapet eller innsikten i den faktiske implementeringen – som i realiteten er måten de samme reglene praktiseres på.  

Når systembrukere oppdager feil eller mangler i eksisterende systemer er det ofte en tungrodd prosess å spore hva som faktisk foregår. Feilsøking og påfølgende kravspesifisering og retting kan være tidkrevende og frustrerende. Ofte er systemer eller tjenester såkalte «black boxes» – der få (eller ingen) i virksomheten helt vet hvordan løsningen fungerer. Men hva om saksbehandleren eller fageksperten selv kunne gå rett inn å sjekke den faktiske regelimplementeringen? Eller enda bedre – om fageksperten selv kunne rettet feilen med noen tastetrykk?  

Å spore hvilke regler som er kjørt – og eventuelt slått til er heller ikke særlig problematisk i SMARTS. I eksempelet nedenfor kan jeg se (med «grønt lys») hvilke regler som har slått til i mitt testcase: 

 

Én av hensiktene med DIP er altså å la fagekspertene selv få innsikt og til syvende og sist eierskap til de praktiserte reglene i systemene. Det er et oppnåelig mål, og spesielt for virksomheter der kompliserte forretningsregler er en del av hverdagen. Betyr det at det også er et mål å «kvitte seg» med utviklere eller systemarkitekter? Selvsagt ikke. For å ta i bruk en DIP kreves det integrasjoner, kvalitetssikring og testing for å nevne noe. For komplekse regler vil også det å utlede fakta være krevende – og i større grad kreve kompetanse med koding. Vi ønsker heller ikke at fageksperter skal bli fulltidskodere (med mindre de selv har veldig lyst) – men jeg har forsøkt å vise (med de rette hjelpemidlene) at gapet mellom forretning og IT kan bli litt mindre med enkle grep.  

Portrett av Vebjørn, rådgiver hos Decisive

Vebjørn Roald

Advisor

vebjorn.roald@decisive.no

Parprogrammering – Kan To Hoder Skrive Bedre Kode(r)?  

august 21, 2024

Parprogrammering er en teknikk i programvareutvikling hvor to programmerere jobber sammen på én maskin eller editor for å skrive kode. Dette er en velkjent smidig metodikk som kanskje ikke blir brukt så ofte som det burde. Tradisjonelt har det vært vanlig at den ene parten skriver koden mens den andre parten overvåker og tenker høyt, og at rollene byttes på jevnlig. Nå til dags finnes det verktøy som kan gjøre denne prosessen enklere, slik at flere kan redigere samtidig. Dette gjør også at rollene er mindre definerte, i og med at «rollebyttet» skjer mye hyppigere. Det er litt uenighet i hvilke tilfeller parprogrammering skal brukes. I dette blogginnlegget tar jeg for meg noen fordeler og ulemper ved bruk av denne teknikken.  

Fordeler ved parprogrammering:

Deling av kunnskap
Det jeg personlig mener er det viktigste punktet i parprogrammering er deling av teknisk kunnskap. Å observere og samhandle med andre i en jobb vil naturlig gi god innsikt i andres arbeidsmetoder, problemløsningsstrategier, snarveier og generell teknisk kunnskap.

Kanskje enda viktigere er delingen av domenekunnskap. Det er naturlig at to som parprogrammerer sammen har litt ulik kunnskap man tar i bruk i selve prosjektet. Mye av gevinsten ligger ikke bare i deling av hva man kan fra før, men det at flere enn én person får kunnskap om den nye koden som produseres. Flere i teamet vil ha kjennskap til mange deler av kodebasen. Dette vil gjøre det enklere i fremtiden hvis man skal håndtere koden, om det så skulle være en ny integrasjon, erstatning, feil eller endringer. Dette øker fleksibiliteten i hvem som kan jobbe med hva, og man er ikke avhengig av den ene personen som kanskje er syk, på ferie eller som har sluttet i teamet. Det blir også lettere å diskutere og sparre med noen dersom man skal jobbe med koden senere.  

Særlig nyttig er kunnskapsdelingen for dem som er nye i teamet eller i jobben. Dette gjelder teknisk kunnskap, men også særlig deling av domenekunnskap. Jeg tror et resultat av dette vil være en mye raskere onboardingsprosess. Den nyansatte får god innsikt i hvordan teamet jobber, hvilke tekniske løsninger som brukes og det blir lavere terskel for å stille spørsmål. Av egen erfaring er det lettere å få oversikt når man begynner å jobbe, lete og skrive i kodebasen. Å kun få en teoretisk innføring i prosjektet i form av powerpoint-presentasjoner eller lenker til sider på Wiki kan fort bli mye abstrakt informasjon når man er ny. Jeg tror tiden man bruker på å sitte med en som er ny i teamet vil være godt tjent inn senere.  

Standardisering og kodekvalitet
Tett samarbeid fører til at man utvikler en felles forståelse og praksis. Kodebasen vil være mer lettleselig da begge partene som deltar i produksjonen skal ha det klart for seg og man kontinuerlig tilpasser så partneren forstår. Ved å rotere partnere i forskjellige oppgaver vil man alltid kunne føre best praksis videre og alle vil lære litt av hverandre. 

Det at noen overvåker koden som skrives vil øke kodekvaliteten betraktelig. Dette kan også føre til at testfasen blir enklere, da feil vil oppdages tidligere. En studie fra NASA (1) fant at koden som ble skrevet under parprogrammering var mer lettleselig og bestod av omtrent halvparten så mange linjer som koden som ble skrevet uten parprogrammering. Dette skyldes effekten av kontinuerlig refaktorering og kodegjennomgang som naturlig oppstår når man er to.  

Sosialt samspill
Parprogrammeringen kan fremme bedre kommunikasjon mellom utviklerne i teamet. Særlig med mye hjemmekontor vil det sette terskelen lavere for å ta kontakt. Det sosiale aspektet er viktig for mange i arbeidet. I jobben som utvikler hører det med at man sitter mye for seg selv i egne tanker. Det er velkjent at sosial interaksjon er viktig for psyken og velvære. Det er også studier som viser direkte korrelasjon mellom sosial interaksjon og et teams ytelse (2). Sterkere relasjoner og bedre kjennskap til medarbeideres styrker og svakheter gjør det lettere å samarbeide og løse problemer. 

Økt fokus
Samarbeid i parprogrammering kan bidra til økt fokus. Når man diskuterer og løser et problem aktivt sammen er man ofte mer engasjert. Særlig i hjemmekontormiljøer tror jeg dette kan hjelpe til å redusere distraksjoner. Når man jobber tett med noen er det mindre sannsynlig at man blir fristet til å sjekke nyheter, lyden som plinget på telefonen eller e-posten som du kanskje ikke trengte å svare på akkurat nå.

Ulemper ved Parprogrammering:

Lavere produktivitet
Parprogrammering kan redusere produktiviteten målt i linjer kode produsert per time. Dette gjelder i stor grad på kort sikt, da det er mer tidkrevende diskusjoner, forklaringer og refaktoreringer. I situasjoner hvor rask koding og utrulling er kritisk, kan det være langt mer effektivt å jobbe alene, til tross for at koden sannsynligvis vil ha lavere kvalitet. 

Begrenset selvstendig tenkning
Det kan være at man begrenser seg selv når noen andre sitter og ser på, som kanskje har mer erfaring. En mer erfaren utvikler kan fort ta for mye kontroll og bestemme ting uten at den andre parten får tid til å tenke seg om. Dette kan hemme personlige problemløsningsevner. Personlig lærer jeg mye av å stange på et problem til jeg finner ut av det selv. Dette gir ofte en dypere forståelse av hvorfor ting fungerer som det gjør, enn at man bare vet at noe fungerer. Det er viktig å gi begge parter tid til å tenke og bidra, slik at man kan lære og vokse. Dette er ikke alltid like lett.

Mentalt krevende
Å jobbe tett med en annen person krever konstant fokus og kommunikasjon, noe som kan være mer mentalt slitsomt enn å jobbe alene. Folk trenger ulik tid til å prosessere informasjon. Konstant prat, høyt fokus og forklaringer kan være krevende, og kan føre til kortere utholdenhet. 

Tidskoordinering
Det kan i tillegg være utfordrende å synkronisere tidsplaner, spesielt når utviklere har ulike møter, private forpliktelser eller jobber på forskjellige prosjekter og tider på dagen. Dette kan føre til ineffektivitet og vanskeligheter med å finne passende tidspunkter for parprogrammering. Det kan også være viktig å ha noe annet å kunne jobbe med mellom øktene. Dessverre kan det fort bli sporadisk og ujevn tidsfordeling på de andre oppgavene du har påtatt deg. Om du for eksempel er midt i et prosjekt hvor du har parprogrammert og partneren blir syk i to dager, kan det være du må finne noe annet å gjøre. Når partneren din kommer tilbake har du da to prosjekter du er halvveis i, og må sette soloprosjektet på vent igjen. Slike koordineringsproblemer kan gjøre parprogrammering vanskelig i større skala. 

Ikke feilfritt
Selv om parprogrammering kan fjerne mange feil og heve kodekvaliteten, kan det også skape en falsk trygghet. Det er fort gjort å bli mindre kritisk til koden når man vet at den er sett over av en annen underveis. Hvis ikke partneren/observatøren har sagt noe, så stoler man kanskje på at alt er riktig. I motsetning til hvis man står ansvarlig for koden helt alene, hvor man kanskje har mindre tiltro til at alt er OK. Parprogrammering brukes i noen tilfeller som en erstatning for kodegjennomgang, men uansett hvor mange som har utviklet noe sammen tror jeg at det alltid er lurt å ha en kodegjennomgang med eksterne ferske øyne. 

Konklusjon  

Parprogrammering har både betydelige fordeler og ulemper. Det fremmer kunnskapsdeling, bedre kodekvalitet og samarbeid, men kan også være mentalt krevende og redusere produktiviteten på kort sikt. For å lykkes med parprogrammering er det viktig med god planlegging og tilrettelegging. Det viktigste er å se på det som et verktøy, ikke en «be-all end-all» universalløsning som skal tvinges gjennom i hver kodeblokk som skal produseres. Jeg tror tre gode steder å bruke parprogrammering er i produksjon av nye komponenter, i opplæring og ved endring av eksisterende komponenter hvor den ene parten ikke er kjent med domenet. Hvis man klarer å bruke parprogrammering der det er hensiktsmessig tror jeg et man kan oppnå et mer effektivt og kunnskapsrikt team. Jeg tror det er viktig å legge parprogrammeringen til sesjoner som ikke er for lange, for å unngå tapt fokus og gi rom for egen tenking.  

Men ellers er mitt svar ja. To hoder skrive bedre kode(r).  

 

(1) https://fun3d.larc.nasa.gov/papers/exploring_xp.pdf
(2) https://mpra.ub.uni-muenchen.de/117042/1/20230412WP.pdf 

Portrett av Asgeir, utvikler hos Decisive

Asgeir Aanonsen

Utvikler

asgeir.aanonsen@decisive.no

Hvordan henger rettsregler og forretningsregler sammen?

juni 13, 2024

Og bør du egentlig bry deg om forretningsregler hvis du er jurist eller jusprofessor som er opptatt av rettssikkerhet i automatiserte løsninger? Ja, mener jeg.  

Regler i lover og forskrifter er ofte upresise og mangelfulle og/eller åpner for at en virksomhet må ta noen valg om hvordan den vil praktisere reglene i sin forretningsvirksomhet. Min påstand er at forretningen (både offentlig forvaltning og private virksomheter) bør bruke konseptet forretningsregler til å dokumentere sin fortolkning og implementering av rettsreglene før reglene automatiseres i et IT-system. 

En forretningsregel er en regel som er praktiserbar og som er under forretningens styring. Regler i lover, forskrifter og styringsdokumenter fra myndighetene blir til forretningsregler i kraft av å bli fortolket og iverksatt i virksomheten. 

Men la oss begynne med begrepet rettsregel. Overraskende mange jusprofessorer har skrevet bøker om rettskildelære og innføring i juridiske emner uten å gjøre et forsøk på å definere begrepet rettsregel. Jeg mener at Erik Boe engang sa, eller skrev, noe i retning av:  

“en rettsregel er en regel som gir en rett som rettighetshaveren kan få fullbyrdet ved hjelp av rettsapparatet.” 

Boe sa det sikkert bedre, men jeg legger uansett denne definisjonen til grunn i det videre. Det sentrale her er at det finnes et utvalg av rettigheter som kan tvinges realisert med hjelp fra myndighetenes rettsapparat.  

Alle forstår med en gang at frisparkreglene på en fotballbane faller utenfor. Det samme gjelder barns leggetidsregler hjemme eller “dress code” i ditt neste middagsselskap.  

Forsikringsavtalen din om innbo kan imidlertid gi deg en rett til erstatning som du (gitt at vilkårene er oppfylt) kan få en dom på fra en domstol – som altså er en del av rettsapparatet. Forpliktelser vi tar på oss når vi inngår en avtale blir altså rettsregler med “min” definisjon.

Hva så med forretningsregler? Til forskjell fra rettsregler finnes det en lang rekke ulike definisjoner på hva en forretningsregel er. For anledningen bruker jeg definisjonen fra den åpne internasjonale standarden “Semantic of Businesss Vocabulary and Rules (SBVR)” utgitt av Object Management Group (OMG). 

 

En forretningsregel er en regel som er praktiserbar og som ligger under forretningens jurisdiksjon (1)

 

Hva skal vi forså med «forretningens jurisdiksjon»? Vi kan tenke på dette som regler som forretningen har myndighet til å endre selv. Et eksempel på en slik regel kan være åpningstider for brukere eller kunder og arbeidstid for ansatte. Likevel er det slik at diverse lover og forskrifter legger en ytre ramme for hva som vil være lovlig.   

Noen butikker skal for eksempel holde stengt på helligdager (2), og arbeidsmiljøloven (3) setter flere begrensinger for hvor mange timer en arbeidstaker skal kunne arbeide over ulike perioder.   

 

Dersom en virksomhet ønsker å opptre innenfor lovens rammer, bør forretningsreglene utformes slik at den gjør nettopp det.

 

For meg er det også et poeng at alle virksomheter har et valg. En hvilken som helst virksomhet kan velge å innføre regler og ordninger som strider med lover og regler den er underlagt. En dagligvarebutikk kan velge å holde åpent en søndag i mai for å selge hageprodukter. Virksomheter kan velge å sette opp arbeidslister og turnusordninger som strider mot begrensninger i arbeidsmiljøloven og inngåtte tariffavtaler. 

I Decisive har vi et turnussystem som gjør lovlighetssjekker på turnuslister. Automatisering av slike lovlighetssjekker krever juridisk kompetanse med tanke på å utlede rettsregelen. Juristene som utleder de ferdige tolkede reglene, bruker juridisk metode og ser på hele rettskildebildet – som for eksempel arbeidsmiljøloven, ulike tariffavtaler, etablert fast praksis og dommer med mer. 

 

For å automatisere en lovlighetssjekk bør den ferdige tolkede regelen spesifiseres på et nivå som er hensiktsmessig for både dem som kan jusen og for dem som skal implementere reglene i et IT-system. 

 

Nå er jeg over på den delen av definisjonen som går på at en forretningsregel skal være praktiserbar. Jeg tenker at praktiserbar betyr at regelen må være mulige å anvende, bruke og eventuelt utføre (4). I dette ligger det også at regelen bør være mulig å forstå for den som skal bruke regelen. 

La oss se på et konkret eksempel fra en forskrift jeg kom over som retter seg mot pensjonister med avtalefestet pensjon (AFP) som kan tenke seg å endre litt på hvor mye de jobber. Pensjonen de mottar skal endres basert på endringer i forventet inntekt. Men hvordan slår disse reglene ut for pensjonistene? Heldigvis har vi en “enkel” regel pensjonistene kan forholde seg til: 

«Dersom forventet arbeidsinntekt [min utheving] økes eller reduseres med mer enn toleransebeløpet, skal pensjonen regnes om. Selv om forventet inntekt økes eller reduseres med mindre enn toleransebeløpet, skal pensjonen likevel regnes om dersom endringen innebærer at forventet inntekt blir henholdsvis høyere eller lavere enn toleransebeløpet»  

Eksempelet er hentet fra forskrift om kombinasjon av avtalefestet pensjon for medlemmer av Statens pensjonskasse og arbeidsinntekt (pensjonsgivende inntekt), se § 4. Endringer i forventet arbeidsinntekt, andre ledd. 

Etter å ha lest bestemmelsen vet jeg egentlig ikke helt hva denne bestemmelsen betyr for en pensjonist, ei heller hvordan den skal praktiseres. Og jeg tviler på at en utvikler som skal implementere regelen i et automatisert IT system forstår det. Noe bør gjøres for å tydeliggjøre innholdet. Jeg har gjort et enkelt forsøk på å lage en forretningsregel basert på forskriftsteksten ovenfor.  

Pensjonen skal regnes om gitt at én av følgende er sant:  

  • forventet arbeidsinntekt økes med mer enn toleransebeløpet
  • forventet arbeidsinntekt reduseres med mer enn toleransebeløpet 
  • forventet arbeidsinntekt øker fra et beløp lavere enn toleransebeløpet til et beløp høyere enn toleransebeløpet 
  • forventet arbeidsinntekt reduseres fra et beløp høyere enn toleransebeløpet til et beløp lavere enn toleransebeløpet 

For meg spiller det egentlig ingen rolle om mitt lille forsøk representerer korrekt jus eller ikke. For meg er det viktigste at jeg har skrevet en forretningsregel som det er mulig for en utvikler å implementere i et automatisert beslutningssystem og for en jurist å ta stilling til om er riktig jus. (Fortrinnsvis en jurist med kompetanse på AFP.) 

Noen vil kanskje også legge merke til at forskriftsbestemmelsen ikke sier noe eksplisitt om hva som skal skje hvis endring/forventet inntekt er lik toleransebeløpet. Flere lesere gikk kanskje glipp av den uklarheten ved første og andre gangs gjennomlesning. La meg inkludere meg selv i den gruppen. Rettsregelen er altså ikke ferdig (uttømmende) tolket, og mitt forsøk på å lage en praktiserbar forretningsregel er dermed også mangelfull. Forretningsregelen SKAL være uttømmende beskrevet og “hullet” i forskriften må tettes etter vanlig juridisk metode. 

Uten å sette opp forretningsregler vil forretningen slite med å sikre uttømmende beskrivelser og komplett dekning for rettsreglene i sine automatiserte systemer for rettsanvendelse. 

Jeg mener det vil være en styrke for rettsikkerhet om jurister selv kan sette opp forretningsregelen slik jeg har gjort i eksempelet ovenfor. Min påstand er at bruk av forretningsregler øker tryggheten og skaper notoritet for at reglene som implementeres i rettslige beslutningssystemer representerer en ferdig tolket og korrekt rettsregel basert på juridisk metode. 

Om noen lurer, så har jeg brukt RuleSpeak til å beskrive forretningsregelen. RuleSpeak ligger på nivå to av tre når det kommer til spesifiseringsnivå. Neste nivå «ned» er en implementasjonserklæring.  

 

(1) Min oversettelse. Original: “rule that is practicable and that is under business jurisdiction,” se Semantics of Business Vocabulary and Business Rules, v1.5, page 98.
(2) Se helligdagsfredloven § 5. Salg fra faste utsalgssteder
(3) Se arbeidsmiljøloven § 10-8. Daglig og ukentlig arbeidsfri
(4) Able to be done or put into practice successfully; able to be used, useful,” se Semantics of Business Vocabulary and Business Rules, v1.5 page 99.
Portrett av Tobias, teamleder og rådgiver hos Decisive

Tobias Vigmostad

Rådgiver og teamleder

tobias.vigmostad@decisive.no