In 2017 I wrote less than on the previous years. I did not run out of topics, I have collected a huge list of them but under a time pressure I decided to do other things than writing.
Neither the blog engine (I use Blog-Core which I maintain myself) and the blog code itself got any upgrades during the year. I consider them to be done.
I worked on two major projects in 2017 and both of them were further developments of older projects.
Electronic voting system
In 2016 I worked on an online voting system for Estonian Free Party. We could not employ it back then as the legal regulation of using a such system was not clear enough. For March 2017 it was sorted out. The original system relied on electronic identification which was not enough and electronic signatures had to be used. Electronic signatures have full legal power in Estonia. I implemented the new approach and the system was then used for voting the board and the other organs of the organization.
Shipping order system
In 2016 I worked on a small in-browser app to optimize the placement of packages on a freight truck. The users liked the app a lot and we decided to enhance it by developing a multi-user centralized backend with loading scheduling and other useful additional features. The application was built on the Node.js Express framework with MySQL database on the backend and React-based forms on the frontend. A part of the system is also a custom mobile app to take photos of trucks. The mobile app was implemented using DroidScript.
Learning new tech skills
My top objective in learning new technology has always been finding new ways to improve my current work. I try to avoid jumping into something very new unless I'm convinced that it is going to bring benefits.
React - I had tried to use React before in 2013 but the tooling (especially the JSX support) was quite bad back then. I was really surprised that this was not the case anymore in 2017. I evaluated it by rewriting my own feed reading app UI to use React. I also quickly discovered that JSX is a very powerful alternative to the EJS templating system in Express web applications. I prefer it over KnockoutJS and Vue and would use it for all my new web applications.
Sometimes you also need to let go old stuff.
Slackware - I do not use it on my desktop and laptop anymore. I have been using Debian with MATE for 8 months for now and it has proved to be a more stable environment. It is also more compatible with various software as Slackware has made a decision to stay from technologies like systemd and PulseAudio. Besides, all servers that I maintain, are running Debian. Slackware is awesome if you have time and willingness to compile software yourself, and when you have general Do-It-Yourself mentality. The system won't get in your way. I have become too lazy for that.
Mail setup - my mail setup was the most complex system that I was running and I felt that I do not want to maintain it anymore. I switched to FastMail and I can tell for sure that their paid account is worth it. Dealing with a complicated setup of a dozen mail-related daemons is now an history for me.
Supervisord - I have installed all my new apps using the systemd process manager and I really see no point of using Supervisord anymore. It was a nice alternative to init scripts before systemd caught up in usage.
Home server maintenance - at the beginning of 2017 I dismantled my home server. The main reason was to reduce the risk of having a broken server during travelling without anyone at home to repair it. I ran simple web stuff on it and it was quite easy to migrate the stuff into VPS/cloud.
Bash scripting - I had a complex set of scripts for running my backup tasks. It contacted some JSON-based APIs and that was not a very nice thing to handle with shell scripting. I rewrote the scripts as a Node.js application and discovered many issues in my old shell scripts. I do not ever want to write any shell script longer than 5-10 lines. It is just not reliable for anything larger.
Makefiles - most build tasks in developing web apps take a single command and incremental build support is built-in. This is true for tools like Webpack and Sass. This is also platform-independent. There is no need to use an external dependency-based build tool anymore.
Besides work I also took part of a large construction project to renovate the apartment buildings at the place where I live. The buildings, five at total, containing 102 apartments, were built at end of the Soviet era. These were mostly in a good shape but the heating cost was very high and the buildings lacked any proper ventilation. A chance to help out with the renovation process was the main reason for me to join the management board 2 years ago.
The hardest project ever
It was an extremely hard process from convincing the owners to accept the plan, negotiating with banks for a very big loan, negotiating for a state support, doing enormous amount of paperwork, to bearing the heavy noise once the actual construction work started.
Our job was also made much harder by a small group of owners who wanted to stop the process at any cost. They held meetings to turn other owners against the project and against the board. They tried to unseat the board. The plan and the management board was attacked in two articles published in a nationwide newspaper. One article's online version contained comments attacking board members personally. All members, including me, received threats over the phone. The group phoned our contacts at the bank and at the other partners to show the board as incompetent as possible. As the final step, they made an attempt to manipulate our relatives to influence us to stop the project.
The project was absolutely brutal. I had no previous experience with something of this scale and impact. The budget was 100 times larger than what I usually deal with. The amount of paperwork was staggering, on some weeks it took me couple of full days. This was combined with strict deadlines and those attacks above.
Our management board was exceptionally determined. Our partners and the majority of the owners never had doubt in us and showed lots of support. We were always ready to hear any question from an owner over the phone, by email, or when meeting in-person. We answered and explained all unclear aspects as detailed as necessary. Through conversations we convinced the owners that we are doing the right things and we are doing them in the right way.
The project ended 2 months ago and it was very successful. We achieved all project goals. We did not go over budget. In December we paid 59% less for heating than on the previous year. Together with the loan payback, my monthly bill is about the same as on the previous year. On the other hand, me and the rest of the 102 families enjoy proper heating (and you can set your room temperature!); working ventilation (no more humidity issues); all pipes and radiators are new, they won't fall apart in the near future; all new windows; new power distribution system that is not a fire hazard; and the buildings have a new beautiful outer finish. I'm very proud that the project came together and that I was involved.
Considering work, I will likely continue some existing development project or start a new one with an existing client in next the 1-2 months.
My longer term plan is to either move to a higher-populated place and/or accept a full-time position. Berlin would be my first choice. The largest city in 100km distance at my current place is Tartu with its 100k population. For some time I have felt that my current location is a bit limiting opportunity-wise.
A full-time position would likely to mean relocation for me anyway. It's not much different in effort whether I move to the capital city in my country or to a large city in Western Europe. The latter, however, makes much higher salaries available. I have got some very good offers lately but I have been hesitant to accept anything as I believe that accepting a position first and relocating after will set me up to a situation where I gain local connections at the new place and through them a significantly better offer than the one I accepted right before relocation!
A full-time position would also require a hard choice of specialization. I'm not sure whether I should go to the backend route (I have a solid CS background; it has the highest pay but I do not enjoy it), frontend route (I enjoy UI work and I have done a lot of it), product management route (I love working with users directly and create something they need even if it involves no coding), or fullstack route (depends a lot on the company what it really means). In 2018 I might be finally make the hard choice or maybe I just keep doing consulting, which really is the only place where this skillset combination is optimal.