Framgångsrika IT projekt

dator med bild på en Saas-lösning

Framgångsrika IT projekt - Insikter och rekommendationer för en lyckad SaaS implementation

Jag avslutade nyligen ett större transformationsprojekt där vi på 12 månader implementerade två SaaS (Software as a Service) system; SAP lönesystem och Quinyx WFM system. Dessa hade både beroenden mellan sig och mot andra befintliga system i IT landskapet.

Implementationsprojektet föregicks av en strategistudie som kartlade verksamhetens långsiktiga behov samt en upphandlingsprocess (RFP) där behoven ställdes mot leverantörernas förmågor.

Vi uppfyllde våra mål med avseende på tid och kostnad samt kortsiktiga funktionella mål med implementationen. Det fanns så klart en del barnsjukdomar första månaderna men de långsiktiga verksamhetsmålen är inom räckhåll.

Innan det här projektet hade jag de senaste plus 4 åren jobbat i en annan bransch och främst med systemutveckling så det var ett tag sedan jag ansvarade för systemimplementationer. Här har jag samlat erfarenheter och rekommendationer för en lyckad systemimplementation.

1. Tydligt syfte – viktigt att man på förhand har klart för sig varför man genomför en oftast dyr investering. Hela styrgruppen och mottagande organisation måste vara införstådda med syftet som exempelvis kan vara:

i.      Öka den operativa effektiviteten

ii.      Minska kostnader

iii.      Öka kundnytta eller nöjdhet

iv.      Myndighetskrav

v.      Öka konkurrensfördelar

Detta är viktigt för att det kommer att vara vägledande för olika beslut genomgående under projektets gång SAMT för effektuppföljning efter leverans.

2. Intressent involvering – engagera och involvera nyckelintressenter, inklusive chefer, avdelningschefer, slutanvändare och IT för att säkerställa att olika perspektiv och krav beaktas. Intressenter bör även involveras i planerings-, besluts- och utvärderingsstadierna av implementeringen för att främja inköp OCH ägande av det nya systemet. På så sätt känner samtliga intressenter ett ansvar för en lyckad implementation.

I min artikel om hur man lyckas med IT projekt har jag några praktiska tips på hur man identifierar och engagerar intressenter.

 

3. Robust kravhantering – dokumentera noggrant funktionskrav (vad systemet måste göra) och icke-funktionella krav (prestanda, säkerhet, skalbarhet etc.). Detta är avgörande för att välja rätt SaaS-lösning och utforma en effektiv implementeringsplan. Denna process innebär att genomföra intervjuer, workshops och undersökningar för att fånga intressenternas behov och preferenser. Samtliga krav måste med i RFP:n.

Obs att man alltid kommer på krav även under implementationen som man missat MEN ju noggrannare man är med RFP och upphandlingsprocessen desto mindre tjafs och konflikter under implementationen. Många leverantörer använder otydliga krav för att bättra sina marginaler med change requests (CR)

"Viktigt att man på förhand har klart för sig varför man genomför en oftast dyr investering"

Händer på tangentbord

4. Val av leverantör – val av rätt SaaS-leverantör är avgörande för att implementeringen ska lyckas. Faktorer att överväga inkluderar leverantörens rykte, meritlista, finansiella stabilitet, säkerhetsåtgärder, supporttjänster och inte minst passformen mellan deras lösning och din organisations krav.

Viktigt att begära demos för samtliga intressenter och på samtliga funktioner. Spela in demos! Gör referenskontroller då tidigare kunder har bra kännedom om produkten och leverantören. Utvärdering av servicenivåavtal (SLA) kan hjälpa till att fatta ett välgrundat beslut.

Börja med upphandlingen tidigt för att inte behöva stressa igenom implementationen. Ifrågasätt leverantörens leveransplan; är det en rimlig plan eller optimistisk? En för optimistisk plan kan vara ett knep från leverantören att bättra sina marginaler med CR

