Work-life Balance: Fear vs Happiness

Early mornings are when the sun is not yet on the horizon. The sky is lit, yet still dark. This is a moment of the day I wish I would spend more time on. I would be outside, having a nice cup of coffee, then I would maybe have a calm walk where I make sure I hear and smell the trees. Everyone is still asleep, there are no cars yet, and it's very cold. For as long as I can remember, early morning and afternoons shuts down my coding mood. I'm sure there is a primitive part of me that wants me to go outside hunt or forage berries because it's daytime and the panther is gone. Get your spear ready you idiot don't just sit there or you'll starve at dinner time.

Another observation is that during the daytime, there is this incredible sense of discipline, status quo, and reality. The daily routine that humans rely on for comfort and certainty is all set in motion.

Unfortunately for night owls, according to a recent study by Christoph Randler and Lena Saliger of the University of Heidelberg there is a major difference between the personalities of a morning and an evening person. And their study supports a strong correlation between being a morning person and conformity. The night owls scored the lowest in that regard.

As a night owl, the evenings are better at fostering a sense of imagination and out-of-the-box ideas.

This brings me to my main point, fear versus happiness. Imagine you're thinking of drinking coffee at 11 pm because you are finally going to start "that thing you are intending to work on for so long" say an artwork, that dress, or any project. You get a surge of dopamine, and you're about to make that coffee but somehow why does it feel so wrong. You might say "Right, I'm now a grown adult and I have responsibilities."  Mostly (according to my friends) attending to one's responsibilities is justifiable here and so we chose to proceed to go to bed early and wake up fresh tomorrow. It is a socially acceptable response, and it's natural for morning people.

But is it really justifiable? The fear of not meeting OKRs, sprints, story points, deadlines, or any other terms for over-ambitious expectations. Will you put every effort into those even it does not usually incentivize financial stability? Or maybe, we tend to pride ourselves as honest and hard-working people. But is it? should we really subject ourselves to someone's moral principle just to toil and somehow deny ourselves our own simple moment of happiness? Personally, being able to do what you love to do where money is not important, is true happiness. Just keep that roof above your head as much as you can. So I will explain further how we shall accomplish this.

Now, what about honor? Yes, an employment contract is still a contract and it should be honored. So what if the effort requires long hours of total concentration and creative thinking. This is where it gets complicated. The first thing to figure out is to find your ideal Attendance to Effort Ratio or A/E. Simply Attendance is how often you attend meetings, your overall presence on slack, how often you take vacations and paid time offs. The Effort is the overall contribution to the company's products and services for a software company this means how much effort will you put into shipping features and fixing bugs. This will depend on the team that you're in so here is the steps:

To find your attendance to effort ratio:

  1. Rank every programmer in your company. You start on who is the highest contributor, this is the person who carries hard up to to the lowest contributor.
  2. Find someone in the middle of your list and figure out how much is that person's A/E ratio and adjust yourself to them

Now you have your A/E ratio. You have two choices and possible scenarios within those choices. But first, ignore the person on top of the list and just pretend that person doesn't exist he/she will soon leave the company anyway.

First is 1:2 ratio means you are giving effort more than what your base effort is supposed to be. That means you sacrifice your own happiness because you believe it will make other people happy, you picture the customer is going to be happy management will adore you. And because everyone is happy you are also happy. Because of your 1:2 A/E ratio, the founders will become rich after exiting in two years to the future. And they will become billionaires and happy as they can be. But you are still one paycheck away from being homeless you still fear getting fired, regretful for not doing the things you love. After the company got sold they decide to cut cost and is now outsourcing your job to other countries. You got laid off and you're now working for another company.

Note that, there is a poor chance that management might actually be happy, it is much possible that is that they become less annoyed at you. Your salary is too expensive for them. It's a slim chance as well that because you fixed something you are actually happy? maybe for an hour after shipping. but wait until the bug reports come in. They will probably get to you while you are in the middle of working on another feature or fixing another bug.

The second is the 1:1 ratio, you are average and in the middle of the talent pool. But you get to spend more time for yourself and you are as happy as you can be. Management will probably look to outsource your job right now or the customer is looking to switch to your competitor. You got laid off and you are now working for another company. The result might be the founders are now bankrupt or the product is on life support. You got laid off and you're now working for another company

Whatever you decide I wish you the best but remember that in capitalism your labor is supposed to produce profits for the capitalist and that is what only binds you from them. It's not in their best interest to make you happy. Their ultimate goal is that within 2 years they will get their jackpot. But that goal doesn't matter to you, you are not the capitalist.

