Etter å ha lest leserinnlegget til Erik Wendel er jeg usikker på om jeg skal le eller gråte.
Jeg bestemte meg for at det beste jeg kunne gjøre var å skrive et motsvar på hvorfor jeg er så uenig i denne artikkelen.
TL;DR: Scroll til bunn av artikkelen.
Innlegget: - Vi må bort fra spesialiserte mobilutviklere!
Her bommer du virkelig, Erik!
Som mobilutvikler, seniorkonsulent, mobilkonferanse-arrangør, samt erfaring som foreleser og fagansvarlig for mobilutviklingslinje på høyere utdanning, må jeg si at jeg er sjokkert over innlegget.
Det er ikke noe nytt at folk stadig angriper native mobilutvikling, dette har jeg sett utallige ganger tidligere. Det er stort sett den samme regla om at hvorfor vi skal ta oss bryet med å lage native mobilapper når det finnes kryssplattform rammeverk. Jeg kommer tilbake til argumenter for og imot dette lenger ned i artikkelen.
Nei, det jeg er overrasket over er at en erfaren seniorkonsulent som jobber tett innenfor bransjen, og har gjort det i mange år, kan mene at spesialisering er feil!
Motsatt av hva bransjen trenger
I et stadig voksende og behovsøkende marked ser vi at ønsket for spesialkompetanse øker kraftig - akkurat som man skulle forvente i en bransje som blir større.
Teknologier blir mer spisset, fagområder blir mer definert og det springer ut flere og flere unike grupper som ønsker å utbedre sin kompetanse ytterligere innenfor et spesifikt felt.
Jeg selv syns mobilverdenen suser fort avgårde, og selv med full jobb, start-up på siden og hobbyprosjekter er det vanskelig å følge med på all utvikling som skjer innenfor mitt lille domene (mobilutvikling).
Trenden som har oppstått med såkalte «fullstack-utviklere» er egentlig motsatt retning av hva jeg tenker bransjen faktisk trenger. Jeg tror dette uttrykket kommer fra rekrutterere som ønsker å treffe et bredt spekter av mulige kandidater, men også at folk ønsker å kunne si at de kan alt og dermed er veldig verdifulle.
Jeg ser på uttrykket litt som et tegn på at man egentlig ikke har noe spesialisering, og dermed også heller ikke er spesielt flink i noe spesifikt (en generalisering som sikkert er veldig feil i mange tilfeller).
«Jeg forventer heller ikke at mine kolleger som koder C# skal kunne diskutere detaljer i Swift eller Kotlin med meg.»
Absurd å forvente
Når det kommer til generell kompetanse, forventer jeg mye av mine senior-kolleger. Vi må kunne diskutere fordeler og ulemper med for eksempel arkitektur-former, kodestruktur, tekniske løsninger, prosjektstyring og -gjennomførelse, for å nevne noe, men alt dette på generell basis.
Dette ser jeg på som en selvfølge fra mennesker som er interessert i faget og som har mange års erfaring, men jeg forventer ikke at en backend-utvikler skal kunne utvikle gode frontend-løsninger!
Jeg forventer heller ikke at mine kolleger som koder C# skal kunne diskutere detaljer i Swift eller Kotlin med meg, og i hvert fall ikke at de skal kunne utvikle gode løsninger innenfor disse teknologiene! Dette er etter min mening absurd å forvente, da de ikke jobber med verken språket eller teknologiplattformen.
For å dra anekdoten langt: Hvis du skal bygge et hus, så ønsker du ikke kun å ha arbeidere som gjør alt fra maling, snekring, montering, tømring, muring, rørleggerarbeid, elektrikerarbeid, prosjektledelse, arkitektur og økonomi, alle sammen?
Dette er selvfølgelig satt på spissen, men det setter et tydelig bilde på hvorfor det Erik Wendel skriver er så grunnleggende feil.
Norske utviklere er lei av folk som pitcher app-idé: - Like greit å lage den selv
Hva med kvalitet?
Som er en fin overgang til mitt andre punkt på hvorfor jeg er mildt sjokkert over leserinnlegget: Wendel mangler i sin helhet å nevne KVALITET som et argument i sin artikkel.
Han argumenterer flere ganger på hvordan ting blir «dyrt» og «tar lang tid», men hva med kvaliteten som leveres? Er ikke dette en ting som vi i en stadig voksende bransje må være enda mer oppmerksomme på enn før?
Jeg har med mine snart 10 års erfaring aldri møtt en kunde som utelukker kvalitet i sin vurdering av prosjektdeltakere. Heller motsatt har jeg ved flere anledninger kommet inn på et prosjekt som trenger nettopp ekspertkompetanse for rydde opp i mindre godt levert arbeid.
I mange tilfeller har vi da faktisk måttet starte helt på nytt, og skrevet prosjektet helt fra bunn av. Det har kostet både veldig mye penger og tid for kunden, som kunne vært unngått ved å bruke ekspertkompetanse i første omgang.
Tilbake til husbyggingen, så blir det dyrt i ettertid når flisene står skjevt på badet, vannet renner gjennom badegulvet og det ikke er lagt opp strøm i halve boligen.
«Aldri har design-kompetanse innenfor de forskjellige segmentene vært så etterspurt som nå.»
Handler om omdømme
Disse tingene mener jeg gjelder for alle kroker og hjørner av det store teppet vi kaller IT eller teknologi, om det er utviklere, prosjektledere, designere, rådgivere eller andre områder.
Et konkret eksempel er fra Sopra Steria, som startet en egen avdeling for tekstdesign (!) med spesialister innenfor dette. Til sammenlikning hvor vi for ikke alt for mange år siden sa «design er design» og at «UX og UI bør gjøres av samme person». Aldri har design-kompetanse innenfor de forskjellige segmentene vært så etterspurt som nå.
Kvalitet og brukeropplevelse er kvaliteter som settes høyt (høyest?), og som blir enda viktigere når teknologi opptar større del av hverdagen vår og erstatter mange av de tidligere manuelle arbeidsoppgavene til folk.
I mobilverden er dette punktet ekstra viktig, da terskelen for at folk laster ned og lærer seg en app er stor, mens terskelen for at en dårlig app blir avinstallert er veldig lav. Alle offentlig apper har også ratings og reviews gjennom sine respektive formidlingsbutikker (AppStore og Google Play), hvor selve omdømmet til selskapet som eier appen i verste fall kan svekkes.
Norske Markus sin app ble vist fram under Apple-lanseringa
Mobilteknologiene
Så over til en kort drøfting av det artikkelen til Erik Wendel også handler om, nemlig native mobilutvikling vs. hybridløsninger.
Jeg skal ikke gå inn på dette i alt for mye detalj. Det finnes mange gode artikler på dette tema, men jeg skal gi noen generelle synspunkter som jeg har tilegnet meg i løpet av min karriere med utvikling på både native, kryssplattform og web.
Først og fremst vil jeg nevne de forskjellige aktuelle måtene å utvikle mobilapper på, og gi litt informasjon.
#1: Native
- Native utvikling på plattformene iOS og Android er Apple og Googles foretrukne og anbefalte måte å utvikle mobile applikasjoner på.
- Skrives i Swift (tidligere Objective-C) for iOS, og Kotlin (tidligere Java) for Android.
- Krever to separate kodebaser.
Petter lagde Norges 4. største musikkapp på én uke: - Viktig å naile den ene funksjonen
#2: Kryssplattform
Kryssplattform rammeverk er teknologier som er laget for at man skal kunne skrive én felles kodebase og deretter generere native apper både for iOS og Android ut fra denne. De største og mest populære per dags dato er:
- Flutter
Flutter er laget og vedlikeholdt av Google, er open source, og har raskt vokst seg til å bli den største (les: etter min erfaring mest omsnakkede) kryssplattformteknologien for mobil. Her skrives koden i språket Dart, og istedenfor å generere native komponenter lages et «canvas» (et blankt lerret) hvor alle komponentene «tegnes» på skjermen. - React Native
React Native er det største kryssplattformrammeverket basert på webteknologi skrevet og laget av Meta (Facebook). Man skriver React-kode og genererer deretter native apper ut fra kodebasen. React Native hadde et vendepunkt i popularitet da Airbnb gikk ut på Medium og skrev et blogginnlegg på hvorfor de gikk vekk fra sitt tidligere kjære barn, React Native (kan leses HER, anbefales!). - Ionic med Cordova
Ionic Framework er det største web-kryssplattformrammeverket. Ionic løser kryssplattformutfordringen ved å generere apper som kun består av et web-view (in-app browser) og deretter viser en webside i dette viewet. - Xamarin
Xamarin (Forms) var Microsofts storsatsning på kryssplattform rammeverk. Man skriver i .NET/C# og genererer native apper ut fra kodebasen. Har ikke enda fått det gjennombruddet som mange håpet på. Det skal nevnes at .NET har kommet med Blazor og MAUI i nyere tid som spennende alternativer for multiplatform utvikling i .NET.
#3: PWA (Progressive Web Apps)
- På både Android og iOS har man mulighet til å «legge nettsteder på hjemskjermen», og dermed få en snarvei til en fullskjerms nettside.
- PWA tar konseptet lenger til at man kan lage dette til så nære native apper som mulig til en slags simulering.
- Mange av de største forkjemperne mente dette var døden for App-Stores og nedlastning av apper i sin helhet.
Selbekk mener SPA-er ikke er godt nok lenger: - Framtida for webben løses på serveren!
Men hva er best?
Dette er det store spørsmålet som så mange har undret over så lenge. Erik Wendel mener svaret ligger i at de aller fleste skal bruke kryssplattform-løsninger eller webløsninger.
Jeg er uenig.
Etter min erfaring så er det som så mye annet her i verden: DET KOMMER AN PÅ!
- Native utvikling gir uten spørsmål den beste opplevelsen (både for utvikler og sluttresultat), og feilmarginen er mindre. Man har direkte kontakt med OS’et og har alltid nyeste funksjoner tilgjengelig. Dette gir også mest stabile apper, minst «hacks»/workarounds og du kan være sikker på at ikke teknologien dør eller slutter å funke uten veldig lang forvarsel. (Alt dette gitt at utvikling er gjort ordentlig, selvfølgelig).
Den største utfordringen her er at man må ha to 100% separate kodebaser som genererer apper til hver sin respektive plattform. Jeg har faktisk jobbet på prosjekter der alle utviklerne jobber med begge teknologier, så det er også en mulighet. Det skal også nevnes at spesielt Apple har vært ganske kritisk til kryssplattform-apper og at jobben med å f.eks. bli featured i App Store kan være tilnærmet umulig hvis man ikke har utviklet native. - Kryssplattform teknologi er veldig spennende og har absolutt en plass i spillet. Muligheten for å skrive apper i andre språk og teknologier er bra, og i tillegg gir konkurranse en veldig positiv utvikling på mange fronter. Her ser man at de store tar av hverandre. For eksempel som at Swift og Kotlin blir mer og mer likt. Det mest aktuelle eksempelet på dette er kanskje hvordan Flutter, SwitfUI og Jetpack Compose (og til dels React Native) har alle gått veien mot hverandre, og gitt muligheten til å utvikle apper på en nytenkende, moderne, «view-first/component metodikk».
Kryssplattform-utvikling gir muligheten til å ha én kodebase, noe som kan være en stor fordel for noen, spesielt hvis man bare en én mobilutvikler på prosjektet. Dette åpner store dører for f.eks. start-ups og andre små bedrifter som trenger app, men som ikke har budsjetter til større utviklingsteam. Utviklingstid vil også potensielt være noe raskere. Merk at dette potensielt vil gå på bekostningen av kvaliteten på appene. - PWA skaper muligheter for bedrifter til å ha enda enklere «apper» i sin portefølje der å laste ned apper ikke er så viktig, og bedriften allerede kanskje har en mobiltilpasset nettside. Jeg ville ikke anbefalt dette til veldig mange seriøse aktører, men håper det fortsetter å være et veldig enkelt alternativ der behovet er.
«Dette gjør at ikke mobilklientene bør trenge å være så store, komplekse og kostbare, og at valget av teknologi heller ikke er så avgjørende for prisen.»
Ikke avgjørende for prisen
Etter god frontend-/mobil-arkitektur skal man uansett prøve å ha disse klientene så smale som mulig og heller legge blant annet business-logikk i et mellomlag som er felles.
Dette gjør at ikke mobilklientene bør trenge å være så store, komplekse og kostbare, og at valget av teknologi heller ikke er så avgjørende for prisen.
Som utvikler og/eller konsulent innenfor denne sfæren av teknologi mener jeg man bør ha en god forståelse av både tekniske og praktiske fordeler og ulemper ved alle de største alternativene.
Dette mener jeg man best får ved å faktisk jobbe med de respektive teknologiene og gjøre seg opp en egen god, vektet mening, som jeg selv har gjort gjennom en årrekke.
I tillegg er det selvfølgelig hensiktsmessig å dra på konferanser og meet-ups og åpenbart å ha spennende faglige diskusjoner med andre flinke mennesker! Ved å gjøre dette har man et godt grunnlag til å ta en god faglig og reflektert avgjørelse for å kunne veilede oppdragsgiver til å ta det riktige valget for akkurat dem.
Men at man bør har en god generell teknisk forståelse, og at man bør ha et innblikk i andre domener, hindrer ikke dette:
LA FOLK JOBBE MED DET DE ER GODE PÅ! 😀
Sånn får Kron brukt samme kode på web og app med React Native for Web
Oppsummering:
- Ekspertkompetanse er en nødvendighet og en naturlig utvikling i et stadig raskt voksende marked.
- Kvalitet og brukeropplevelse er alfa omega, pris og tidsbruk kommer veldig ofte som andre prioritet. Ved å ha ekspertkompetanse øker man sjansene sine til å få en god, stabil og videreutviklingsbar kodebase.
- Hvilken mobilteknologi som skal brukes er veldig avhengig av oppdragsgivers mål og ønsker, samt størrelse på utviklingsteam.
- Native mobilutvikling gir best resultat, kryssplattform gir muligheten til å utvikle på en felles kodebase, web er et enkelt alternativ for de som ikke ønsker nedlastbare apper.
- Alle teknologiene har, etter min mening, livets rett og det er positivt at det er konkurranse i markedet.
MERK: Dette er mine meninger og synspunkter. Det er fullt lov å være uenig med meg, og jeg tar gjerne en prat/diskusjon/kodekveld/golfrunde eller liknende! 😊