No Battle Plan Survives Contact With the Enemy

Last year when I decided to change my life the only way I knew how I could change it was to quit my job. It was a good job and a great set of people, but I did not feel that my life and career was going forward. I was in a standstill and in some ways I felt that when I was at Nokia I were happier.

I guess good things are never easy. Finding a job that would be good to me has not been easy. During the past year I've applied to 17 jobs, have talked to 8 recruitment consultants, and interviewed 5 times. I've applied to Technical Product Manager, Technical Program Manager, Team lead, Agile Coach, Release Cordinator, Developer Advocate, Group Manager, and to Developer positions. Some of these have been ideas from recruitment consultants and some are still on-going. As you can see from titles I'm not really sure of my path, but I definitely want to get forward from where I have already been. I'm willing to work hard and if necessary to relocate.

I just had my latest interview last week. I think it went well, and the job sounds like a good fit. I've also been in touch with a recruitment consultant that thinks he is going to have an interesting and well paying contractor gig for me really soon.

On the personal side of my life things were also looking good. I've been chatting with a nice lady I met during my last trip, and my plan was to go to see her this week. Just when I thought finally everything is going to work out great, things got complicated again due to a small accident. I broke my elbow last weekend while doing workout. It needed minor surgery, couple of weeks of wearing a cast, and couple of months to fully recover. This may mess with the jobs I was near to land, and destroyed my travel plans.

It is so disappointing when good things are so near that you can almost touch them, and then they are again somewhere far away and you are unsure if you can reach them.



About two years ago I did couple of public presentations and prepared the slides with LibreOffice. That was quite frustrating experience. LibreOffice is like MS Office in the way it offers huge amount of features which makes the UI a mess. My slides are always quite simple: texts, boxes, and images. Presentation programs' features are total overkill for my needs, but on the other hand I've been seriously frustrated by how difficult is to align the elements in the screen the way I want.

Apple's Keynote has one feature I really like. Its use of anchor lines instead of grid for aligning elements is really nice. When you move an element and it comes near existing anchor line, the anchor line becomes visible meaning that element will snap to it. There are anchor lines, in middle and edges of elements, and screen making it easy to align elements. And anchor line stays visible only for certain time, so you can ignore it easily.

From my frustration to Office suites and admiration of Keynote's anchoring mechanism I come to conclusion that I would really like to make my own simple presentation program that would support anchoring the way Keynote does, but other than that it would be minimal so that unnecessary complexity will not distract user from essentials.

Around july 2013 I started working on the app I call Stage. I haven't worked much on it and it is far from being useful yet, but I still like the idea and the anchoring code was interesting to write. I'm using Qt5 and QtQuick Controls since I want to make the app cross platform and QML is just so much fun. On the technical side I'm also playing with idea of doing as much as possible with QML and only using C++ when absolutely needed. In case anybody is curious, the project is at https://github.com/veskuh/stage. The code is quite quick and dirty, and the architecture hasn't been thought about at all.

I've been playing with Stage code again for few days. Doing desktop development this way is super nice and easy compared to the mobile development and the kind of projects I've been working. It's a fun little project, but it is likely that it will never be anything more than toy program. There is just too much work to be done, even for the simple set of features that I need in my presentations. It is good to have different kind of hobby projects, you always learn new things from them.


Developing competence

Long term survival in technology business requires companies to have top notch engineers. The companies in Silicon Walley benefit from the huge talent pool in the area. The best companies do think about developing their people, there even the bad ones benefit from the smart companies and are only willing to hire people they think are already good.

European companies face a different challenge. There are not many R&D hubs with many big companies present. Typically the local talent pool is smaller and focused on narrower segment, like mobile game development in Helsinki, or car software in Germany. Finland used to have large amount of mobile software engineers, but due to platform change, the old Symbian skills are obsolete.

Nokia managed to develop many great engineers that are now great specialists at other companies. To grow into a great engineer usually needs two things 1) right amount of time 2) suitable challenges. For example to become a great browser engineer, you would have to spent many years in doing fixes and new features for browser engine, even if you are talented. Nokia's best browser engineers have joined companies like Intel, Apple, Samsung, Microsoft, Huawei, and Nvidia and still work on browser technologies. To develop that kind of talent Nokia invested in Webkit development for many years and then on Linux side on Gecko development for several years.

Sometimes companies forget that they have opportunity to grow the engineers from talents to great engineers and only setup new R&D in already hot areas like Silicon Walley, or even worse only hire top engineers (instead of top talent).

There are challenging software areas where it can make a huge difference what kind of people you have and how long are you willing to stay in the area. All too easily I see companies moving responsibilities and restructuring their operations. These can be really bad for talent and demanding asset development. For example Google couldn't have made Chrome great by just developing one more UI on top of Webkit. Google needed to invest time and money on Webkit engine development, their own JavaScript virtual machine development, and forking Webkit to Blink. All of these required years of work, hiring great people, and growing talent into great engineers.

While I applauded Nokia's browser team development as a good thing, sadly most of Nokia's development work seemed to be much more short sighted, and even in the browser area Google is much better than Nokia ever was as Chrome's success both on desktop and mobile proves.

Way too often I still see companies only willing to hire ready people, instead of healthy mix of eager young engineers and experienced guys. Hiring is only small part of developing people. Keeping the right people and giving them right jobs is probably even more difficult.


Programmer stereotypes

M.E. Driscoll wrote an interesting piece about the traits he sees in top engineers in Silicon Walley:
A couple of weeks ago, I was drinking beer in San Francisco with friends when someone quipped:

“You have too many hipsters, you won’t scale like that. Hire some fat guys who know C++."

