Thought Flow

Technology and other things

Author: David

  • Golang and the search of the past

    Gopher inspecting Go code
    Gopher inspecting Go code by Anthony Starks (CC-BY-NC)

    This post is mostly a status of what I have been up to here at the nearly-almost-half-year mark of 2016.

    Introducing Product Search

    By the end of 2015, we had already been using Elasticsearch for a while. It was the first part of a long-term strategy of moving data away from Google App Engine. Event data such as page views and clicks as well as order aggregations such as revenue-per-day for our users was being stored and calculated on Elasticsearch. Although Elasticsearch is popular for collecting log data, its main selling point is that it is a very fast full-text search engine.

    During the Christmas holidays, I wanted to see how easy it would be to add a search widget, powered by Elasticsearch. After about 3-4 hours, I posted this proof-of-concept video to our Slack channel with the following message:

    Product AJAX search proof-of-concept, powered by Receiptful

    As it turned out, the product search feature quickly found its way onto the roadmap :-)

    Unlisted Antecons

    It was going to happen at some point, and in early April, we finally removed the listing of Antecons from the Shopify app store. The app continues to run and interestingly, we have some users that are still using it, even though we have contacted everyone and tried to get them to switch over to Receiptful. Loyal customers.

    Popular metrics report

    By the end of April, we released the report “8% of all product page traffic converts to sales”. For a short while, I think it made a little splash and was read by quite a few people. Although I did not write the article, all the data for the article was gathered by me a few months before. One of those little side tasks that spice up developer life — although doing data analysis is slightly more exciting than data gathering :-)

    Go nuts with Golang

    Currently, I am in Golang land. I did not think I would end up there, but when tasked with creating a new web app for some simple store metrics, I decided to create it with Go after consulting with the team. After some initial headaches (i.e. getting used to a statically typed, compiled language again), I must say that Go has some good things going for it. My colleagues mock me about using tabs, but that is the Go way.

    In the same project, I also said hello to my old friend MapReduce. It is a feature of MongoDB and we use it to create pre-aggregated reports for the project. It might be a short affair though, as I am also considering other options such as Google BigQuery. We will see…

    So those are the major headlines (I probably missed something). I have been meaning to write slightly more technical articles, but I do not feel like I am not in the right mindset to do so yet. Those pieces also tend to be much longer and much more difficult to write, so for now, you will have to do with these random rambles.

  • People Debt

    noun, Definition:
    Unwillingness or resistance to change in the context of organizations, application design and development, when the change is objectively or arguably positive for the organization.
    From the David Dictionary :-)

    Deal with the tech debt
    Deal with the tech debt by Dafydd Vaughan (CC-BY-SA)

    Imagine a house in need of renovation. You can continue to paint the walls over and build new extensions, but at some point, the foundation needs an overhaul or you risk having to tear down the entire house.

    Tech debt is like that. As an application grows, some old parts inevitably start to get outdated and in need of repairs. The biggest problem in application development is often not tech debt itself though. A lot of the time, people are the problem, not the code.

    I recently had a conversation with a good friend about one of those little conflicts that happens at work sometimes. In this instance, my friend was trying to optimize a process that was rather slow and costly for the company. Apparently, this rubbed a manager the wrong way and they basically told my friend to stop making things more efficient. I only know one side of the story, but the situation sounds familiar. It is a symptom of People Debt.

    People Debt is not about competence. It is about unwillingness or resistance to change. “We have always done it this way” is a common quote to hear in an organization with high people debt. Change is difficult to handle, even if the change is objectively for the better, e.g. more happiness, more profits, less complexity etc. When you combine people debt and tech debt, you get a very bad cocktail. This cocktail is often called Corporate Software, but it can also happen in smaller organizations.

    I do not know exactly what leads to people debt, but it probably has a lot to do with pride and fear of looking bad in other’s eyes. I can relate to that feeling. It does not feel good when one’s decisions are being challenged and this often leads to defensiveness. Another part of the problem might be a consequence of “normal” power struggles. For example, encroaching on the area of responsibility of someone else.

    I think one of the first steps to avoid people debt is to create a company culture where people feel comfortable and secure in their position in the company. Insecurity leads to defensiveness. I also think it is important to encourage open and positive collaboration between different areas of responsibilities. The best results usually come from team efforts and not a “me” effort. Finally, encouraging people to not be complacent and instead challenge the status quo from time to time also helps.

    As always, the most difficult change to make is to ourselves. Defensiveness and insecurity are natural feelings to have. But I do believe that we can tame those emotions when it makes sense. When someone tries to help us improve in any way, it is easy to dismiss and defend, and much harder to listen, accept and maybe even learn something new. This goes for everything in life by the way — not just my tech bubble.

  • Chat is the new TODO

    It used to be that the TODO app was a common way of demonstrating a specific language, framework or perhaps just as hobby project. Well, it occurred to me that now it seems that the new TODO app is a chat client. There are already many full-fledged “Slack Alternatives” and the hobby projects also seem to be popping up a lot. One of my colleagues was even starting out in Python by writing a chat app.

    Ahh, how I enjoy making observations based on anecdotes and gut-feelings :-)

  • Basic Income Is Coming

    Basic Income
    Basic Income by Christopher Andrews (CC-BY-NC)

    Basic income is an unconditional income given equally to all people of a country just for being alive. Lately it seems that the idea is being talked about more and more, and perhaps this is a sign that basic income is becoming mainstream and more widely recognized. The most recent big example was when Y Combinator created some buzz because they announced that they would sponsor a five-year study on basic income. This is quite unprecedented for a company that traditionally funds early-stage startups.

    It is not only companies and bloggers that are showing interest for basic income. Some countries are warming up to the idea as well. In Finland, the majority of the public seem to support basic income and the current government has committed to investigating the feasibility of introducing it to the country. A few cities in The Netherlands will run a pilot program to test basic income. Switzerland is going as far as having a public vote on June 6 regarding whether to introduce basic income (press release in German) and the public opinion seems to also favor Basic Income here. 1

    I cannot remember when I first heard about basic income, but I do remember that I was almost immediately convinced that it was a good idea. To me, basic income combines both traditional left- and rightwing ideals, for example having the personal freedom to not work and ensuring as a society that all people are equal in terms of the basic means to survive and avoid poverty. I do not want to get too much into the philosophical, political and economical arguments for and against basic income here though, and to be honest, one of the main reasons I support basic income is that it just feels right.

    I truly hope that basic income is introduced universally in my lifetime. The big question is: Will it work in the long run? With increased automation and technological advances, I believe that it will. But there might also be unforeseen consequences of a basic income that will reduce the feasibility in the short term. No matter what, it will be exciting to follow the progress of the various ongoing projects and see what they lead to.


    More information

    Basic Income Earth Network aggregates news and articles about basic income and is a good starting point for further information about arguments for basic income and the feasibility thereof.

  • A Learning Plateau

    Ancient Atlantis
    Ancient Atlantis by European Space Agency (CC-BY-SA)

    Anyone can play guitar and they won’t be a nothing anymore Radiohead

    So you want to learn how to play guitar? Awesome!

    Step one, get yourself a guitar. Great, you took the first step!

    Step two, start playing any pop song ever. Great, now you know chords!

    Step three, check out some cool and/or classic guitar riffs. Great, now you can read tabs!

    Step four, learn a bit of music theory and realize that the pentatonic scale always sounds good. Great, now you can improvise!

    Congratulations, you can now play guitar. This is your progress so far in ASCII art:

          |
          |    /
          |   /
    skill |  /
          | /
          |/
          +----------------------------
                     time
    

    Finally, we have step five: Practice and hone your skills. Oh shoot, the progress now feels like this:

          |     ___________________
          |    /
          |   /
    skill |  /
          | /
          |/
          +----------------------------
                     time
    

    I call this the learning plateau, and it seems that when trying to learn new skills, arriving at the learning plateau is an inevitable part of the process.

    It goes like this: In the beginning, the learning curve is linearly increasing, but at some point, it starts feeling like the curve is flattening out and the improvements become smaller and smaller. While this is not inherently a bad thing, it gets frustrating when you know that you can improve, but there is no clear indication of progress.

    When it comes to playing the guitar, knowing all the scales, chords and music theory there is to know will not help with the speed of the guitar play, or the coolness of the guitar riff improvisations. Improving this particular subset of skills takes exponentially longer than learning a new chord. At this point, it is easy to start making excuses for practicing less or even giving up entirely. I kind of did that…

    Bend the curve

    So how does one deal with being “stuck” on the learning plateau for a particular skill? To be honest, I don’t really know, but here are some thoughts:

    Decide whether it is actually an important priority to improve the skill.

    For example, is it really important for me that I improve my guitar play? Will I see any long-term benefits from putting in that effort or am I content with the current skill-set that I have obtained?

    It seems silly to continue pushing forward if it does not feel “important” to do so. However, in my own experience, lost interest can sometimes be the consequence of facing big difficulties rather than an actual loss of interest and that is a bad excuse for quitting :-) This actually leads to:

    Realize that it is always possible to improve.

    Shake off that fixed mindset and start nurturing your growth mindset. For example, learn to play that guitar riff at 120 beats per minute rather than 110 — not a huge improvement, but it is an improvement. And playing the guitar just a bit faster sometimes opens up for playing different genres of music or making improvisation more interesting. Small improvements add up.

    Form productive habits.

    It is no secret that the people that get very good at their trade (whether it is art, business, entrepreneurship, etc.) put in a lot of deliberate practice, directly or indirectly. The overnight business success is a huge myth and even the most talented musician has to practice several hours per day. I recently stumbled upon an inspiring quote from Andrew Ng, a prolific and well-known figure in the Machine Learning field:

    When I talk to researchers, when I talk to people wanting to engage in entrepreneurship, I tell them that if you read research papers consistently, if you seriously study half a dozen papers a week and you do that for two years, after those two years you will have learned a lot. This is a fantastic investment in your own long term development.

    But that sort of investment, if you spend a whole Saturday studying rather than watching TV, there’s no one there to pat you on the back or tell you you did a good job. Chances are what you learned studying all Saturday won’t make you that much better at your job the following Monday. There are very few, almost no short-term rewards for these things. But it’s a fantastic long-term investment. This is really how you become a great researcher, you have to read a lot.

    People that count on willpower to do these things, it almost never works because willpower peters out. Instead I think people that are into creating habits — you know, studying every week, working hard every week — those are the most important. Those are the people most likely to succeed. Andrew Ng

    The question is: How the hell do successful people get motivated and how do they stay consistent? Andrew Ng seems to suggest that forming habits is important and this is a topic that I have only recently started researching in more detail. I read a blog post recently about forming identity-based habits and that was a good starting point for me at least.

    Take the first step.

    It sounds almost cliche, but taking the first, small steps towards a specific goal is important. It is also a good place to end this post. It is my first step into a hopefully more creative 2016. Happy New Year and thank you for reading :-)