Viktigt att samtliga krav är tydligt definierade i avtalet. Involvera inköp och jurister som är proffs på avtal. Det spar mycket tid och möda längre fram i projektet.

 

5. Konfiguration eller anpassning – Att balansera anpassning, alltså att skräddarsy systemet efter specifika behov och konfiguration, alltså nyttja inbyggda funktioner och inställningar är avgörande för att optimera SaaS-lösningens funktionalitet, underhållbarhet och uppgraderingsbarhet.

Obs att även om anpassning kan vara lockande för att möta unika krav, kan det öka komplexiteten, kostnaden och beroendet av leverantören. Prioritera konfigurationen när det är möjligt för att förenkla implementering och löpande hantering!

Har du gjort rätt val av leverantör så har den oftast utvecklat systemet och dess processer efter ”best practice”. I de flesta fall är det enklare och bättre att anpassa interna processer efter det nya systemet. Tänkt efter noggrant innan du beställer specialanpassningar.

 

6. Datamigrering – Planering och genomförande av en smidig datamigreringsprocess är avgörande för att säkerställa att värdefull information överförs korrekt till det nya SaaS-systemet.

Detta innebär att identifiera datakällor (befintliga såväl som framtida), rensa och transformera data, kartlägga fält, testa migreringsskript och verifiera dataintegriteten efter migrering. Ett stegvis tillvägagångssätt och beredskapsplaner kan minska riskerna i samband med datamigrering.

 

7. Integrationer – Det nya systemet ska fungera i ditt befintliga IT -landskap. Att bedöma SaaS-lösningens integrationsförmåga är avgörande för sömlös anslutning till befintliga system och applikationer inom organisationens IT-ekosystem.

API:er (Application Programming Interfaces), webbtjänster och integrationsplattformar underlättar datautbyte och automatisering av arbetsflöden mellan olika system. Prioritera lösningar som erbjuder robusta integrationsmöjligheter och stödjer industristandarder.

Obs att om inte du har koll på ditt IT – ekosystem, saknar tydlig IT- strategi eller EA-tänk så blir det svårt att kravställa på leverantören

 

Saas-lösning

8. Förändringsledning och training – det är viktigt att tillhandahålla omfattande utbildning och stöd för förändringshanteringen för att säkerställa att användaren anpassar sig och minimera motståndet mot det nya SaaS-systemet.

Utbildningsprogram bör skräddarsys för olika användarroller, inlärningsstilar och kompetensnivåer.

Dessutom kan implementering av förändringshanteringsmetoder, såsom kommunikationsplaner, intressentengagemang och feedbackmekanismer från användare, underlätta en smidig övergång. Ett knep är exempelvis att involvera användare i både krav, upphandling och främst implementationen. Dessa är sedan ambassadörer i förändringsledningen. Går det att initialt rulla ut systemet lokalt som en pilot för att samla feedback och åtgärda barnsjukdomar så ökar det acceptans och minskar anpassningstiden

9. Resurser – Implementationsprojekt är resurskrävande, inte minst för förvaltande avdelning. Säkra tillräckligt med FTE:er för att inte slita ut personalen. Börja med rekryteringen tidigt då det kan ta tid att få in personal. Rådfråga med leverantörer hur mycket resursbehovet är. De är experter på det de gör.

Genomför själva styrning av projektet med extern personal och låt intern personal fokusera på praktisk implementation då det är den bästa utbildningen. Dessa måste ju sedan ta ansvar för förvaltning. Låt dem sedan genomföra utbildningen av slutanvändare.

Ta in en testledare tidigt i projektet. Testledarens roll, ansvar och leveransförmåga är avgörande för att lyckas med implementationen. Hen måste förstå kraven, verksamhetens behov och processer samt bli expert på systemet

Förvänta dig CR. Ju större leverantör desto mindre flexibilitet och fler CR. CR processer är tråkig och mycket tidskrävande. Säkra en dedikerad resurs som ansvarar för den, förhandlar och driver frågan i mål. Större leverantörer påbörjar inte jobb på CR förrän en överenskommelse är framtagen.

