Maailman mielenterveyspäivää vietetään 10. lokakuuta. Erilaiset ihmissuhteet ovat yksilöä kannatteleva voima, ja niiden merkitys korostuu erilaisissa elämäntilanteissa. Voisiko näitä ihmissuhteisiin liittyviä tarpeita tuoda esiin ennakoiden elämässä tapahtuvia muutoksia? Goforen tiimi selvitti tätä haastekilpailussa.
Osallistuimme goforelaisten tiiminä Väestörekisterikeskuksen ja Turun kaupungin yhteistyössä järjestämään Syysmyräkkään viime marraskuussa. Tapahtuman tavoitteena oli hahmotella ratkaisuja julkishallinnon, kolmannen sektorin ja yritysten muodostaman monitoimijaverkoston kohtaamiin haasteisiin. Tiimit määrittelivät haasteensa itse.
Annoimme keskustelun virrata ryhmässämme vapaasti. Kerroimme toisillemme omista ja läheistemme tarpeista, sekä menneistä ja tulevia huolista, jotka askarruttivat meitä ja joihin kaipasimme ratkaisuja. Siinä pöydän ääressä huomasimme, että meitä yhdistävä tekijä oli halu auttaa ihmisiä, jotka eri elämänvaiheissa kokevat merkityksettömyyttä tai tunnetta, etteivät tule kohdatuksi. Kertomuksia yhdisti toisiinsa niissä toistuva kokemus siitä, että ihminen on jäänyt tai vaarassa jäädä elämää rikastavien vuorovaikutussuhteiden ja elämänsisältöjen verkon ulkopuolelle. Tämä oli se haaste, johon tiimimme halusi tarttua.
Ratkaisumme sai työnimen sosiaalinen tahdonilmaisu. Kyseessä on sisältö, joka kuvaa mitä ihminen tietyissä elämänvaiheissa tarvitsee kokeakseen merkityksellisyyttä ja yhteyttä toisiin ihmisiin. Ideana on näin ollen saada kiinni niistä tarpeista, joita meillä kaikilla on liittyen ihmisten kanssa tapahtuvaan vuorovaikutukseen. Sosiaalinen tahdonilmaisu toimisi merkkinä siitä, että ihmiseen saa olla yhteydessä hänen itsensä kuvaamalla tavalla – niissä tilanteissa, joissa hän kokee sen tärkeänä.
 

 
Käytännössä sosiaalinen tahdonilmaisu voisi yhdistää esim. avuntarvitsijat niihin ihmisiin, jotka tarvitsevat merkityksellistä tekemistä tai vaan auttaa löytämään samasta asiasta kiinnostuneet. Erilaiset toimijat, kuten yhdistykset, yhteiskunnalliset yritykset ja muut tahot voivat myös olla osa tätä toimintamallia. Sosiaalinen tahdonilmaisun sisältö, eli data auttaisi toimijoita löytämään ihmiset, jotka hyötyisivät heidän palveluistaan. Tällä tavoin malli voisi auttaa toimijoita kohdistamaan palveluitaan entistä tarkemmin ja helpottamaan palveluiden löydettävyyttä. Viime kädessä tällainen toimintamalli toteutuessaan toisi arvoa koko yhteiskunnallemme, eli olisi aidosti kaikille osapuolille arvoa tuottava ns. “win-win-win-win” toimintamalli.
Sosiaalinen tahdonilmaisu on vain yksi tapa lähestyä monimutkaista ja viheliäistä ongelmaa. Emme tiedä mikä taho, ehkä yhteiskunnallinen, jolloin kukaan ei rajautuisi ulkopuolelle, voisi kerätä sosiaalisen tahdonilmaisun sisältöjä. Emmekä tiedä sitäkään, mitkä toimijat pystyisivät hyödyntämään näitä tietoja. Tiedätkö sinä? Vaihtaisimme tästä mielellämme ajatuksia ja voimme tarvittaessa mielellämme auttaa idean konseptoinnissa ja toteutuksessa. Sanomattakin on selvää, että idea on vapaasti kenen tahansa jalostettavissa. Vain ongelman ratkaisemisella on merkitystä, ei sillä, kuka sen tekee.
Tartutaan toimeen.
Seuraa kaksi vapaavalintaista tehtävää:

  • Kerro meille mitä ajatuksia idea sinussa herättää, tai miten jalostaisit sitä. Voit kirjoittaa ajatuksesi kommentteihin, tai olla meihin yhteydessä.
  • Käytä hetki sen miettimiseen, millainen voisi olla sinun sosiaalinen tahdonilmaisusi. Jos haluat, voit jakaa sen meille, tai kertoa miltä sen miettiminen tuntui. Oliko se helppoa tai vaikeaa?