I hope you notice that on the 1:1 ratio you have a guaranteed or high chance of being happy and having a fulfilling life but that roof above your head for either choice is in danger. Fear will always be there.

 

Minimal Jazzy House Coding Music: Below Surface – Souvren

I wrote a lot of sound design content here because I've been doing electronic music production lately. Music production started for me when I tried OpenMPT some time ago. OpenMPT didn't really have a lot of features back then it was a difficult software to navigate and my tracks were hot garbage. Music production as a hobby was also very expensive as the gears, sample packs and plugins were all too much to take accumulatively. Eventually, I got bored and gave up and I realized it was distracting my career as a developer. Below is my understanding of the track. It goes more of technical details on the sounds I hope you'll like it.

Below Surface - is a smooth vibey programming track as it has a constant jazzy groove. Sometimes when you encounter a brick wall with programming, for me that is very often, I tend to approach the problem with brute force of solutions. I get really impatient and forget that problem solving like coding is still a creative skill. This track would hopefully calm the nerves during intense coding sessions and set aside time for calm reflection and focus

Minimal Deep Pads - from the intro, you'll hear this low-frequency minimal deep pad. A calming bassy synth that is a common sound on many chill tracks in this genre. Osc is a square wave with a low pass filter is around 180-310hz which already occupies the limited space for many instruments. To add thickness and depth unison and a bit of detuning

The vibe is set into motion as the pads are sidechained using a ghost kick. The track's ambient is enhanced by adding hi-hats and percussion to add brightness to the intro. Then it introduces a synth lead that reminds me of slow jazz played late light on the local FM radio.

The deep pads then get replaced with some minimal house keys played in triplets. It's very lush, warm, and low passed. I noticed that the percussions that started during the start of track have never stopped playing. It's either the kick would but not the percussions.

During the peak of the track, donk bass is presented and I notice that it is very light on the subs and if I am not mistaken it is cut somewhere in the low mids 100-200 as that area is so tidy. The keys play on alternate with the pads, they don't play the same range of notes. When the pads play the keys play the high notes and when the keys play the chords, the pad ducks them with sidechain.

That's all for now. I really like this track and it is always playing in my background. I hope you try listening to it and like it as well

Chill Coding: Reach – Jox Talay

Some years ago when I was still a young junior programmer, I realized that I get easily distracted by ambient noise while coding. Sounds like cars or birds can pull me away from my deep thoughts, so I started listening to the FM radio. This quickly became a wrong choice as the radio is very attention-grabbing. Rap music, radio commercials, talkative radio djs, etc.. I looked for mp3s and got into Brian Eno's Music for Airports. I quickly became bored of ambient and tried classical music. Classical is ok sometimes but it gets boring too. So for several years I have studied and experimented on what music works and what doesn't while I code.

This is my first track review of my favorite programming music.

Reach - Jox Talay, is a fantastic chill-out lounge with a very minimal vocal track. The artist starts the song with a pleasing saturated 3 chord synth intro that sets the entire vibe of the track. Deep house lounge music is my favorite coding genre as it is passive and places itself in the background. The track's low end has a punchy kick and sets the bass beneath it so you'll feel a groovy movement while listening. The clap is distorted and probably reduced to a lesser bitrate and has some white noise, also there is very minimal transient. The chords never stop with this track as it is very much the theme of this genre. It only fades out filtered and comes back again much like your usual french house track. I also love the sidechaining and how punchy the feel of the track is. The Hi-hats and percussions are also calming and crunchy to the ears as they beat their rhythm.

The track is easy to listen to as there are no tension chords. It is played on a Db major key as well. Again, there is also no change on the chord progression so the vibe is constant and the listener stays in the good mood throughout

The mixing is heavy on the low end and upper mid. The higher frequencies have a small boost and compression. Then I notice the peaks of the hi-hats are tamed.

Lastly, vocal chops are minimal and set very far as the artist set reverb in a perfect spot location of the imaginary mixing stage. Very professional mix overall and there are no gaps in transitions.

Surgical Teams

I have been recently playing the game Wilmot's Warehouse. It's a puzzle management game about managing a warehouse where you receive items and also deliver orders. It's very relaxing yet fun. It also resembles programming in such a way that it is difficult to scale. The game is easy in the early minutes where you only have a handful of items to manage. With programming it is also the same, early projects tend to be enjoyable as everything is easy to remember and understand. The point I'm trying to make is how people tend to underestimate how complex the craft of coding is at scale. Imagine playing the game Wilmot's Warehouse except you bump the items 100x and with a group of 20 people.

I think because coding is still a new craft and we are still trying to figure things out. Every time we commit code,  the project gains weight in complexity. Human brains can be limiting when you have 10,000 lines of code it's hard to locate and piece together everything. This will exponentially increase when more programmers are added to the team.