It’s funny, but it got me thinking. Who are the "fat guys who know C++”, or as someone else put it, “the guys with neckbeards, who keep Google’s servers running”? And why is it that if you encounter one, it’s like pulling on a thread, and they all seem to know each other?

And continues to characterise them as:
  • Their craft is creating software
  • Their tools of choice are C, C++, and Java – not Javascript or PHP
  • They wear ironic t-shirts, and that is the outer limit of their fashion sense
  • They’re not hipsters who live in the Mission or even in the city; they live near a CalTrain stop, somewhere on the Peninsula
  • They meet for Game Night on Thursdays to play Settlers of Catan
  • They are passive, logical, and Spock-like
  • So it's C++ fat guys with neckbeards vs. JavaScript hipsters. In my experience its quite different in Finland.

    We do have JavaScript hipsters and some of them are really competent and obviously some not. Fat C++ guys that are great engineers are actually quite a rare.

    Majority of super competent C++ developers I know are regular boring engineer types (we used to use term "Nokia Engineer" to describe the type). These are people with 1,5 kids, golden retriever, wagon Volvo, and lives in a house in suburbs. They dress like normal engineers and most of their free time they use with their family. They really are passionate about their work and see it as craft, and do tend to use languages that are appropriate for the job, and definitely are logical. When they go shopping in saturday with their families they will not stick out in the crowd from the regular folk.

    I don't know if my experience is because of the companies I've been to, or if Finland's culture of not sticking out of the crowd has really limited the size of fat C++ coder community and forced the to fit society more than in Silicon Walley.


    Photo management with Android

    During my recent trip Nexus 5 was the only camera I used. I know its not the greatest, my Pureview 808 would have been a lot better, but I decided to only carry one phone daily. I'm usually quite happy with the quality of the pictures Nexus 5 is able to capture.

    The longer I've used Android I've discovered more and more little things I do not like in it. Photo management is something I've actually started to hate in Lollipop. Photos app UI is ok, its not great but does the job. I think most of the issues are because of cloud synchronization and grouping of local images.

    For example deleting image is a blocking operation and may take several seconds and I need to confirm dialog "Delete everywhere". The app does poor job in figuring out local vs. cloud and many times I had to wait loading of image for long time (loaded from cloud) even though the same image was available locally. Also, in "All images" list I see duplicates of images (cloud, local) and in some cases even a third one (local low resolution preview).

    After trip I wanted to import images to iPhoto. For all images it imported both preview and the actual image. Perhaps that was an issue in iPhoto, but couldn't Android have stored previews to non-visible dir so that they would not be imported?

    There is also plenty of little annoyances in photos app and photo management like notification with led/sound about such a trivial thing as "n of your images was backed up" on succeeding automatic backup. I hate these issues because taking photos is one of the key features in a mobile phone for me. I like to take photos, share them, modify them, transfer them to computer for various uses and do all of this often.

    I may need to install Sailfish on my Nexus before I throw it to the wall. I'm also seriously considering iPhone 6.



    When I last year left my job I was generally unhappy. I did not love my job, I did not find my life exciting, and I did not know what do about it. Only thing I was sure was that I needed to change something. I decided to at least see some parts of the world I haven't seen, and do things I've always wanted to, but haven't had the courage.

    I just last week come back to Finland after almost three months of travel in South-East Asia and Australia. I had a great trip, probably best trip I've ever made and my biggest adventure so far. I spent a lot of money, but it was worth it. As a person, I'm still the same I've always been with the same problems and strengths, but I found courage to do things I never thought I could and found little moments of happiness. I hope I'm a bit braver and confident than before the trip. I will definitely pay more attention in living the life instead of just being.

    Now, I'm actively looking for a job. After my break from work I've started to enjoy programming again so I'm also looking at developer positions. I'm mostly interested in Qt/QML and web technologies. I've always had a regular job, but this time I'm also thinking of getting into contracting. The idea of doing a 3-6 month contract and then having another contract or a small break could be just right for me.


    Travel laptop

    I wanted to get a cheap and light laptop mostly for travel use. I did not need a lot of performance, but I wanted enough so that I could do a build of Tweetian using Sailfish SDK if I wanted to. This rules ARM based netbooks out and in practice means that device needs to have 4GB of RAM at minimum and reasonably modern CPU.

    I ended up buying Acer Aspire V3-111P The device was quite cheap at 399€. The performance seems to be good enough for the tasks I had in mind and even though the hardware has a bit cheap feel to it the device looks good. Trackpad and keyboard are OK and its surprisingly fun occasionally use the 11.6 inch touchscreen for pointing and scrolling.

    I've never had Windows 8 or Windows Phone device before so I was curious about the Metro UI and for the first days I used the preinstalled Windows 8.1. The UI indeed was quite nice for touchscreen use. However, a lot of the time the things I needed were traditional mouse/keyboard driven things and the mixed traditional/touch environment become quickly painful. Originally I thought of making dual boot system with preinstalled Win8 and Kubuntu. The device had secure boot and UEFI enabled in BIOS and getting dual boot to work correctly did not work right and quick Googling did not help so instead I just changed to traditional boot and installed only Linux.

    Display brightness adjustment has issues and Ethernet does not get IP, but everything else works with Kubuntu. Two finger scrolling is too fast with trackpad, other than that keyboard, trackpad, and touchscreen are working quite well. 4GB of memory means that sometimes the device lags a bit, but less than it did with Windows. Also, Sailfish SDK is clearly quicker under Linux. According to specs battery should last 7h of use. I haven't measured, but my feeling is that it is probably true, could be even a little better.

    I really wanted to buy a MacBook Air, but it would have been way too expensive just for travel use. I think I got good value for the money and if the laptop gets stolen or broken during a trip it will not be a huge loss like it would be with a premium laptop. I may still swap the 500GB harddrive to SSD to get a bit more speed some time later though.