Marjukka Rantala

Marjukka on innovaattori ja liiketoimintamuotoilija, joka auttaa organisaatioita kasvattamaan innovaatiokyvykkyyttään ja vahvistamaan innovaatiokulttuuriaan. Hän yhdistää muotoiluajattelun ja liiketoimintaosaamisen asiakkaille räätälöityihin innovaatioprosesseihin. Yhteiskehittämällä ja kokeilemalla osallistetaan eri tahoja ja rakennetaan merkityksellisiä palveluita ja ekosysteemejä koko verkostolle, liiketoiminnalle ja lopulta yhteiskunnalle.

Linkedin profile

Kati Virtanen

Kati Virtanen on käyttökokemussuunnittelija, joka auttaa organisaatioita tuntemaan asiakkaansa ja selvittämään mikä heille on tärkeää. Yksi hänen metodeistaan on käyttäjätestaus, jossa asiakas on mukana havainnoimassa loppukäyttäjien kokemusta.

Linkedin profileTwitter profile

Jelena Momčilović

Jelena on innostuva ja innostava asiakaslähtöisen kehittämisen ja yhdessä tekemisen ammattilainen. Hänellä on vankka ymmärrys teknologiasta ja sen mahdollisuuksista, jonka hän yhdistää luovaan, ihmislähtöiseen ajatteluun. Hän on empaattinen ja utelias ihminen, joka viihtyy ihmisten parissa ja omaa aidon halun auttaa asiakasta haasteiden ja uusien mahdollisuuksien edessä.

Piditkö lukemastasi? Jaa se myös muille.

Syksyn podcast-sarjan ensimmäisessä jaksossa tapasin Kotipizza Groupin toimitusjohtajan Tommi Tervasen. Tommi kertoi, miksi vastuullisuus on Kotipizzan strategisessa ytimessä, ja minkälaisia vaikutuksia tällä valinnalla on ollut.
Kuuntele podcast tai lue artikkeli alta:

Kaikki kannattava liiketoiminta on tulevaisuudessa vastuullista

Raflaava väite, mutta Tommin mukaan se on totta jo nyt. Elämme jo nyt sellaisessa ajassa, jossa henkilöstön ja asiakkaiden odotukset ohjaavat yritysten valintoja.
”Vastuullisuudesta on tullut jo License to operate, eräänlainen hygieniatekijä”, Tommi arvioi.

Vastuullisuudessa on kyse ihmisestä

Jätteen mittaamisen tai kulutusenergian määrien sijaan Kotipizzassa halutaan puhua ihmisestä. Siksi pelkästä ympäristövaikutusten mittaamisesta ollaan siirtymässä yksilön valintojen ohjaamiseen.
”Asiakkaita ei todennäköisesti kiinnosta numerot siitä, kuinka monta kilowattituntia energiaa pizzan paistamisessa kuluu. Tavoitteena on vaikuttavuus yksilötasolla.” Kotipizza haluaakin siirtyä ympäristötietouden jakamisesta kuluttajan valintojen oppaaksi. Tässä apuna on teknologiaa, joka tekee jokaisen omat valinnat läpinäkyviksi.

’Kunnon liiketoiminta’ ulottuu koko toimitusketjuun