You see in the programming world, you will always hear the term 'best practice' which means any code is harmful except my own. These will have tendencies to be tribal decisions so be aware there are no poor or best practice. It's just a popularity contest, more support for this practice tend to gather more influence to be the 'best practice'

While I have no solution to provide I think I can offer this advice: Gather only the best people and give them autonomy - not just treat them like gods.

I think Fred Brooks has the best metaphor for this is the 'Surgical Team'

Mills proposes that each segment of a large job be tackled a team, but that the team be organized like a surgical team rather than a hog-butchering team. That is, instead of each member cutting away on the problem, one does the cutting and the others give him every support that will enhance his effectiveness and productivity.

And what about project managers? Don't let them get near or even talk to the Surgical Team! Some programmers go offline in a cave for 2 weeks and suddenly they develop UNIX. Watch this video of Jonathan Blow (34:15) about productivity on where he mentions how Facebook and Twitter employ so many but offer very little change to their software.

As we get more dependent on software in our daily lives, we tend to ignore the programmers and the value of their craft and how they are just like cogs in some machine. I feel this is especially true in the corporate IT departments where they are mere support departments like Human Resource. I'm very sure if there are commissions in sales it should be divided to the programmers as well as the software sells itself.

I think we need to re-evaluate since software is a necessity in our society nowadays

 

 

Why I’m Losing Trust in Open Source

Back when I was starting to code several years ago. I picked up The Cathedral and the Bazaar by Eric Raymond and I was blown away at the idea of free software. Just in case you are not familiar, free software as in freedom and not free beer. Free software back then was this super radical and idealistic concept whereas you make a software product commercial or not, but when you distribute it you include the source code of it. The person who got your product would eventually continue to develop it and it will evolve and continually improve as it gets to many users. You then will be looking at their version of your product and will see how it has grown further. Think of it as a community garden where everyone grows their vegetable and anyone would then take pointers on some of your crops and grow their improved version. Eventually, you'll see where you are doing it wrong by looking at how they tend their garden. This is not necessarily free food for everyone - although it's common. It's the freedom to copy and use my garden set up so we have bigger crops next harvest time.

This is what happened to Linux, nodejs, Ruby, etc.. I've believed in it much so I joined Sourceforge joined a team, also started a project myself even. I followed this radical concept through the years and publish my projects openly on Github. It was fun and there is some sort of social acceptance when people see your ugly-looking code yet they accept it and submit their ugly-looking code as well.

Facebook, Apple, Google these companies are worth trillions of dollars, and they all at one point when they are still small companies depended on open source. Their founders built an MVP and took money from VCs and then had to responsibly return their money 10x. They eventually all cashed out and now driving luxury sports cars. Meanwhile present-day Linux desktop is still dead. Open source maintainers abandon projects due to lack of time and interest. They say why not just use GPL but if you license your code using GPL you will not have users. Developers can't even share the name of the software they are putting your code into because of the NDA they signed. Sometimes it's just a simple request like attribution and compliance is still uncommon.

Life as an open-source maintainer is sometimes a life threatening endeavor

Society, Conglomerates, and Capitalism killed free software and nobody cared. It's all about 10x ROI and taking advantage of some poor idiot programmer clueless in business.

Recent TCP vs UDP Experience

Recently, I've made a new feature (but now removed) to a secret project where it loads the screen instantly after pressing the connect button. When I mean instant, I mean in about 1 second you'll see the host screen immediately. This was meant to fix the long handshake times via webrtc. I still have no clue why the ice gathering process on the Mac sometimes take about 15 seconds. Sometimes for some reason the ice gathering fails too.

Anyway, the instant screen share, was done by sending the h264 packets to a nodejs + socket io server and routed to the client. The result was I would say poor and I had to remove it. The fps is horrible, sometimes the fps would go up really high then it will freeze and fps will go down. and what the supposed to be live screen sharing experience is more like a recorded one as the 'live' screen the client viewing at the moment is about only 30 seconds ago.

The problem is that socket io because it is based on websockets and TCP, the packets of the host will be in ordered sequence and every packet must be completed before the next one is accepted. With UDP this is not the case, with each packet sent to the client will be received no matter the order it arrives. The h264 packets are very small but they are very high in volume so you will have to decode them all as they arrive. What will look like if you have unordered packets with h264? you get some portions of the frames pixelated or garbled but its negligible and the picture you are seeing will recover eventually but the benefit is that the fps is consistent and the latency is low (it feels as if the remote desktop is real)

So I don't know the solution yet. UDP is not implemented on browsers and it won't probably for the reasons listed