Ta inte in konsulter efter pris, det kommer att straffa sig i längden!

10. Feedbackmekanism och förbättringar – Uppmuntrande feedback från slutanvändare och intressenter hjälper till att identifiera användbarhetsproblem, funktionsförfrågningar och möjligheter till förbättringar i SaaS-systemet.

Implementera feedbackmekanismer som undersökningar, förslagsrutor, användarforum och helpdeskbiljetter för att samla in input från användare vid olika kontaktpunkter. Analysera feedbackdata regelbundet och prioritera förbättringar baserat på verksamhetens påverkan och användarbehov.

De bästa tipsen kommer paketerat i 10 men andra faktorer att tänka på är data och informationssäkerhet; support och förvaltningsorganisation; KPI:er och uppföljning av effektmål; cut-over och driftsättning; risk-, backup- och recoveryplaner

Genom att ta itu med dessa kritiska faktorer på ett systematiskt och proaktivt sätt kan organisationer öka sannolikheten för en framgångsrik SaaS-implementering och maximera värdet av deras investering i det nya systemet.

Hoppas dessa förslag och rekommendationer underlättar era implementationer. Ta gärna kontakt med mig om du vill diskutera och få praktiska tips på resp punkt.

Jag har tidigare skrivit en artikel på hur man lyckas med IT projekt som jag tycker du också ska läsa.

Författare: Bashtin Nematbakhsh

Om författaren:

Bashtin är en senior program- och projektledare med gedigen erfarenhet av att driva komplexa
projekt inom digitalisering och automatisering. Projekten har omfattat både IT systemutveckling, SaaS-lösning implementation, arkitektur, datahantering och verksamhetsutveckling.

Trots titeln brinner Bashtin för ett lean/ agilt förhållningssätt och använder sig gärna av agila arbetsmetoder i sitt ledarskap för att skapa flexibilitet, skalbarhet och kostnadseffektiva leveranser. Bashtin har en gedigen bakgrund som managementkonsult hos flertalet europeiska konsulthus
som exempelvis BearingPoint.

Vill du veta mer om oss på Developers Bay?

Så tänker du kring marknadsföring för din startup eller hobbyprojekt

Så tänker du kring marknadsföring för din startup eller hobbyprojekt

Att starta företag som hobby- eller sidoprojekt och nå ut till potentiella kunder är svårt men det finns många aktiviteter inom marknadsföring att testa. I detta inlägg kommer Nils Fridlund som startade sin webbyrå, Sunbird, bredvid studier på Chalmers gå igenom vilka digitala marknadskanaler han rekommenderar i ett tidigt skede.

Inlägget utgår från att du har begränsat med tid, lite eller ingen tidigare erfarenheter av digital marknadsföring och att det inte finns någon större budget.

Första steget är en hemsida

För att jobba effektivt med digital marknadsföring behöver ni en hemsida.

Eftersom budgeten är begränsad kommer ni sannolikt inte kunna köpa exakt vilken hemsida ni vill.

Ni kan skapa en hemsida själv via en WordPress mall, WIX eller Squarespace.

Saknar ni IT-kunskaper helt och tycker allt med domäner och e-post känns skrämmande måste ni såklart ta hjälp med detta.

Det finns prisvärda lösningar såsom Fiverr och Freelancer där ni kan få in kunniga personer som vill skapa en portfolio.

Ett alternativ är självklart att köpa in en färdig hemsida av en webbyrå. Men många av de billigaste lösningarna blir inte bättre än det du gör själv.

Fördelen med att du driver skapandet av din egna hemsida är att du förstår din målgrupp och vad ni gör väldigt bra.

En hemsida kan man relativt snabbt byta. Men den grafiska profilen går inte lika snabbt att ändra då det finns ett upparbetat värde i den. Tipset är att lägga lite extra tid på den grafiska profilen och tonaliteten. 