Kotipizza haluaa vastuullisuus-sanan sijaan puhua sellaisilla termeillä, jotka sopivat sekä asiakkaiden että henkilöstön suuhun. Oikein tekeminen, kunnon liiketoiminta ja hyvien puolella oleminen kuvaavat tapaa, jolla myös tavarantoimittajien odotetaan toimivan. Oikein tekemiseen tarjotaan myös sparrausta ja apua ketjun puolesta.

Ei viherpesua, vaan sitä mikä on olennaista

Tommi suosittelee yhtiöille ja brändeille käyttöön olennaisuusarviointia. Siinä tärkeää on tunnistaa, mitkä valinnat ovat olennaisia yhtiölle ja brändille. Vasta tällaisen arvioinnin jälkeen päästään tekemään aitoja vastuullisuustekoja, pelkän viherpesun sijaan. Kotipizzan kohdalla olennaista on toimitusketju ja kotimaiset raaka-aineet. Kotipizzan kohdalla tämä tiivistyy lauseeseen ”Parannetaan maailmaa pizza kerrallaan”.  Se on helppo muistaa, se kuulostaa hyvältä – ja on totta.
”Sen pohjalta on helppo ymmärtää eri yksiköissä, miten maailman parantaminen liittyy hankintaan, tuotantoon, markkinointiin, henkilöstön hyvinvointiin tai viestintään.”

Kampaviinerihautaa välttäen ja uskaliaasti kokeillen

Kun 32-vuotias franchising-ketju määritteli olemassaolonsa tarkoituksen uudestaan, tuli myös yrityskulttuurin arviointi ajankohtaiseksi. Kotipizzan kulttuurista tehtiin Due Dilligence -selvitys, jonka tulokset olivat rohkaisevia. Henkilöstö totesi, että ”Meillä saa olla sellainen kuin on”.
Vastuullisuusstrategiasta Kotipizzassa ei puhuta, vaan keskitytään ymmärrettävän mission ja yhteisen merkityksen viestimiseen. Kulttuuri tukee tätä olemassaolon merkitystä.
”Meillä on tehty kulttuurin mukaisesti rohkeita ja nopeita kokeiluita ja vältetään joutumista kampaviinerihautaan. Se on paikka, jossa vain kampaviinerit vaihtuvat, mutta mikään muu ei muutu.” 

Kustomoitava elämä ohjaa vastuullisuuteen

Kuluttajien toiveet ja odotukset ohjaavat Kotipizza Groupin tuotekehitystä. Tommi näkee, että yritys on onnistunut uudistumaan, sillä 32 vuotta vanha brändi on tuonut monikanavaisesti uuden kulman ja kustomoivaa elämää kuluttajien ulottuville.
Ravintolaan tulevilla sekasyöjillä saattaa olla ilmastopäivä, ja silloin he valitsevat lihattoman vaihtoehdon listalta. Kustomoinnin tarve näkyy myös verkkokaupassa: Perfetta-pizza on verkkokaupan ylivoimaisesti myydyin tuote, josta asiakkaat ovat koostaneet tähän mennessä jo 28 000 erilaista reseptiä.
”On näkyvissä selvä trendi, jossa kuluttajat haluavat personoida oman makunsa mukaisen ruokaelämyksen”.

Vastuullisuuden positiiviset vaikutukset koko elintarvikealalle?

”Vastuulliset yhtiöt ovat tutkimustenkin mukaan kannattavampia, ja ne tuovat hyviä johtamiskäytäntöjä toimintaansa. Suunnittelun aikajänne on vastuullisilla yrityksillä myös pidempi.
Silloin ei olla nopeiden voittojen perässä. Toisaalta voi olla tuotteita, jotka disruptoituvat ja loppuvat kokonaan.”
 



Uskotko sinä muutokseen? Siihen, että voit muuttaa maailmaa paremmaksi ihmisille ja ympäristölle? Tutustu julkaisuumme ja asiantuntijoidemme näkemyksiin: Recoding change
 

Eeva Kiiskinen

