Beginner’s Mind – Mindfulness and software development (4/8)

Main Article

This attitude goes back to a wisdom from Zen Buddhism:

In the beginner’s mind there are many possibilities, in the expert’s mind there are few.

Suzuki, Shunryu (1970). Zen Mind, Beginner’s Mind[i]https://archive.org/details/zenmindbeginners00suzu/page/21/mode/2up

Achieving expert status in something means, among other things, that you know what to do in a given situation more quickly than a novice – simply because you’ve experienced similar situations before after many years of professional experience and remember them intuitively. However, if you are used to knowing something better than others, this can lead to arrogance and resistance to advice.

“You don’t need to explain that to me, I’ve been doing this for 10 years”, might be a sentence the novice might hear when making a suggestion to the expert. “Maybe, but you’re also doing it with the understanding you had 10 years ago,” is the answer the beginner doesn’t dare give.

Of course, expert status is extremely valuable. Beyond a certain level of complexity, it is simply not reasonable for a novice to solve a problem without experience. I don’t want to say here that you don’t need experience for good software development, that would also contradict the principle of patience. But you must not rely on your experience alone. I’ll give you an example from my own working life:

A few years ago, I looked into push notifications on iOS in great detail for a messenger development project. At the time (2016), Apple was using an counterintuitive binary api[ii]https://web.archive.org/web/20201101010227/https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/BinaryProviderAPI.html with proprietary response states and non-standard TCP ports. In a corporate network with firewalls and proxies, something like that can be quite a challenge. And so, I was mighty proud when it finally ran reliably and I was the de-facto push expert on the team.

Four years later: again push notifications are needed for a new app and who better to do that than me, who already invested many hours years ago and built a push service that has been running successfully ever since? So I start right away and since I’ve done it before I also make faster progress. But at one point I have to read something up again and what do I learn? Apple has discontinued the binary api in favor of an HTTP/2 api[iii]https://developer.apple.com/news/?id=c88acm2b. This made all my expert knowledge and work invested until then obsolete.

A novice would have first googled “apple push notifications how to”, then found Apple’s “Local and Remote Notification Programming Guide” [iv]https://developer.apple.com/library/archive/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/APNSOverview.html#//apple_ref/doc/uid/TP40008194-CH8-SW1 and known how to do it right in 2020. And me? I was above googeling because I thought i already knew what to do and dashed off with my solid but outdated knowledge, causing a delay.

Therefore, even as an expert, it is useful to take the beginner’s views from time to time.

To conclude, I might also add at this point that I am extremely happy about apple decision to discard the binary push api. Yes, I had a solid solution in place at some point and now it won’t work any longer. But the time required to develop an HTTP/2 push service was a fraction of the time invested into the binary API. On top of that, it integrates much better into a corporate network, is safer, easier to understand and best of all: Token based authentication[v]https://developer.apple.com/documentation/usernotifications/setting_up_a_remote_notification_server/establishing_a_token-based_connection_to_apns – with elliptic curve signature (ECDSA) – instead of p12 private certificates that expire once a year.

Add a comment

Your email address will not be published.