Summering:

  • Var noga med att skapa den grafiska profilen. Den kan vara med er länge eller för alltid.
  • Försök att skapa en första hemsida själv eller ta hjälp med delar. Har du en budget för hemsida kan du självklart köpa in detta.
  • En One Pager eller väldigt simpel hemsida är bättre till en början än ingen hemsida alls.

Den första kunden är den svåraste

Om det är ett hobbyprojekt eller startup så utgår jag från att ni inte har någon form av kapital att investera i bolaget. 

Därför kommer den första kunden i allra högsta grad bistå med budget för att återinvestera i företaget.

Den första kunden är absolut svårast. Dels mentalt men också då ni saknar budget.

Jag fick in mina första kunder via familj och därefter vänner. Jag slet hårt för att göra dem nöjda då detta blev referenser till framtida potentiella kunder och gav viss betalning.

Kan ni inte använda befintligt nätverk får ni börja med organiska kanaler inom digital marknadsföring.

Organiska kanaler kan vara en väg

Mycket av den digitala marknadsföringen kräver budget då man betalar per klick till företag såsom Google eller Facebook.

Men det finns organiska kanaler där man inte betalar per klick, exempelvis sökmotoroptimering (SEO) och inlägg på sociala medier.

Det som kännetecknar båda dessa kanaler är att de brukar ta tid att nå framgång och att det kräver en del arbete under flera månaders tid innan man får genomslag.

Eftersom sociala medier är gratis och SEO kan göras på hemsidan du skapat kräver dessa inledningsvis bara tid och tålamod.

För att stå ut i bruset behöver ni på riktigt demonstrera kunskap. Ett konkreta exempel är att ni gör som följande:

  1. Ni skriver hela inlägget på er hemsida (bra för SEO)
  2. Ni postar en summering på sociala medier och länkar till inlägget (driver trafik till webbsidan)

Dessa kanaler är långsiktiga men är även för aktiva företag en bra källa för lönsam försäljning.

Efter att du fått in de första kunderna

När ni börjat få in kunder och kapital kan ni börja spendera mer.

Inledningsvis kan ni prova antingen Google Ads eller betald annonsering på sociala medier.

  • Vi rekommenderar Google Ads om det finns en tydlig definierbar tjänst som folk söker efter när de vill köpa.
  • Vi rekommenderar Facebook om det finns en tydlig målgrupp som ofta söker efter det ni erbjuder.

När trafiken ökat så pass mycket och ni har ett stadigt flöde med leads kan det vara värt att förbättra hemsidan.

En hemsida som säljer dåligt brukar vara en flaskhals för tillväxt och speglar varumärket därefter. Vår rekommendation är att kontakta en webbyrå som skräddarsyr hemsidor.

Skrivet av Nils Fridlund, grundare av Sunbird som är en webbyrå i Malmö. Nils har jobbat med skräddarsydda hemsidor i WordPress, SEO och Google Ads i över 10 år. Första åren som frilansare bredvid studier.

Vill du veta mer om oss på Developers Bay?

10 reflektioner om marknadsläget för frilansare inom IT just nu!

10 reflektioner om marknadsläget för frilansare inom IT just nu!

Vi har tagit oss tiden att reflektera över hur konsultmarknaden för frilansare inom tech faktiskt ser ut just nu samt vad som är de största utmaningarna och trenderna. 

Här kommer 10 reflektioner baserat på våra egna erfarenheter och data från våra system:

1. Lönsamhet är fortsatt i fokus
Vi ser att färre personer förväntas göra mer, team managers får större team och man vill få ut mer effekt av färre resurser. Det görs färre nya satsningar och mer fokus läggs på core business där bevisad lönsamhet finns. 

2. Myndigheterna verkar inte bli fredade 2024
Myndigheter tog in flest konsulter tidigare i år, men där ser vi en stor skillnad. Mindre anslag, nedskärningar och förändringar intern leder till minskat intag av konsulter. 