Eeva toimii organisaatiomuotoilun ja muutosjohtamisen asiantuntijana. Hän sparraa asiakkaita organisoitumiseen, vuorovaikutukseen ja asiakaskeskeiseen kulttuuriin liittyvissä projekteissa. Eeva toimii johtamisviestinnän kouluttajana Tampereen yliopiston EMBA-koulutuksissa. Eevan tuotantotalouden alan väitöskirja käsitteli johtajuuden rakentumista strategisessa muutostilanteessa.

Linkedin profileTwitter profile

Piditkö lukemastasi? Jaa se myös muille.

This blog series is split into four parts:

  1. General information of secrets management
  2. Example how to store secrets into a version control
  3. Example how to use encrypted secrets in CI-pipelines
  4. Security issue and threat analysis based on previous examples

This time I’ll give a straight forward example how to use Mozilla SOPS with GCP KMS and Git.

Prerequisites

This guide is based on following technologies:

  • Debian-based OS
  • Mozilla SOPS 3.4.0
  • GCP’s  Key Management Service (KMS)
  • Git

Actions:

  1. Create a Google account and GCP project
  2. Install and initialise Google Cloud SDK on your machine
  3. Install Git

Download and install SOPS on local machine

On Debian-based OS

1
2
3
wget https://github.com/mozilla/sops/releases/download/3.4.0/sops_3.4.0_amd64.deb
sudo dpkg -i sops_3.4.0_amd64.deb
rm -f sops_3.4.0_amd64.deb

Releases for other operating systems

Download proper installation file of Mozilla SOPS from releases.

Setup Google KMS and key

Make Google Cloud SDK authentication

1
gcloud auth application-default login

Create a new keyring

1
2
# Create a new keyring
gcloud kms keyrings create sops --location global

If the following error occurs: ”ERROR: (gcloud.kms.keyrings.create) FAILED_PRECONDITION: Google Cloud KMS API has not been used in this project before, or it is disabled. Enable it by visiting https://console.developers.google.com/apis/api/cloudkms.googleapis.com/overview?project=<id> then retry. If you enabled this API recently, wait a few minutes for the action to propagate to our systems and retry.”. Follow the link and enable Google KMS API.

Create a new key

1
2
3
4
5
6
7
8
# Create a new key to the keyring
gcloud kms keys create dev-sops-key --location global --keyring sops --purpose encryption
# List all keys in the keyring
gcloud kms keys list --location global --keyring sops
NAME                                                                           PURPOSE          ALGORITHM                    PROTECTION_LEVEL  LABELS  PRIMARY_ID  PRIMARY_STATE
projects/<gcp project>/locations/global/keyRings/sops/cryptoKeys/dev-sops-key  ENCRYPT_DECRYPT  GOOGLE_SYMMETRIC_ENCRYPTION  SOFTWARE                  1           ENABLED

SOPS usage

Basic usage – encrypt and decrypt existing file

1
2
3
4
5
# Encrypt
sops --encrypt --gcp-kms projects/<gcp project>/locations/global/keyRings/sops/cryptoKeys/dev-sops-key api-key.json > api-key.enc.json
# Decrypt
sops --decrypt api-key.enc.json > api-key.json

