Overcoming Optimism with a Premortem

I’ve been reading the excellent book Thinking, Fast and Slow by Daniel Kahneman and came across a strategy for dealing with a common human behaviour problem that has direct impact on software development: overconfidence. According to Kahneman’s research, “overconfidence is a direct consequence of [how we think] that can be tamed — but not vanquished.” In other words, our brains are wired to make overconfident predictions and forecasts. In software development, this overconfidence usually presents itself in estimates of the importance of projects to the business, the success rate of new projects, and in development timelines. We all seem to have an intuition that these biases exist, but what can we do to counteract them? One idea presented by Kahneman’s colleague Gary Klein is the premortem. ...

January 24, 2018 · 2 min · Kevin Sookocheff

What is Functional Programming?

I’m documenting my journey from functional neophyte to (hopefully) functional programmer by writing a series of blog posts on the topic. This is the first post describing what, exactly, the word functional programming means. Functional programming is a programming paradigm that lives alongside other programming paradigms. None of these paradigms have a precise, unanimous definition or standard, and there is not real agreement on which paradigm is better or worse for building particular types of software. ...

January 23, 2018 · 4 min · Kevin Sookocheff

Cloze Deletions

This page provides a collection of premade Anki decks filled with cloze deletion tests for learning a second language. Use the table below to find the dataset for the language you speak (the native language), and the language you wish to learn (the target language). Native Language Target Language Anki Package Audio CSV English French eng_fra.apkg eng_fra.zip eng_fra.csv English German eng_deu.apkg eng_deu.zip eng_deu.csv English Spanish eng_spa.apkg eng_spa.zip eng_spa.csv English Italian eng_ita.apkg eng_ita.zip eng_ita.csv Frequently Asked Questions How to Import these Decks into Anki You can import the cloze deletions into Anki using the CSV file provided for each language. To import a file, click the File menu and then select Import. ...

January 8, 2018 · 3 min · Kevin Sookocheff

Improving Test Coverage Using Exploratory Outcomes

In general, developers test features by focusing on the positive outcomes — the so-called “happy paths”. Unfortunately, this optimism can blind us to the less obvious or less probable outcomes that can cripple an application. I found one way to counteract this tendency is to try and “go beyond the happy path” by exploring the outcome of unhappy paths through a feature. I came across this idea in the excellent book Fifty Quick Ideas to Improve Your Tests by Gojko Adzic, David Evans, and Tom Roden, and expanded upon the book Writing Great Specifications by Kamil Nicieja. ...

December 22, 2017 · 3 min · Kevin Sookocheff

Bulk Generating Cloze Deletions for Learning a Language with Anki

tldr; Looking to learn a language using cloze deletions and Anki? Click here. One challenge in learning a second language is the sheer amount of vocabulary required for fluency. For example, one study has shown that the average eight year old knows 8000 words, while the average adult might know somewhere between 20,000 and 35,000 words. University graduates might know upwards of 50,000 words depending on their specialization. As an adult learning a second language, exposure to a lot of different words in their context is one of the best ways to learn vocabulary. A common test for learning words in context is called a cloze test. ...

December 20, 2017 · 8 min · Kevin Sookocheff

Building Empathic Software Using Specification by Example

In most organizations, software development is split between two groups — product management and engineering. Product management is focused on building the right system. This requires product managers to meet with users, try and understand their needs, and develop solutions that meet those needs. To actually develop the solution, product managers must involve engineers who are focused on building the system right — writing the code, making it stable, and supporting it in production. Unfortunately, there exists an uncomfortable gap between product managers and engineers that forces the product manager to explain features in terms that an engineer can implement, and that forces the engineers to explain technological constraints to product managers in terms that a product manager can understand. To bridge this gap requires careful and considerate communication. It requires empathy from both product managers and engineers. ...

December 15, 2017 · 4 min · Kevin Sookocheff

How Fast Does it Need to be Anyways? The QUPER Model of Analyzing Non-Functional Requirements

We all know that a page that loads in three seconds will provide a negative user experience. But does having every page load in less than one second make a meaningful difference? How can you tell? When is enough … enough? Non-functional requirements such as performance are often not precise enough to be specified as discrete numbers. Rather, they work on a sliding scale of acceptability. Would slightly better performance be significantly more valuable from a market perspective? Would significantly better performance be just slightly more expensive to implement? When dealing with performance, usability, reliability and so forth, we often end up in a difficult trade-off analysis. ...

November 23, 2017 · 3 min · Kevin Sookocheff

What is CQRS?

Bertrand Meyer first introduces the principle of Command Query Separation in his book Object-Oriented Software Construction. The principle states that a well designed object should have methods that are either commands or queries. A command changes the state of an object, but does not return any data, while a query returns data and does not change any state. By dividing methods into these two categories, you will have a better understanding of what does, and what does not, change the state of your system. ...

August 8, 2017 · 3 min · Kevin Sookocheff

Dissecting SQS FIFO Queues — Does Ordered and Exactly Once Messaging Really Exist?

At first glance, Amazon’s First-In-First-Out (FIFO) message queues provide an excellent feature set for business-critical scenarios. With FIFO, the order in which messages are sent and received is strictly preserved. With exactly-once processing, message duplicates are not introduced into the queue, and consumers control when a message is made available for redelivery. Reading past the marketing hype, how well do FIFO queues work in the real world? This article takes a deep dive into SQS FIFO queues to test the claims of message ordering and exactly-once processing, paying particular care to the conditions under which these claims hold. I show how exactly-once processing can be achieved, and how that message ordering is preserved through failure conditions. I conclude with an examination of the relationship between in-order and exactly-once processing and atomic broadcast and consensus. ...

August 1, 2017 · 12 min · Kevin Sookocheff

Learning a Language with Amazon Polly and a Serverless Chalice App

For the past year I’ve been making a concerted effort to learn French using the methods from the book Fluent Forever, which is an excellent resource for learning how to learn a language. For those not familiar with the method, it boils down to this: Learn Pronunciation: knowing how to correctly pronounce words in your target language makes everything else easier. Learn Frequently Used Words: not all words are created equal, learn the most frequently used words first. Learn Grammar: put together grammatical sentences using the words you already know. If you turn your head to the side and squint at that list, it somewhat resembles the steps you would take to learn a language as an infant — first understand the sounds of the language, then learn words (“mommy”, “daddy”), and finally put together correct sentences. In addition, as an infant you have a constant source of high quality input helping you learn words and grammar. You can imagine the following “conversation” between an adult and a hungry child: ...

July 28, 2017 · 11 min · Kevin Sookocheff