3. Hög konkurrens på resursroller
Det är hög konkurrens bland react utvecklare, backend utvecklare och andra roller utan tydlig nisch. De mer generiska rollerna är otroligt konkurrensutsatta. Detta på grund av att beställarna har mycket att välja på. För att ge perspektiv på det så har vi ca 50-60 kandidater per uppdrag för dessa roller. 

4. Nya uppdrag får pressade priser
Dom som sitter på sina uppdrag sedan 2021-2022 och blir förlängda har inte blivit utsatta för prispress märkbart medan de som ska ut på nya uppdrag nu upplever prispressning i större utsträckning. Skillnaden beror på att de som redan har varit på företaget en tid är insatta i rollen och bolaget och värderas högre pga. detta. 

5. Fortsatt låg personalomsättning
De som är anställda är mindre benägna att testa marknaden och hitta nytt uppdrag. Finns färre uppdrag att välja mellan och anställda tenderar att sitta kvar. Det i sin tur öppnar upp för ännu färre lediga uppdrag

6. Rekrytering har visat sig bli svårt
Rekrytering har visat sig vara svårare för företagen än vad de först trodde. Man har underskattat det faktum att alla skulle ut och rekrytera, utan att alltid ha resurser och andra förutsättningar på plats för att hantera förväntningarna. Många kunder har därför tänkt om och börjat snegla på konsultlösningar vid befintliga behov. 

7. Bank, försvar, energi och AI är starka områden
Dessa områden går fortsatt bra och är stabila då de får större budgetar och satsningar på ny teknik görs. AI är något som genererar nya satsningar och startups just nu och mycket pengar läggs där. Företag har dock svårt att veta VAD dom ska göra inom AI, det är en osäkerhet där man kan behöva vägledning. Inte självklart hur och vem som ansvarar för AI-kompetens hos företag. Därför blir det nödvändigt att ha en AI-strategi. Innovation och Greenfield trendar generellt. Många personer som blivit tvungna att lämna sina trygga anställningar får möjlighet att förverkliga sina drömmar och duktig kompetens finns tillgänglig för detta.

8. Punktinsatser / definierade projekt blir vanligare
Man ser på konsulter ur ett projektperspektiv snarare än en resurs. När man har begränsad budget så väljer man att investera i konsulter för precision. Man tar in topptalanger för specifika projekt. 

9. Cloud / Infra / DevOps och Data Engineering är eftertraktade
Den typen av roller är svårare att rekrytera till eftersom att de inte är lika vanligt förekommande. Därför fortsatt högt eftertraktade. Även transformationsprojekt i legacy miljöer ser ut att bli konsult tungt då den kompetensen sällan finns inhouse och det finns ej tid att rekrytera. Dessa projekt är oftast tidskänsliga och det behöver gå fort. 

10. Högre krav på konsulter
Definitionen av en senior konsult har förändrats, nu förväntas 10+ år snarare än 6-7 år. Beställarna kan ställa de kraven för att de faktiskt kan hitta kandidaterna just nu. En annan sak som vi märker är att beställare förväntar sig att konsulten även har affärsförståelse och inte bara teknisk kompetens. Kommunikation och kunskapsspridning blir också allt viktigare för kunden och att det finns ett bestående värde även efter avslutat uppdrag. Det är även värdefullt att själv kunna hitta behov i organisationen och sånt som kunden själv inte har tänkt på. En sådan sak kan vara avgörande för hur långt uppdraget blir. 

Vi ser också att branschspecifik erfarenhet blir allt viktigare och det är viktigt att framhäva för att bli konkurrenskraftig vid intervju. Det kanske också vara en fördel att vara öppen för att återvända till tidigare kunder. Vi ser också högre krav på hybridlösningar som är 1-3 dagar på kontoret. 

