<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://www.amino.dk:443/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="da"><title type="html">Michael og Søren fra Visma Dinero </title><subtitle type="html">Vores navne er Michael og Søren. Vi arbejder til daglig i Dineros udviklingsafdeling -
henholdsvis som leadudvikler og infrastuktur-mand.</subtitle><id>https://www.amino.dk:443/blogs/michaelogsoeren/atom.aspx?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss-feed</id><link rel="alternate" type="text/html" href="https://www.amino.dk:443/blogs/michaelogsoeren/default.aspx?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss-feed" /><link rel="self" type="application/atom+xml" href="https://www.amino.dk:443/blogs/michaelogsoeren/atom.aspx?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss-feed" /><generator uri="http://communityserver.org" version="4.1.40407.4157">Community Server</generator><updated>2023-07-06T07:00:00Z</updated><entry><title>Softwareudvikling i Dinero</title><link rel="alternate" type="text/html" href="/blogs/michaelogsoeren/archive/2023/07/06/softwareudvikling-i-dinero.aspx" /><id>/blogs/michaelogsoeren/archive/2023/07/06/softwareudvikling-i-dinero.aspx</id><published>2023-07-06T06:00:00Z</published><updated>2023-07-06T06:00:00Z</updated><content type="html">&lt;p class="p1"&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;span class="s3"&gt;I Dinero arbejder vi konstant p&amp;aring; at forbedre vores software-udviklingsprocesser, s&amp;aring; vi kan levere bedre og mere p&amp;aring;lidelige l&amp;oslash;sninger til vores kunder.&lt;/span&gt;&lt;/p&gt;
&lt;p class="p1"&gt;&lt;span class="s3"&gt; I dette ekspertindl&amp;aelig;g vil vi dykke lidt ned i nogle af de metoder og teknikker, vi anvender i vores udviklingsproces, herunder GitHub Flow, automatiserede tests, microservices, og hvordan vi kan deploye op til 50 gange om dagen.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class="p3"&gt;&lt;span class="s3" style="font-size:large;"&gt;GitHub Flow g&amp;oslash;r det nemt at samarbejde og levere kode sikkert&lt;/span&gt;&lt;/h2&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;GitHub Flow er en simpel og effektiv arbejdsgang for softwareudvikling, der g&amp;oslash;r det nemt for udviklere at samarbejde og levere kode hurtigt og sikkert. Hos &lt;span class="s5"&gt;Dinero&lt;/span&gt; har vi valgt at bruge GitHub Flow af flere grunde:&lt;/span&gt;&lt;/p&gt;
&lt;ul class="ul1"&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;&lt;b&gt;Enkelhed og forst&amp;aring;elighed:&lt;/b&gt; GitHub Flow er let at forst&amp;aring; og f&amp;oslash;lge, hvilket g&amp;oslash;r det nemt for nye udviklere&lt;/span&gt;&lt;/li&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;&lt;b&gt;Hurtig feedback:&lt;/b&gt; Med GitHub Flow kan udviklere hurtigt f&amp;aring; feedback fra deres kolleger gennem pull requests og automatiserede test. Det sikrer, at kode er gennemg&amp;aring;et og godkendt, f&amp;oslash;r den merges og deployes til produktion&lt;/span&gt;&lt;/li&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;&lt;b&gt;Sikkerhed og stabilitet: &lt;/b&gt;GitHub Flow g&amp;oslash;r det muligt for udviklere at arbejde i isolerede branches og teste deres &amp;aelig;ndringer i et sikkert milj&amp;oslash;, f&amp;oslash;r de merges til main branchen. Det reducerer risikoen for fejl og ustabilitet i produktion&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;&lt;br /&gt;N&amp;aring;r en udvikler vil lave en &amp;aelig;ndring i Dinero, skal de blot tr&amp;aelig;kke den nyeste main&amp;nbsp;branch ned og g&amp;oslash;re f&amp;oslash;lgende:&lt;/span&gt;&lt;/p&gt;
&lt;ul class="ul1"&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;Oprette en ny branch ud fra main&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;Lave sine &amp;aelig;ndringer i den nye branch&lt;/span&gt;&lt;/li&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;Pushe branchen&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;Foresp&amp;oslash;rge pull request fra en eller flere kolleger&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;Lave eventuelle &amp;aelig;ndringer eller, hvis godkendt, merge med main branchen&lt;/span&gt;&lt;/li&gt;
&lt;li class="li4"&gt;&lt;span class="s3"&gt;F&amp;aelig;rdig &amp;ndash; nu er koden klar til deployet&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p class="p5"&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;P&amp;aring; GitHub rapporterer vores CI/CD pipeline selv ind, om alt er g&amp;aring;et gr&amp;oslash;nt (build + test) &amp;ndash; p&amp;aring; den m&amp;aring;de kan de selv nemt se, om det hele er, som det skal v&amp;aelig;re, og merge den med ro i maven uden faktisk at bes&amp;oslash;ge vores build server.&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Vi opfordrer generelt alle udviklere i Dinero til at holde deres branches og pull requests sm&amp;aring;. F&amp;aring; &amp;aelig;ndringer g&amp;oslash;r det nemmere for reviewere og eventuelle testere af det p&amp;aring;g&amp;aelig;ldende pull request at overskue &amp;aelig;ndringerne. Det er ogs&amp;aring; nemmere at lokalisere, hvilke &amp;aelig;ndringer eventuelle fejl er opst&amp;aring;et i.&lt;/span&gt;&lt;/p&gt;
&lt;p class="p6"&gt;&lt;span class="s6"&gt;Du kan l&amp;aelig;se mere om GitGub Flow her: &lt;a href="https://docs.github.com/en/get-started/quickstart/github-flow"&gt;&lt;span class="s7"&gt;https://docs.github.com/en/get-started/quickstart/github-flow&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span class="s3"&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p6"&gt;&lt;span class="s3"&gt;&lt;a href="https://www.amino.dk:443/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/michaelogsoeren/8524.Sk_E600_rmbillede-2023_2D00_06_2D00_14-kl.-11.42.01.png"&gt;&lt;img src="https://www.amino.dk:443/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/michaelogsoeren/8524.Sk_E600_rmbillede-2023_2D00_06_2D00_14-kl.-11.42.01.png" border="0" alt="" /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p6"&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h2 class="p3"&gt;&lt;span class="s3" style="font-size:large;"&gt;Feature toggles bruger vi is&amp;aelig;r ved st&amp;oslash;rre features&lt;/span&gt;&lt;/h2&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Feature toggles er en teknik, der g&amp;oslash;r det muligt at skjule, aktivere eller deaktivere bestemte funktioner i en applikation uden at &amp;aelig;ndre koden.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Du har m&amp;aring;ske h&amp;oslash;rt udtrykket; &amp;ldquo;Vi ligger skinnerne mens vi k&amp;oslash;rer toget&amp;rdquo;, men med feature toggles kan vi l&amp;aelig;gge et helt nyt spor, uden nogen bem&amp;aelig;rker det, og f&amp;oslash;rst n&amp;aring;r det er testet, tager vi det nye spor i brug.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Vi bruger typisk feature toggles ved st&amp;oslash;rre features, hvor vi &amp;oslash;nsker at kunne tilf&amp;oslash;je &amp;aelig;ndringer og forbedringer l&amp;oslash;bende. De l&amp;oslash;bende &amp;aelig;ndringer g&amp;oslash;r det muligt at holde pull request sm&amp;aring; og hurtige og, vigtigst af alt, kan udvikleren og product f&amp;aring; hurtig feedback.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;N&amp;aring;r product hele tiden kan f&amp;oslash;lge med i given feature, mindsker behovet for estimater og sp&amp;oslash;rgsm&amp;aring;l om, hvorn&amp;aring;r en given feature er klar.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Vi starter typisk med at tilf&amp;oslash;je vores egne testfirmaer til en ny feature toggle. Herefter tilf&amp;oslash;jes rigtige firmaer, som har &amp;oslash;nsket at teste, og til sidst udrulles det til alle.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Hvis det skulle vise sig, at der har sneget sig en fejl ind, kan vi hurtigt slukke for feature toggles, indtil fejlen er rettet. Den l&amp;oslash;bende udrulning g&amp;oslash;r ogs&amp;aring;, at vi kan f&amp;oslash;lge med i performance og sikre, at det ikke belaster systemet, efterh&amp;aring;nden som der kommer flere testere p&amp;aring;.&lt;/span&gt;&lt;/p&gt;
&lt;p class="p5"&gt;&lt;/p&gt;
&lt;p class="p7"&gt;&lt;span class="s3"&gt;&amp;nbsp;&lt;a href="https://www.amino.dk:443/cfs-file.ashx/__key/CommunityServer.Blogs.Components.WeblogFiles/michaelogsoeren/8540.Sk_E600_rmbillede-2023_2D00_06_2D00_14-kl.-11.42.09.png"&gt;&lt;img src="https://www.amino.dk:443/resized-image.ashx/__size/550x0/__key/CommunityServer.Blogs.Components.WeblogFiles/michaelogsoeren/8540.Sk_E600_rmbillede-2023_2D00_06_2D00_14-kl.-11.42.09.png" border="0" alt="" /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2&gt;&lt;span class="s3" style="font-size:large;"&gt;Automatiserede test er en vigtig del af udviklingen&lt;/span&gt;&lt;/h2&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;I Dinero g&amp;oslash;r vi meget ud af vores automatiserede test. Det er en vigtig del af vores udvikling for, at vi kan udgive l&amp;oslash;bende, uden det g&amp;aring;r ud over kvaliteten og stabiliteten af vores applikation.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Vi bruger Continuous Integration (CI) og Continuous Deployment (CD) for at automatisere forskellige testtyper i vores pipeline, herunder unit tests, integration tests og end-to-end-test.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Det hele starter hos udvikleren, hvor testene bliver skrevet og herefter k&amp;oslash;rt manuelt. I nogle services kan man k&amp;oslash;re alle tests inden for f&amp;aring; sekunder, mens det i andre services tager l&amp;aelig;ngere tid, s&amp;aring; her k&amp;oslash;rer man kun de mest relevante.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;N&amp;aring;r en branch bliver pushet til GitHub, begynder alle test straks at k&amp;oslash;re for den givne branch. Det vil hurtigt afsl&amp;oslash;re fejl og synligg&amp;oslash;re noget, man m&amp;aring;ske har overset.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;P&amp;aring; branchen bliver der som udgangspunkt kun k&amp;oslash;rt unit test og integration test, men ved st&amp;oslash;rre &amp;aelig;ndringer i funktionalitet eller udseende har vores udviklere mulighed for at f&amp;aring; en fuld kopi af Dinero op at k&amp;oslash;re i et lukket testmilj&amp;oslash;.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;I det tilf&amp;aelig;lde vil der ogs&amp;aring; blive k&amp;oslash;rt end-to-end-test, og det er ogs&amp;aring; muligt at tilg&amp;aring; milj&amp;oslash;et for qa-testere (ved behov for manuel testing). Som en lille ekstra sikkerhed er vores pipeline skruet sammen til at detektere &amp;aelig;ndringer i frontend og i de tilf&amp;aelig;lde automatisk at k&amp;oslash;re end-to-end-test.&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;N&amp;aring;r en udvikler merger sine &amp;aelig;ndringer i main branchen, k&amp;oslash;rer alle unit test igen, samtidig med at &amp;aelig;ndringerne deployes til staging-milj&amp;oslash;et. N&amp;aring;r den del er overst&amp;aring;et, k&amp;oslash;res der end-to-end-test ovenp&amp;aring; staging-milj&amp;oslash;et.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Hvis alle tests k&amp;oslash;rer gr&amp;oslash;nt her, ryger &amp;aelig;ndringerne automatisk i produktion. Denne proces tager et sted mellem 45 - 55 minutter for vores monolith og 15 minutter for microservices. Vi har s&amp;aring; vidt muligt fors&amp;oslash;gt at k&amp;oslash;re alle test parallelt for at minimere k&amp;oslash;retiden s&amp;aring; meget som muligt, men med 6.000 test tager det lidt tid. &lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;N&amp;aring;r &amp;aelig;ndringer automatisk bliver udgivet til produktion, er det vigtigt, at man ogs&amp;aring; automatisk f&amp;aring;r besked, hvis noget g&amp;aring;r galt alligevel p&amp;aring; trods af test m.m. Her bruger vi v&amp;aelig;rkt&amp;oslash;jet, Data Dog, som overv&amp;aring;ger systemet og giver besked p&amp;aring; Slack, hvis der kommer fejl eller l&amp;aelig;ngere svartider.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p2"&gt;&lt;span class="s3"&gt;Hvis uheldet skulle v&amp;aelig;re ude, har vi mulighed for enten at rulle den p&amp;aring;g&amp;aelig;ldende &amp;aelig;ndring tilbage eller lave et hurtigt fix som efterf&amp;oslash;lgende udgives.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h2 class="p3"&gt;&lt;span class="s3" style="font-size:large;"&gt;Vil du vide mere?&lt;/span&gt;&lt;/h2&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Softwareudviklingsprocessen i Dinero bygget op omkring enkle, men effektive, arbejdsgange. Vi tror p&amp;aring;, at en agil og kontinuerlig udviklingsproces med et solidt fundament af automatiserede tests og en gennemsigtig arbejdsgang, som GitHub Flow, er n&amp;oslash;glen til at skabe bedre og mere p&amp;aring;lidelige l&amp;oslash;sninger for vores kunder.&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Vi str&amp;aelig;ber efter at holde os opdateret med de nyeste teknologier og metoder inden for softwareudvikling og vil fortsat investere i vores udviklingsteam og infrastruktur for at sikre, at vi altid leverer det bedst mulige produkt til vores kunder.&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Hvis du vil vide mere om, hvordan vi arbejder i Dinero, kan du smide en kommentar til indl&amp;aelig;gget, eller hvis du er interesseret i at blive en del af vores team, er du altid velkommen til at kontakte os eller bes&amp;oslash;ge os p&amp;aring; &lt;a href="https://dinero.dk/jobs/"&gt;&lt;span class="s5"&gt;https://dinero.dk/jobs/&lt;/span&gt;&lt;/a&gt; for at se aktuelle job&amp;aring;bninger.&lt;span class="Apple-converted-space"&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p class="p4"&gt;&lt;span class="s3"&gt;Tak, fordi du tog dig tid til at l&amp;aelig;se om vores softwareudviklingsproces. Vi h&amp;aring;ber, det gav et lille indblik i, hvordan vi arbejder med softwareudvikling i Dinero.&lt;/span&gt;&lt;/p&gt;&lt;div class="clearBoth"&gt;&lt;/div&gt;&lt;img src="https://www.amino.dk:443/aggbug.aspx?PostID=1895814&amp;utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=rss-feed" width="1" height="1"&gt;</content><author><name>Michael og Søren fra Dinero</name><uri>https://www.amino.dk:443/members/Michael-og-S_F800_ren-fra-Dinero/default.aspx</uri></author></entry></feed>