If the following error occurs on encryption: ”Could not generate data key: [failed to encrypt new data key with master key ”projects/<gcp project>/locations/global/keyRings/sops/cryptoKeys/dev-sops-key”: Cannot create GCP KMS service: google: could not find default credentials. See https://developers.google.com/accounts/docs/application-default-credentials for more information.]”. You have to make Google Cloud SDK authentication (a few steps earlier in this post)

Basic usage – create or modify encrypted file by SOPS

With the default text editor, you can create or modify encrypted file by SOPS by running following command:

1
sops api-key.enc.json

Creating a new encrypted file needs key parameters like those used in the previous step. But if you have configured creation rules for SOPS, you don’t have to add any key parameter – so head to the next step.

Advanced usage – Creation rules configuration

Create a file named .sops.yaml to root directory where you can set specific encrypted file creation rules (example content below).

.sops.yaml
1
2
3
4
5
6
7
8
9
creation_rules:
  # Staging
  - path_regex: staging/.*\.enc(\.yaml|\.json)?$
    gcp_kms: projects/<gcp staging project>/locations/global/keyRings/sops/cryptoKeys/dev-sops-key
    pgp: 43EBC42D5F6BE0B4617A2C78E2855047997055EC
  # Global enc-files (typically for testing and dev-environment)
  - path_regex: .*\.enc(\.yaml|\.json)?$
    gcp_kms: projects/<gcp dev project>/locations/global/keyRings/sops/cryptoKeys/dev-sops-key,projects/<gcp dev project>/locations/global/keyRings/sops/cryptoKeys/gitlab-sops-key

You can specify multiple path_regex -variables where you set specific regex-named path. You can add one or more keys for the specific path_regex -variable.

Whenever you create an encrypted file to root or sub directories of the configuration file, the specific rules are affected.

Adding to version control

When you have created an encrypted file, you can store it to version control and ignore the decrypted file.

1
2
3
4
5
# Ignore original file
echo "api-key.json" >> .gitignore
# Add crypted file
git add api-key.enc.json

Automating encrypt and decrypt

Because everybody loves automation I’ll show you my tricks by using Git hooks. The basic flows are:

  1. Encrypt secrets when committing changes.
  2. Decrypt secrets when pulling, merging or doing checkout on branches.

Encrypt

Add the following script to <repository>/.git/hooks/pre-commit -hook. This script will automatically encrypt secrets when you try to commit changes. Also you can add this script to a version control and call it via hook.

encrypt_secrets.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#!/bin/sh
# If SOPS configuration is changed, force update
GIT_SOPS_CHANGED=`git status -s | grep ".sops.yaml"`
FORCE=0
if [ ! -z "$GIT_SOPS_CHANGED" ] || [ "$#" -eq 1 -a "$1" = "-f" -o "$1" = "--forced" ]; then
  FORCE=1
fi
# Find all encrypted files
ENCRYPTED_FILES=`find . -type f -regex ".*\.enc\(\.yaml\|\.json\)?\$"`
for FILE in ${ENCRYPTED_FILES}; do
  DECRYPTED_FILE=`echo "$FILE" | sed 's/.enc././g'`
  if [ ! -f $DECRYPTED_FILE ]; then
    # Decrypt file if none exists
    echo "Decrypted file does not exist. Decrypt and re-encrypt: $FILE"
    sops --decrypt $FILE > $DECRYPTED_FILE
  fi
  # Check if secret is changed
  SECRET_CHANGED=`sops -d $FILE | diff $DECRYPTED_FILE - -q -Z`
  if [ $FORCE -eq 1 ] || [ ! -z "$SECRET_CHANGED" ]; then
    echo "Secret has changed or update is forced. Update: $FILE"
    # Replace old encrypted file with a new one
    cp $DECRYPTED_FILE $FILE
    sops --encrypt --in-place $FILE
    if [ ! -z "`git status -s $FILE`" ]; then
      # Add encrypted file to commit.
      git add $FILE
    fi
  fi
done

Decrypt

Add the following script to a version control and call it from <repository>/.git/hooks/post-checkout and post-merge. It will decrypt secrets when you are changing, pulling or merging a branch. Also this script will be used in a CI-pipeline in the next blog.

decrypt_secrets.sh
1
2
3
4
5
6
7
8
9
#!/bin/sh
ENCRYPTED_FILES=`find . -type f -regex ".*\.enc\(\.yaml\|\.json\)?\$"`
for FILE in ${ENCRYPTED_FILES}; do
  DECRYPTED_FILE=`echo "$FILE" | sed 's/.enc././g'`
  echo "Decrypting $FILE"
  sops --decrypt $FILE > $DECRYPTED_FILE
done

Using Git diff

Add the following configuration to ~/.gitconfig

[diff "sopsdiffer"]
  textconv = "sops -d"

Then create and add <repository>/.gitattributes file with following lines

*.enc diff=sopsdiffer
*.enc.json diff=sopsdiffer
*.enc.yaml diff=sopsdiffer

Now you can use `git diff` so it will show diff between decrypted files!
Next up in the blog series: ”How to use secrets in CI-pipelines”-guide.

Jarkko Koistinaho

Jarkko toimii Goforella teknisenä projektipäällikkönä ja hän on laatu- ja testausorientoitunut ohjelmistoalan ammattilainen. Testauksen lisäksi hän voi astua kehittäjän saappaisiin, Scrum Masteriksi tai tehdä järjestelmäasiantuntijalle tyypillisiä tehtäviä. Mallipohjainen testaus ja suorituskykytestaus ovat Jarkon erityisosaamisalueita.

Piditkö lukemastasi? Jaa se myös muille.


 
Every developer will occasionally run into a similar problem: where and how to store secrets? And this time I don’t mean hiding skeletons in the closet, but storing credentials, passwords, IP addresses, API keys and something like that. There are many ways to store secrets but this time I will focus on how to store them securely in a version control.
This blog series is split into four parts:

  1. General information about secrets management
  2. Example how to store secrets in a version control
  3. Example how to use encrypted secrets in CI-pipelines
  4. Security issue and threat analysis based on previous examples

So, why should you be serious about security and secrets management? Too many times I’ve seen that some secrets are stored in a version control as a clear text and I admit that I’ve made the same mistake many times – it is just too easy to store a secret and forget that it exists. Anyone who has access to the repository can expose and use the secret. Not to mention that hackers or possible vulnerabilities in systems which have access to data can also expose the secret. Private repositories aren’t enough.
On one day, I was thinking about what would be the best way to store secrets so that all the following requirements are fulfilled:

  1. Multiple encryption types support.
  2. Globally working solution with centralised key management.
  3. Easy to install and use. Also easy to fix any compromised information.
  4. Encrypted information is stored to a version control.

I read up further about secrets management in a version control and came up with five solutions: git-crypt, git-secret, BlackBox, Mozilla SOPS and Transcrypt. There is also Hashicorp Vault but as far as I know, it is not quick to setup from scratch and is not easier to use than other solutions.
I took a look to what encryption types are supported in each solution:

GPG
Symmetric key
Amazon KMS
Google KMS
Azure Key Vault
git-crypt   X            X
git-secret   X
BlackBox   X
Mozilla SOPS   X            X          X              X
Transcrypt            X

I didn’t want to setup any GPG-based keyservers by myself, so a cloud based key management service (KMS) is the way-to-go. In a current client project we use Google Cloud Platform (GCP), Git and Gitlab, so my biggest motivation was to use an encryption solution which supports those technologies – especially GCP. After all, reading detailed information of encryption solutions, I ended up to SOPS.
Why? For me, the most important feature was that I can encrypt and decrypt secrets with multiple keys. If one key is exposed, the key can be rotated or removed without any bigger hassle – just rotate or remove and then encrypt the secrets again. No need to change all the keys.
Another thing is that if the keys are managed on a cloud platform, all authentications are based on a cloud platform’s user and service management with trace logging.
 

 
Mozilla SOPS (Secrets OPerationS) is an open-source editor of encrypted files that supports YAML, JSON, ENV, INI and binary formats and encrypts with AWS KMS, GCP KMS, Azure Key Vault and PGP.
SOPS will encrypt and decrypt secrets in the text form so running any diff tools for tracking changes is possible. It is built in the Go programming language and SOPS is compatible with the Windows, Mac and Linux platforms.
In the second part of this blog series, I’ll dive into a technical ”How to add secrets to version control”-guide. It will give a tour of using Mozilla SOPS with GCP and Git.

 

Further reading:

Jarkko Koistinaho

Jarkko toimii Goforella teknisenä projektipäällikkönä ja hän on laatu- ja testausorientoitunut ohjelmistoalan ammattilainen. Testauksen lisäksi hän voi astua kehittäjän saappaisiin, Scrum Masteriksi tai tehdä järjestelmäasiantuntijalle tyypillisiä tehtäviä. Mallipohjainen testaus ja suorituskykytestaus ovat Jarkon erityisosaamisalueita.

Piditkö lukemastasi? Jaa se myös muille.

A love for mathematics led the way

I have worked in tech all my professional life. In high school that was not my plan though. I dreamed about studying the English language and becoming a translator. Luckily, I didn’t get in when applying to university 😀

It can be said that my career is more or less a coincidence. And it has been affected by two men, my father and my high school math teacher. My father gave me an example of how easy and fun mathematics can be and my high school teacher encouraged (or pushed) me to apply to study mathematics at university (even though it was only my second choice). Fortunately, I got in and have not regretted a single day. At the age of 19, I could not imagine what a future in the technology industry would bring, and it has been quite a journey.

I had always loved mathematics in school and when I started my studies at university it was quite a shock. I soon realized that mathematics is a lot of work. But it is worth it, trust me. Hard work has been the key to my success throughout my career. There is no way you can quit and say this is not working. You just have to try another approach and there will always be a solution. It might not be what you thought it would be, but things will work out one way or another. Studying mathematics has taught me a lot of problem-solving skills and a logical way of thinking – things that are still at the core of technology and software development.
At that time (in the early 90’) there was no subject called computer science, it was called applied mathematics. But I loved it and felt I had found my home. Creating software was inspiring and there were a lot of things to learn. It was so much fun trying to find a bug in the program and fix it. Or maybe I just have a crooked mind. Still today I sometimes miss the times when I was writing code.

After I finished my studies (in the mid 90’), I ended up working for Nokia. It was a ride that lasted almost 16 years. I started in coding, did some project management tasks and ended up doing standardization and technology insights. I got to travel around the world, work in different roles and learnt a lot. I admit, when I (finally) got the notice of employment termination in November 2011, I felt relieved. One door closed and another opened for me.

After being unemployed I planned to stay at home with my 2-year-old daughter, but another coincidence happened and changed my plans. I had applied to a study program and is had an internship as part of the program. In the first info session about the program, the organizer told me that they had already sent my CV to Gofore for the internship and that I had an interview with them the next day. In that interview I said that I didn’t need any study program and that I wanted to work for Gofore without any internship. Two weeks later I signed a contract. So, I ended up working for Gofore without ever even applying to the company. And once again I have not regretted a single day. It has now been 7,5 years.

I was hired as a software developer and I got to write code and find bugs for the first 3 years at Gofore. I was also handling some project management tasks and gradually shifted totally onto that path. Currently my title is technical project manager and I’m so proud of it. I get to work actively with customers to find out their actual needs. And as I have a coding background it gives me a lot of understanding on the technical details and restrictions that might need to be considered with the customer. And the other way around, I can make the message from a technical level more understandable for the customer. So, my job is mostly communication.

Throughout my career my background in mathematics and problem-solving has helped me. Problems vary and nowadays they are not technical, but still there is always a solution for them. And it is my job to find it. Even though I didn’t get into studying English, I ended up as a translator. A translator between customers and software developers.

The best advice I’ve ever received was from my high school math teacher: “There are too many linguists, but the world needs mathematicians”.
Mathematics is not just for boys. And studying it will help you no matter where your career takes you. Logical thinking and problem-solving skills are essential in almost all occupations. I hope I can be an example of that to my daughter.

Psst, we are attending the Women in Tech Forum, so if you have any questions or just wanna have a chat, meet us there. More information: https://womenintech.fi/week-forum-2019/ 

Read the previous parts of this blog series here:
Subconscious career design
Value your skills – they are needed in tech
My career in tech – a continuous learning curve
Finding my own material to design
Working as a woman in tech

Jaana Majakangas

Jaana toimii Goforella teknisenä projektipäällikkönä. Hänellä on 20 vuoden kokemus eri rooleista IT-alalla ja laajaa näkemystä digitaalisaation hyödyistä erityisesti julkisella sektorilla ja yhteiskunnassa.

Linkedin profile

Piditkö lukemastasi? Jaa se myös muille.