Vad kan man då göra och tänka på i en mer utmanande tid som frilansare inom IT?

  •  Här kommer några av våra bästa tips:
    Sticka ut med din kunskap – skapa mervärde
  • Se till att vara up-to-date
  • Ha tydlig bild hur du kan hjälpa kunden med konkreta exempel
  • Var konsultmässig då kraven ökar
  • Lösningsorienterad
  • Rådgivande
  • Förståelse för förutsättningar
  • Flexibilitet gällande remote arbete vs arbete på kontor
  • Anpassa CV:t till olika roller
  • Intervjuträning
  • Var flexibel med priset
  • Ha en tät dialog med din kund och förmedlare


Hoppas du fann dessa reflektioner och tips värdefulla. Du kan alltid kontakta oss på Developers Bay vid frågor!


Sammanställningen är gjort av Katarina Lind (konsultansvarig) och Lubomir Struwe (säljansvarig) på Developers Bay (december 2023).

Vill du veta mer om oss på Developers Bay?

How to pick an infrastructure as code language

How to pick an infrastructure as code language

You can use several languages today to define cloud infrastructure as code. Sometimes, you have a range of languages to choose from, even for a single tool.

So what language is the right choice? My intention with this article is to give you some guidance on how to pick the right language for you.

This text intentionally focuses on language choice, and not on tool features. You will still need to consider tool features, and I will briefly touch on some of these considerations, but not do a full-blown evaluation, since that would be a too large scope.

With that in mind, here are some aspects we will look at in terms of language choice:

  • Existing infrastructure code
  • Consider your target audience
  • Reduce cognitive load
  • Speed of feedback loop
  • Security considerations
  • Compliance and regulation requirements
 

Existing infrastructure code

If you inherit a lot of infrastructure already defined with some language and tool, it may be difficult to find business value to change this to something entirely new. This will need to be weighted in when choosing a language, and even more if choosing a new tool.

Do not just jump in headfirst to convert the code to something newIt is vital to understand the reasons behind the choices for the current language and tools. This is true for any non-trivial amount of infrastructure code.

I have myself been tempted on multiple occasions to switch to something I thought would be better. However, sometimes, I backed down from that after considering several points outlined below. In some other cases, we gradually changed, and that turned out to be a pretty good choice then.

If you have an infrastructure that is set up manually, aim to import that so you can manage these resources with infrastructure as code. You need to evaluate your tool choices and see what languages it will support to generate code for.

For retaining existing infrastructure as code, you will also need to consider the ability to integrate with other tool solutions:

  • CloudFormation and AWS CDK are in the same group of tools and integrate reasonably well. They do not integrate well with other tool groups (Terraform/CDKTF and Pulumi)
  • Terraform and CDKTF is in the same group of tools and has some (read) integration with CloudFormation, and thus indirectly with AWS CDK.
  • Pulumi has some (read) integrations with both Terraform and CloudFormation, and thus indirectly with AWS CDK and CDKTF

This is for integration with existing provisioned infrastructure, e.g. referencing resources in existing stacks or state storage. A more tool agnostic approach is possible as well. For example, by sharing resource references via AWS Systems Manager Parameter Store, then the underlying tools that provisioned a resource do not matter.

Consider your target audience

Who will define infrastructure? Are the application developers also responsible for the application infrastructure? Or is there a platform or operations team that handles the infrastructure?

Are there multiple groups, e.g. application developers handle “just enough infrastructure” and the more complicated parts by a platform team?

There may not be a single choice here, as the needs for each group to work efficiently with the infrastructure definitions may be different.

An application development team may work better with a different language than a platform team, since the way of working and tools used may be different.

Do not just jump in headfirst to convert the code to something new

Reduce cognitive load

Do you have an application development team that works with Java, and also will be responsible for application infrastructure? Then it may make sense to pick Java to define the infrastructure, as that may reduce the cognitive load – the amount of things you need to keep track of and handle to do the work.

If the application team does very little or no infrastructure, and a separate team handles the infrastructure which does not work with Java regularly, then a different choice may be better.

If an application development team handles some of the infrastructure, and another team the rest, then each team might benefit from different language choices.

When we talk about a cognitive load for different languages, it is not just the complexity of the language itself, but also the runtime environment and the surrounding tooling.