Somehow, I probably need to drop packets if the video stream gets late for the viewer

Real Time Streaming Protocol sounds like a good path though or I might try UDP hole punching

if you have suggestions please comment below.

The no-architecture source code architecture

When I start a project I usually just write the part on whatever is needed at that time. There is no planning, no notes, and no whiteboard and I just do whatever my intuition is telling me. I feel if I stop coding the momentum will stop and I reset. I would then have these many micro-projects that do only one thing and then convert them into single functions on the main project. I avoid classes if possible.

I would seize the opportunity while I'm full-on velocity. Quickly dived into my code editor without any thoughts of any fear of failure and uncertainty. This is the time when I am naive is important. It is the moment that I can create new things. The result is a new but broken prototype that kind of works.

The next day I would see the code and it will be a mess. I wouldn't dare to show this to anyone as I think they will never consider working with me in the future when they see it. It's not that I'm a bad programmer it's just I don't pay much attention to the source code architecture.

The problem with source code architecture is that it's objective also. I would think that every person has a different tolerance for what is messy and what is clean. I have worked with codebases that were serving 2k+ monthly paying customers but a majority of its code is sitting on a single index.php file and a few extra component classes. A lot of us will think this is a poor design choice but the product doesn't care what you think while it is making money.

It is also hard to prioritize the refactoring when every day people find bugs and you have to patch them on the current non-refactored state. Once you add these fixes it just makes it harder and harder to refactor as the refactoring could cause regression on these fixes. It's like you've already invested and you don't wanna touch it anymore.

Thus the popular solution is to start adding unit tests. But that will just take more time as you have to write and maintain extra lines of unit test code. This may be a valid solution for companies with vast resources like FAANG companies. But to a simple person (a.k.a the 90%) this may only delay everything else.

Just look at WordPress the software that powers 60% of the websites around the world

I would say I love functions very much and the no-architecture software architecture fits me. I like how Sublime Text 3 and CMD+R would let me quickly type the function name and jump to that section of the code. It also feels good that I have a working prototype for myself at the end of the day.

Happy new year! wishing you all a healthy 2021

The story so far

A long time ago The first time I got into programming was in high school and they have just thrown out the old typewriters back then and replaced them with IBM PC XT. My school had also set up the computer laboratory air-conditioned. But it was rather too hot because there are about 15 IBM PCs with lots of students in one room.

They taught us Turbo Pascal. I quickly fell in love and thought this is the only thing that I'm going to have good grades with. I had overall poor grades back then. But the computer subject I easily top the class with. There were only two things I was I was good with back then - playing the bass guitar with my band (we covered Pearl Jam) and programming and I had non-programming-kind of friends too.

Nobody knows besides writing on Wordstar how or what computers are for back then much less what is programming. So it's quite weird to be good at something useless.

Anyway graduation time, I was hoping to get the Best in Computer award but instead, they gave it to someone who is already earning high honors and is also on the Best Section class.

I was disappointed back then and even now I just learned on Facebook that that person didn't even pursue programming instead became a successful doctor.

College time I took Computer Science and we had Visual Fox Pro and then Visual Basic. Windows 95 was amazing. My parents bought me a windows pc for college. but I only got addicted to playing video games like warcraft 2. The games are too expensive even pirated ones, and I didn't have a lot of money.

Because I was so confident in programming and needed money, I approached a local computer shop and told the owner I can make computer programs for him.

Perhaps I was too confident, the computer inventory systems I made were buggy and the reports were very inaccurate. I realized that it's too hard for me and became lazy and eventually we had to part ways.

Then after I graduated college I had to find a real software company so I can learn from them. I took a job as a junior Powerbuilder developer with a salary so low it can only support meals and commute expenses. I remember having to order myself one or two sausage mcmuffins at Mcdonald's would take my entire week's budget. I had to ask the office canteen manager to defer paying for my meals until salary time.

So after a while, I have had enough and I threaten them that I'll resign or give me a raise. They gave me one but it was not the one I'm asking - so I left. At this point I think it was a poor decision, I was young and stupid.

After a while, I joined two more companies and two independent software contracts locally from there. Then time passed and the internet took off. I eventually learned about Upwork and got regular jobs in the UK, Japan, Australia, and the USA. The USA has the best employers - they pay much more.

I've then tried to make apps for myself and joined hackathons.

I realized investors only like winners (not ideas or apps.) i.e They want people good at raising money. I realized that I am very poor in that regard talent-wise. The irony is that the people who are good at raising money are the kind of folks who don't need it.

Anyway, thanks for reading I worked hard for the past few months. Now that the project is coming closer to shipping. It was quite refreshing to write my thoughts again.