Which tools should we use for Python package management, virtual environments? What linters and test tools to use with Typescript, and what are the configuration settings for each of those? Are we using Gradle or Maven with Java? Should we runt terragrunt with terraform, and are we setting up tflint, tfsec or some other tools? Do we use Sceptre with CloudFormation?

If a language is not used daily, then the cognitive load may be significant each time you need to do something. In these cases, it is important to consider the languages themselves, the runtimes and the surrounding tools. Also, not just the happy day scenarios, but when things go wrong as well.

If you work with a certain language daily, then the additional cognitive load will not be that much, even if the language and tooling setup may be complex. You already manage that.

Note that reducing cognitive load does not mean you should always pick languages and ecosystems that a team already knows. If you expect the team to work with a language daily or with high frequency, it could be ok to use a new language and ecosystem. It is ok to learn something new, as long as you keep using it regularly.

 

Cognitive load and complexity of infrastructure

The cognitive load aspect load aspect may also come into play for the actual infrastructure definitions as well.

If you work on infrastructure that changes with about the same frequency as the application itself, then the added cognitive load may not be that high.

There may be infrastructure that does not change much, like virtual networks and VPN connections. Each time you actually need to change something here, there may be some additional cognitive load if you do not work with the networking daily. Thus, the life cycles of the infrastructure may affect the cognitive load.

What does this mean? It means static infrastructure that seldom changes benefit from languages that are easy to read and get into, even if you are not that familiar with the code. It also means that the language does not need to support complex logic, and a strictly declarative language may be just fine.

Infrastructure definitions which changes more often and may have more dynamic definitions, benefit from more expressive languages. The underlying representation can still be declarative.

In fact, many of the tools that support languages that are not strictly declarative, like AWS CDKCDKTFPulumi and CDK8s, generate declarative definitions under the hood.

But for reading and understanding the infrastructure definitions, a declarative language may be better for static infrastructure, which does not need any complex logic to be defined.

Of course, supporting multiple languages may add complexity as well.

 

Cognitive load and package/module management

Most infrastructure-as-code tools have some sort of module/package management support, to handle re-use and defining suitable abstraction layers for the users of a module/package.

Using those is part of the expected for each language choice. However, if you decide to support multiple languages with packages, then you will add cognitive load for the package maintainers.

For example, if you want to support Typescript, you typically need to deal with npm, with Python you deal with PyPi, Java you use Maven, C# you use NuGet, etc.

 

Cognitive load and (idiomatic) language use

If a tool support multiple languages, that means there are some restrictions on packages and/or code to work with all supported languages.

That can also be more apparent if you pick a language that may not be officially supported or have first class support, but have a supported runtime – such as the JVM or .NET runtimes.

Any such deviations might add to the cognitive load as well. Of course, the extent to which a language is used with the specific tool choice is a consideration as well. How easy is it to get help and find examples for a particular language?

 

Cognitive load across tools

Mixing multiple tool and tool families is certainly possible, but may add cognitive load as well, regardless of language. It is somewhat fuzzy at times.

  • CloudFormation and AWS CDK is in the same family in that the underlying representation used is CloudFormation, although AWS CDK introduces a few new concepts in the mix
  • Terraform and CDKTF in the same family in that the underlying representation used is Terraform, although there are a few new concepts with CDKTF also.
  • All CDK tools (AWS CDK, CDKTF, CDK8s) share some common elements as well
  • There are some similarities across all tools that use programming languages as well, including most of the supported languages
  • Both CDKTF and Pulumi have some support to use AWS CDK components in the code
 

Speed of feedback loop

It is slow to provide infrastructure, much slower than just starting an application most times. This is something to keep in mind.

Mostly, the speed of the language execution itself is not a bit factor. It is often more about the speed of the tool itself rather than the language used.

I did some experiments with AWS CDK and the time to generate the underlying CloudFormation was about the same regardless if I used Go, Typescript or Python for example.

Since there is an extra step to generate CloudFormation, or Terraform with CDKTF, there is some extra time added compared to using CloudFormation or Terraform directly. The extra time here may not be a good enough reason to avoid it.

Good type checking and tooling support in IDEs or editors can shorten feedback loop, if that exists for a language. This is typically an advantage for many regular programming languages.

Security considerations

Is the use of a particular language, its runtime and associated tooling secure? More versatile languages and tooling comes with additional risks to expose the infrastructure definitions to troublesome pieces of code.

How trustworthy are any imported packages/modules and are they locked to a specific release? Do you require fetching data from outside to import when you build your infrastructure?

What packages should be safe to import and use? Should there be guidelines and checks for how a specific language is used and what can be imported?

Again, the language runtime and the surrounding ecosystem are important to review and decide on safe usage patterns.

Compliance and regulation requirements

Your line of business may have compliance requirements that will affect language and language ecosystem choices. This is something to look at, in particular if you are introducing an entirely new language and ecosystem to the business.

Any issues are more likely around the ecosystem and tooling and practices around these than the language itself.

This also includes any potential licensing issues, although this is more likely to be a potential issue for any specific tooling or 3rd party packages used than for the language itself. Again, this may require some extra effort in particular if you are introducing a new language and ecosystem to the business.

 

An example

Setting

Let us take a fictional example. The company myexample.com has about a dozen development teams and a platform team. There are multiple solutions and services these teams work on. Some services are built with Typescript, others are built with Go.

Each development team handles infrastructure close to the application solution, e.g. services as AWS Lambda, DynamoDB, ECS Fargate, etc. They have separate accounts for development, test and production in most cases, although some environments have shared networking as well.

Networking setup, IAM, backups and baseline security setup are handled by the platform team, and they also have a mix of people that work with the infrastructure setup daily, as well as more seldom.

Teams use a mix of Serverless framework, CloudFormation and a bit of AWS CDK for their infrastructure and application deployment. There are also resources that have been set up manually. For AWS CDK, there are infrastructure resources set up in Typescript and Python.

Some teams have automated deployments, some have manual deployments.

 

Choice example

Since development teams work daily with Typescript and Go, it makes sense that those that use AWS CDK with Typescript can continue with that. It may make sense to use Go also for team infrastructure, if there are teams that use Go daily, but not Typescript.

Right now AWS CDK with Python may be an outlier, and potentially drop that and look at converting to Go or Typescript.

Platform team may benefit from having relatively static infrastructure in a more declarative format, e.g. CloudFormation YAML, Terraform HCL, or Pulumi YAML (or CUE). When a programming language would be used, one of Typescript or Go would be likely candidates. Go’s ecosystem and tools may be simpler to grasp and keep control of, and fewer 3rd party dependencies. But this would also depend on other tasks that the platform team is doing.

Technically AWS CDK, CDKTF and Pulumi all support Go and Typescript. If the platform team would build re-usable components or modules for the other teams, they would need to support multiple languages. For AWS CDK, that would mean in practice to write these components/modules in Typescript – or CloudFormation with some Typescript. It could be in HCL with some typescript or all in typescript. For Pulumi it should be possible with any of the languages.

I have avoided picking any specific tools here, since there would be a need to more in depth on the situation at myexample.com.

 

Summary

In this article I have tried to point to some considerations when picking a language for infrastructure as code, without going into much specifics for each tool.

Most of the text deals with cognitive load, which I think most times is not fully appreciated for the intended target audience of the infrastructure definition work.

One tool or language does not fit all, and sometimes it may be better to have a limited selection rather than a single choice, or a total free-for-all.

For example, I have worked with a few projects where AWS CDK using Typescript has been the tool and the language of choice for everyone. Sometimes that worked reasonably well, in others it did not work out. The threshold to work with the language and ecosystem, as well as the underlying tools, were too high for some people, and the maintenance suffered because of that.

Do you have any experiences yourself with language choices for infrastructure-as-code? What are your thoughts?

 

 

Vill du veta mer om oss på Developers Bay?