Showing posts with label ACTA. Show all posts
Showing posts with label ACTA. Show all posts

Tuesday, 3 March 2026

Ten Years of GitHub Usage

There was a time I shuttled code between the workplace to home, in the most comically retro manner possible - via email. I would be fiddling with some stuff at home, think it would be interesting to use in a workplace project, and send it to my work email account. And at work, if I didn't feel like leaving my code in the workplace and wanted to continue over the weekend, I would send it to my personal email. As the frequency of this increased, it soon became untenable. I actually only really started a GitHub account almost a full two years after starting this blog.

It's been ten years since. I looked at the heatmaps generated from my activity, and there were some interesting patterns. Really took me back. I realize that just going by the number of commits is a poor metric. Almost as poor as the number of lines of code for measuring code quality. But we've all got to start somewhere...

1. 2016 (46 commits)

At this time, I had just set up my GitHub account the previous year. The line chart of my contributions could be charitably described as "tentative".


Looking at the heatmap of my activity, the word that comes to mind is "sporadic". I used it a couple times a month, each time to commit a bunch of stuff.


Looks pitiful, eh? Basically I was just feeling my way around. Getting comfortable with the interface. There were even months where I had no activity whatsoever.

2. 2017 (96 commits)

The second year wasn't that much better, at least in terms of consistency. There were still a couple months where I failed to register any activity.


The line chart shows a marked improvement over the previous year. Though, to be fair, it's hard to do worse.


However, in the months where I did do shit, there was an uptick. Instead of a couple commits here and there, I was starting to register double digits on a semi-regular basis. This was definitely an improvement. Much of this could be attributed to me coding more ambitious projects. Projects that couldn't just be finished in a couple hours, and had to be periodically saved.

3. 2018 (179 commits)

This was the year one could practically see me shifting into third gear. There were no months where I neglected GitHub. More and more months were registering double digit commits. At the highest point at the end of the year, I even registered 50 commits. Compared to what I do consistently today, this is nothing. But it marked a start of something.


The trend line shows that I was still finding my feet, though some months were better than others. I was struggling for consistency as far as GitHub usage was concerned. This was at least partly due to me being busy studying for my ACTA.


Room for improvement? Definitely. But I was still using GitHub pretty much like a layperson. I used it to store code and not much else. I wasn't using GitHub anywhere close to its full potential.

4. 2019 (138 commits)

Things dropped off slightly in 2019. I suspect a lot of it was due to adjusting to my first year of being married and all. (Yeah, way to blame the wife, dude.)


My GitHub contribution was a jagged line. I would be a GitHub hero for a couple of months, then almost a zero the next month.


And in October, I even registered an entire month without a commit. This might have been due to the impending dominion of COVID-19. Suddenly we were all distracted by this potential life-or-death issue.

But for sure, my use of GitHub was still going strong, just not as strong as the previous year.

5. 2020 (286 commits)

This is where it started to get interesting. Some months, my usage climbed sharply, and plummeted just as quickly the next few months.

If you look at the heatmap below, it almost mirrors the line chart - periods of increased activity punctuated by periods of low activity. If there was any consolation, there were less fluctuations than the previous year.


This was because I was retroactively going through all my Readme files, and reformatting them for better readability. Also, now I was actually establishing proper code commits instead of merely updating via copy-pasting directly into repositories. I had GitHub Desktop open on my Lenovo, and open on my MacBook. This led to a whole lot of increased activity.

6. 2021 (227 commits)

This year, activity dropped off slightly, though my usage was arguably more consistent than it had been the previous year. The line chart shows a jagged line, though less jagged than previous years, with a peak near year end.


The heatmap of my activity was looking more spread out.


I was going through school for Data Analytics, and this affected the time I had for code experimentation. I'm proud to say, though, I managed to dedicate at least this much time.

7. 2022 (651 commits)

This was the year my usage really started to take off. For one, I was really seriously beginning to commit code the way GitHub was meant to be used. The lowest number of commits I tracked was 34 in January, and it never fell below that number for the rest of the year. The highest at one point was 76 in March. The line chart still shows a jagged line, but the minimum has risen dramatically.


The heatmap shows an ever wider spread of contributions over the year. A whole lot more heat. Almost three times the previous year's.


I had also begun to manage the contents of the website on GitHub, under a private repository. This was so I could look up previous versions of files and potentially restore them. I really should have done this a lot sooner. The thing was, my Lenovo was beginning to sputter and I really didn't feel comfortable having all my content stored there. Thus, my hand was forced.

That was pretty much how the number of commits jumped that much.

8. 2023 (872 commits)

The number of commits continued to jump. Compared to the peals and valleys registered in previous years for monthly commits, it was a relatively straight, consistent line.


I had begun to use GitHub to store my blogging drafts. Now this may not sound like much, until one considers how I blog. It starts as a skeleton made out of ideas in point form, and slowly I flesh them out bit by bit. Along the way, I may make revisions - rewording and rearranging stuff. I may only have over 70 blogposts a year, but that's multiple commits per blogpost!

This was partly due to my Lenovo being on its last legs. I began the process of writing drafts in GitHub instead of storing them in text files in my Lenovo, and when my Lenovo finally died in the latter half of 2023, my caution was rewarded.


The end result was, there were only three dates in the entire year where I didn't register a single commit. Compared to last year, the number of commits in a single month ranged from 61 to 80. In the heatmap, you can see that almost the entire map is shades of green.

9. 2024 (991 commits)

Now that I was writing drafts in GitHub full-time, that translated to daily commits. I would get an idea, open up GitHub, and commit it. I registered maybe one or two dates the entire year where I didn't commit anything. Most of the time, though, I was supremely consistent. If you look at the graph, the line was even smoother than the previous year's!


Looking at the chart, my usage started out at 70 plus commits per month, then steadily climbed to the high 80s through the course of the year. I remember at that point trying to rein myself in. I didn't want to end up setting a bar I couldn't commit to long term. The heatmap, as in 2024, shows almost total coverage of shades of green, but a lot more is bright green.


In addition to that, some of my projects were a little complex. They required frequent commits. I could push ten commits in an hour on a ReactJS project. This was also the year I started with NodeJS, and as you can probably tell, this also translated to a lot of commits.



10. 2025 (1007 commits)

The trend continued. I was hitting my stride in my usage of GitHub, and the consistency was really starting to show. Commits per month were now in the 80 plus range, until near the end of the year where I decided to give myself a bit of breathing room. Looking at the trend line, it was almost a straight line except for that year-end dip.


In the case of blogpost drafts, sometimes my updates were just little typo corrections and adding a few sentences here and there. Most bloggers will tell you that the incremental nature of writing a blogpost means that potentially a whole bunch of corrections accompany every one. While this was already the case in previous years, I took it up a few notches.


Here, the heatmap shows an entire year with no gaps. There is obviously higher usage during weekends. Of course, one commit could be as small as correcting a single typo, or be as big as including new functions into the code base. Thus, it can't be a complete representation of how hard I work here. But it's a decent indication.

What a decade!

It's interesting to me how my usage of GitHub evolved through the years. From just another online file system to a means of tracking code changes, and from there expanding to tracking all document changes. Even with code, my usage also changed, with more frequent commits due to establishing CI/CD pipelines.

Most of all, I think it shows my growth as a techie. My usage could still be improved, but at this point I think I'm getting close to a sweet spot. What has your usage been like?

With much commitment,
T___T

Sunday, 3 December 2023

Ode to my Lenovo

Two weeks back, my trusty Lenovo Z51-70 laptop gave up the ghost. It was showing signs well before that; consistently dropping my network connection, lagging severely when saving files and most tellingly, a noticeable flicker on the monitor. Can't say it didn't give me fair warning when on Saturday, it refused to power on.

Now, that was a sentimental moment.

Rest well, my friend.

I first obtained this flat white beauty during a Christmas Sale in 2014, when I was about to begin a Specialist Diploma in Mobile Apps Development. While my company at the time had issued me a decent notebook, I didn't feel comfortable using company property for my personal enterprise. I had a personal laptop, but it was on its last legs. Thus, I went for an i5 Intel Core that would meet my programming needs.

2015 to 2017

2015 was the second semester of my Specialist Diploma in Mobile Apps Development. With Java being the operating language, I installed Eclipse and the Java Runtime Environment. I also had NodeJS installed, and wrote apps in jQuery Mobile to deploy onto the mobile phone. This would perhaps be the most serious and intensive period of using the Lenovo.

Mobile app development.

Somewhere along the way, in addition to my steady diet of HTML, CSS and JavaScript experimentation, I experimented with things QBasic, LESS and AngularJS. An odd mix, I know, but I was having fun.

MeteorJS came along for me in early 2017. The lessons I learned here would help me years later when I experimented with ReactJS.

2017 to 2019

This was the period of my life where I settled down into a regular nine-to-five. I still experimented on weekends, writing D3 and ReactJS code. It was also the time I picked up Ruby and Rails, for whatever reason.

Like a stallion.

The Lenovo handled it all like a champ. It was tireless, inexhaustible, like a stallion in its prime.

Around the latter half of this period, I started working on my ACTA. Whatever work I needed done, I did it on my trusty laptop.

At some point during this period, I also got married. Late nights at the console were no longer viable, not if I wanted to sleep in the same bed as my wife. Still, I squeezed in whatever time I could.

2019 to 2023

This was the year the COVID-19 pandemic hit, and marked one of the longest durations my wife and I were geographically separated. During this time, my work on the Lenovo intensified, with me trying out Highcharts and VueJS.

During this period, however, I had acquired a MacBook and was gradually transitioning away from my faithful Lenovo which was starting to show its years.

Getting pretty old.

It was also when I embarked on my yet another Specialist Diploma, this time in Data Analytics. The MacBook handled Python and Tableau, but only my Lenovo could run Spotfire and  Power BI. It creaked and groaned, but ultimately delivered.

Why is this particular laptop special?

Why do I feel so strongly about this fella? It's not the first laptop to die on me, after all. I've lived more than forty years. But the last nine years of my professional life have been pretty tumultuous, and also represented the bulk of my career advancement and tech education, spanning two Specialist Diplomas and a Higher Certificate. This Lenovo was with me through all of it. I played no games on it. All I did was write code, and run code. (Some of that code were games I wrote, but we're just splitting hairs at that point!)

Much of whatever important files I have are saved on the cloud - on Google Drive, GitHub and Trello. Thankfully, I can resume my work on a new machine with little trouble. But I'll always treasure my time with this machine.


Rest In PC,
T___T

Friday, 20 May 2022

How I Became a Married Software Developer (Part 1/3)

His Teochewness is a married man as of 2018.

By now, most of my friends (and readers of this blog) would have received the news, though if it comes as a surprise to those reading this, it's probably because I didn't update my marital status on Facebook or post pictures on Instagram the moment it happened. I mean, what's the point? So I can let the world know that somebody wants me? Lame.

Reactions were fun to watch, though. My colleagues were left scratching their heads at my business-as-usual attitude towards it (please, people get married in Singapore every damn day) and any friends I told the news to, had to pick their jaws off the floor.

Me: Oh, by the way, I'm married.
Them: Yeah yeah we know, you're married to your job.
Me: Uh, no... I'm married to a woman. (cue dumbstruck looks)


Part of their surprise was due to the fact that I've always been a natural-born bachelor. I don't actively shun female company or seek it, nor am I the type to get lonely. Much of my free time is spent cooped up in my apartment writing code and generally doing very boring (not to me, though!) geeky stuff. They didn't even know I was dating anyone... again, because I just don't advertise this shit on Social Media. Whatever for, right?

So anyway, my fourth wedding anniversary is coming up and I thought, what the hell, I should write this down for posterity. Because the long arduous road to marriage was quite intimately tied to the winding rocky road of my tech career.

Before I begin, I should warn you that this is not some grand love story (though probably still a better love story than Twilight) and you may be bored shitless.

How it began

Back in the year 2015, I had just been laid off and I was spending my days in the neighborhood coffee shop, reading emails and scrolling through LinkedIn ads. The crowd was mostly familiar friendly faces - retired old geezers, grandmothers, working men and women, and the like. One of them was this girl from mainland China who worked around the area and had lunch at this coffee shop daily. Occasionally, she'd join the table I was at, and we'd talk until she had to get back to work. She was pleasant enough, but not really on my radar at the time.

Coffee and job search.

Soon, I got a job at a startup and stopped spending my days at the coffee shop. I would still see her around on weekends.

Life at the startup kept me busy until the startup tanked in 2016 and I found myself out of a job and spending my days at the coffee shop once again. Yep, twice in the space of a year. Life sure wasn't looking good for me, eh?

The First Date

The woman and I started talking again, and this time, she was complaining about having nothing to do because the shop she was working in was closed during Chinese New Year, and getting a plane ticket to fly home for the holiday was just too much hassle. I waggled my eyebrows, put on my sleaziest expression and suggested that maybe the two of us could go somewhere romantic.

Please note that at that time, I was joking. I was freshly out of a job for the second time within twelve months, and chasing skirts was absolutely the last thing on my mind. I was fully prepared for her to laugh it off. So imagine my befuddlement when she said "OK" without missing a beat and asked me where I was going to take her. Now I was in a spot. If I'd confessed I was only fucking around, that would have been embarrassing for both of us.

So we made a date for East Coast Park. On the day itself, she had gone to visit her cousin and I was supposed to pick her up and take her there. The sky was overcast, and it had drizzled in the morning.

Beach stroll.

We got to East Coast Park, took a nice long stroll along the windy beach hand-in-hand like some sweet young couple, had a late supper of handmade noodles, after which I sent her home.

And that was it. A perfectly run-of-the-mill first date.

Afterwards

As the days after that date went by, we started hanging out. I was still jobless, but we took nice midnight strolls around the gardens peppering the neighborhood. We might even have snogged a couple times. She kept me going through this phase, and eventually, I landed a job, where I was paid more money than I'd ever been. And once I got busy with work, our midnight strolls decreased in frequency.

Months after starting that job, I began my course in ACTA, and soon had even less time. I don't remember if I ever mentioned this, but I've dated several women before; and each time I was a crappy boyfriend, obsessed with my work, obsessed with learning more. It looked like old habits were resurfacing, but unlike the others, she actually seemed to like it.

And then she left Singapore. Her employer had forgotten to pay the levy for her employment permit, and promptly, it was cancelled. She had to return to China within a month. After she left, I got on with the task of earning my ACTA while holding down my job. We kept in touch regularly via WeChat, and I realized, to my chagrin, God damn it, that I kind of missed her. I missed the roundness of her face, the smallness of her hands, the way she'd spit the bones of her food out on the table, or pick her teeth with her fingers in front of me.

I know, I know, it's objectively gross. Don't judge me.

Use a toothpick, woman.

When she returned, a couple months later, it was by securing another job a lot further away from my place. This meant that we didn't see each other as often as we used to, though we still hung out on weekends.

Though at this point, I'm not sure why she still bothered. She had often pondered getting married here in Singapore because it would make working here a lot less troublesome, while I was quite adamant that I'd remain a bachelor till the end of my days. Up to this point, I hadn't even thought of her as my girlfriend, though in hindsight, for all intents and purposes, she was pretty much that.

Next

How we ended up getting married.

Monday, 28 June 2021

2020 - Three Jobs In a Year (Part 3/3)

The day of my next performance review arrived. However, in the morning, the was a bit of a hullabaloo over something I can't quite remember, and I asked a question. His reply was public, and scathing.

"Stop asking stupid questions, it doesn't help."

This raised an eyebrow. This guy wasn't even pretending to be nice anymore. He sure wasn't holding back. Fine. He wanted to play this game? Confidence bolstered by knowledge of my finances and my eventual plan to leave, I was more than willing to oblige. I held my peace, biding my time till the time for the performance review came.

HR was in the call, and before my CTO arrived, she told me that he could be a little high strung and come across as curt at times, leading me to suspect that this wasn't the first time he had rubbed someone the wrong way. However, she assured me that my CTO was "not a malicious person". I don't think the lady actually understood the problem. It wasn't malice. I had never considered my CTO to be a malicious person. My problem with him was that for a dude in his mid-thirties, he had the emotional control of a teenager.

Then my CTO arrived in the call. He started off by saying that while he had noted some improvement in my performance, he still wasn't confident in my ability to work in the company and he would continue to keep monitoring. He brought up certain concerns such as my perceived slowness in replying in the Slack chat, and actively encouraged me to "defend" myself against his accusations. I was amused at this. This guy wanted a fight? He had no idea what was coming.

It was my turn to talk. Here, I applied the Sandwich Method that I had learned during my ACTA days - start with something nice before saying something negative. I led with how much fun I'd had in these six months compared to the last three years at the previous, much larger company, which was the truth. The variety of tasks assigned to me had made things a lot more interesting. He seemed to be tickled pink by this.

Time for the stick.

And then it was time to give him the stick. The guy never suspected what he was walking into.

I began voicing my concerns, like how the things like code cleanliness and organization that he kept saying he valued and were missing in my work, just weren't present in the existing code base either. It was a huge mess, with me having to fix problems that had existed for years. Like the recent Cross-site Scripting vulnerability issues, that I'd already brought up in my first few weeks at work. I had thought it was bad; now that I stepped up my game (as he had wanted me to do) and actually started proactively looking for ways to improve the code base, it was worse than I initially thought. I stopped short of saying his code base was garbage, but the implication was clear: I blamed the tech leadership. Honestly, I figured that since this guy enjoyed pointing fingers so much, he wouldn't mind receiving some of the same. Seems fair, right?

Nope!

In a nutshell, he blew the fuck up. Accused me of trying to turn this performance review around on him, and questioning why I chose to bring it up now rather than during Tech meetings. He told me I should be more careful with my words (rich coming from him, really) and yes he was doing a bad job which was precisely why he needed people like me to step up. As he raged, HR had to step in and try to smooth things over.

On my part, as I calmly sat there and smoked a cigarette, listening to his raving through the computer screen and HR trying to stop him before he went too far, I couldn't help feeling unbelievably smug. This had turned out better than I had anticipated. My original intention had been to gently point out that the existing code base was every bit as crappy as his opinion of my work, and that he should maybe assume some responsibility being the CTO and all. Instead, he had chomped down on the bait like an idiot, and his little meltdown in front of HR was showing exactly what I thought: this guy was a loose cannon.

Aw, poor baby. I think I hurt his feelings.

Some of you may be asking; what did I hope to gain from this? Well, nothing at all. I understood that he had all the power in this contest of wills. But I had absolutely nothing to lose here; mentally I had already checked out and was prepared to be fired on the spot.

More importantly, my point had been made, and I hope it wasn't lost on him. All those times he had been putting me down in front of the entire team, he had forgotten one thing: I was a no-name web developer with no reputation to hurt. He, on the other hand, was the CTO and co-founder of the company. Should I ever decide to actually stop holding back, I could do a lot more damage to him than he could ever do to me. This was merely a scaled-down demonstration on my part; I had humiliated him in front of HR rather than the entire Tech Department. Actually, scratch that - I had exploited his weakness and caused him to humiliate himself. After all, regardless of the critical content of my message, I had unfailingly been polite and professional.

He had been punching down constantly. But once I started punching back after six months of taking his shit, I made sure it fucking hurt.

I was smiling the rest of the day, after the review ended. It later struck me that I hadn't had the opportunity to apply the last piece of the Sandwich Method as originally planned. HR had ended the meeting in a hurry.

In hindsight, though, I recognize that what I did to my own CTO is nothing to be proud of. No matter what a childish asshole he had been, I had allowed myself to be dragged down to that level.

Shit, I was supposed to be better than that. What had I become?

I'm not sorry it happened to him, because he pretty much had it coming. But I'm sorry it had to be me who did it. I've always prided myself on being above this sort of thing. This incident had shown me that when push comes to shove, I'm as capable of petty cruelty as anyone else. Hopefully, going forward, this does not become a pattern. It would make me a truly frightening employee to hire. Most people think that the revenge of a disgruntled tech geek is to hack databases and destroy code bases. No, what I had done was far more insidious... and legal to boot.

Getting the axe

And then it happened. One Thursday evening, he messaged me on Slack to berate me about yet another mistake I'd made, and admittedly it was a sizeable one. He told me to fix it by morning, and I actually made an honest attempt to do so.

In the morning, out of the blue, the DevOps Engineer sent me a message on Slack. As I no longer have access to that conversation, I can only recreate it from memory.

Him: I'm so sorry to hear what happened, and I just want you to know I had nothing to do with his decision and hope you find something soon.
Me: Oh, am I getting fired?
Him: Oh fuck, you didn't get the email?


Well, there you go. I wasn't sure I could look down on my CTO even more at this point, but kudos to him, he certainly was making a case for it. Not only had he fired me via email (what a spineless move - even the last guy to do it back in 2011 had extended me the professional courtesy of doing it face-to-face), he'd screwed even that up by sending it to multiple people... except me.

The charitable interpretation is that the CTO had finally had enough of me making mistakes and decided to just put me out of my misery instead of dragging out the probation process any longer than he already had. The cynical interpretation is, well, I'd finally given him a plausible excuse to do what he was itching to do.

I received the email in question, after the CTO re-sent it. The first two lines went along the lines of "your contract has been terminated as of September 11, 2020" and I didn't really bother to read the rest. I mean, I did scan the contents of the following paragraphs, all pertaining to how I failed as an employee, in cringey broken English to boot. But it was ultimately unimportant. The most relevant lines were the first two. There was only one thought running through my mind.

Saved by the axe.

I was free. Free of this douchebag and his appalling behavior.

The first thing I did was to inform my family, and my soon-to-be ex-colleagues. And then I took a nice long coffee break. Rather than mull over the fact that I had effectively just been fired, I was actually more tickled by the fact that it had happened on September 11th.

Aftermath

Sure, this was a stressful six months. But I have really very little to complain about. Swear to God, I've had worse.

After all, however unpleasant I found my experience with the CTO to be, I did absorb whatever lessons I could. I picked up new tools, new techniques, and got to apply some stuff that, up to this point, had been little more than a hobby. I collected yet another interesting war story to add to my ever-growing collection. And I got paid for it.

On the CTO's side, if my work was really as useless as he claimed it to be; well then, I guess some poor sucker just paid me six months to deliver jackshit, didn't he? It could just be me being a hopeless optimist and overly determined to seek out that silver lining, but I honestly don't see myself as the loser in all this.

The silver lining

I may have failed to hold on to the job, but my failure was professional. I had merely failed to meet my CTO's technical expectations. His failure was far more spectacular - he had failed to meet my expectations of emotional maturity. He had failed as a person. The company had gotten rid of an underperforming dev, but it had retained a far larger problem - someone in a position of authority who simply did not have the correct temperament.

Landing that next job

The next two weeks were pure bliss. I swam every day. I wrote code, practised on my new MacBook Air and played games on my phone, all the while applying to jobs and attending Skype interviews. I wasn't worried despite the COVID-19 situation. From experience, getting a job took months. But I had already checked my financial reserves. I was good for a few years, especially since my parents and wife were being very understanding about the entire situation.

All the while, I kept in contact with my ex-colleagues from that company, and their daily complaints about taking on my workload was like music to my ears. Hey, I no longer had to deal with that shit.

And then one evening, my ex-boss took me out to dinner and introduced to me the Director of an F&B company, the guy who would soon be my next boss. We talked about career goals and business plans over dinner and a cigarette. And next day, he messaged me to tell me to get up to speed on WordPress, while he got HR to prepare my application.

Shit, that had escalated quickly. But I liked the dude. And while my nice break was a lot shorter than I had originally envisioned, I was perfectly willing to work for him despite the fact that the office was at the other end of the island.


YouTube tutorials

I got to work, watching YouTube videos on how to code in WordPress, and one day before I was due to start work, I was already being drafted to attend meetings.

There was some consternation the next day with HR when I discovered that my probationary period would be six months. And that my job title was "Manager" of the newly-created InfoComm Department. I was slightly mollified at my generous pay package, which was far more than I'd ever been paid. But still... Manager? Christ!

The first two weeks were a bit of a struggle as we sussed out each other's working style. I found that my sometimes obsessive style of working meshed nicely with his propensity for hustling late into the night. Eventually, I ended up working from home again because the traveling was eating into the working time. I was tasked to bridge the company's e-store to its CRM (a success story in its own right), and by the third week, we deployed to Production.

Six months later...

My probationary period has officially ended. In the space of that half-year, I have deployed an ungodly number of features, met insane deadlines and in the process expanded the code base by roughly five times. The code base was a mess, but my boss didn't care as long as shit worked, and was delivered promptly.

It was hell at times, doing all that work all by my lonesome, but I'm happy. The fact that I have money and don't actually need the job, probably helps. And what I like about my current boss is, while the deadlines he throws at me are sometimes nuts, he has the sense to trust me to do my job and stay out of my way.

And just as importantly, nobody questions my worth to the company. Even in the short time that I've been there, my presence has most definitely been felt. If not in terms of my personality, definitely in terms of the work I've done.

Meeting targets.

More than once, I've been given the chance to show the company what I'm made of, and I like to think that on most occasions, barring a couple mishaps here and there, I've stepped up. There have been no major conflicts. Things could be better, but as I've recently experienced for myself, they could also be hell of a lot worse.

OK, I'm done!

I don't write all this with the intention of besmirching my ex-CTO's good name. Note that the name of neither CTO nor company was mentioned. Not once. Some developers don't have a problem openly trashing their former employers. Not my style. If I speak of any former employers, whether it be good or bad, they will always remain unnamed. That's just how it is.

Also, I have no personal interest in what befalls him or the company. This is merely an interesting story about yet another asshole boss in yet another short chapter of my career. Gotta admit, this lovely character gave me plenty of material. If you managed to learn something from this, great.

And this also marks another period in my life where I worked in three different companies in the space of one year. It's been nine years since the last time, and I'm getting too old for this shit. Still, I can take something positive from this. The fact that I could lose my job, and secure another one just like that - in the midst of a global pandemic, no less - tells me good things.

Talk about third time lucky!
T___T

Thursday, 16 July 2020

The Day The Penny Dropped

One of the tasks that got thrown to me in the past few years, by virtue of my not being particularly fussy about what kind of tasks I was assigned, was automated DevOps.

I'm not afraid to say I struggled at the task. Shitty Team Foundation Server (TFS) interface aside, I really wasn't getting the entire build/artifact/configuration/working directory relationship. My Team Lead at the time was dismayed at my apparent inability to understand the process, but since nobody else in my team was willing to shoulder the burden, it fell to me. Note that I wasn't particularly enthusiastic about the task. I just wasn't picky.

So I kept at it, trying to commit everything to memory. But the thing about learning something is, often, simply memorizing it isn't the key. The key is understanding, and the pieces just weren't falling into place.

The final piece.

My Team Lead kept yammering on about artifacts and builds, but this wasn't helping much.

Until one day, I was thinking about Gary Mitchell's Ten Principles of Adult Learning. In particular, the fourth one - People learn easiest what is familiar to them.

That was when the lightbulb flickered. I was going about it all wrong.

What I was doing, was approaching automated DevOps like it was a completely new thing. What was the end result of deployment? A working ASP.NET MVC site. Hadn't I dealt with ASP.NET MVC back in 2012? I had deployed back then, as well, except it had been the manual way. Now what I was trying to do was automate this process.

That train of thought led me further along the path. What had I done back then? The views and assets had been copied directly to the server. I'd had to build, and then copied the resultant DLL file. What were the steps of the automated DevOps, but configured instructions in TFS to do pretty much the same thing?

From there, my understanding of the process grew at an astronomical rate, and within a week, the inevitable happened - a successful series of tests.

About my Team Lead

Not saying he couldn't have done better. Obviously, he could have. But while he was a better tech than I am, unlike me, he wasn't trained to transfer knowledge. He didn't have an ACTA.

On my part, when I set out on my quest for that ACTA in 2017, I had envisioned using it to better transfer knowledge. I certainly hadn't anticipated using the principles learned in order to teach myself.

Life throws you surprises every now and then. This was a pleasant one.

Yours (l)earnestly,
T___T

Thursday, 10 January 2019

How I Became An Agency Contractor (Part 1/2)

Further to landing a job at this startup back in 2016, it was not to last. Within half a year, the money ran out and the company was forced to let all its staff go. The boss, the dude who had hired me in the first place, was considerate enough to let us know three months in advance so that we could make preparations. Sure, he was the second employer to let me go in the past year or so, but his conduct was exemplary. There was none of that cost-cutting bullshit, at least. He projected the runway and paid us what we were due, right up to the final month.

The job search begins anew...

On my part, I began my job search anew. This was becoming routine by now. I elected to keep coming into the office to work on the company project even though technically, I wasn't an employee anymore. The boss was still at it, since he was the only one left in the company. In the meantime, I hammered out my website using Semantic UI, which I'd picked up during my time in the startup, and continued blogging.

The job search took a couple months. Apparently, plenty of companies in the immediate vicinity were hiring. On the not-so-bright side, some of these were your typical douchebags trying to smoke me with The Probationary Pay Gambit and not even having the class to be subtle about it. In some of these cases, you could practically smell the desperation. But by then, I was numb to it all and took everything in stride.

It was about this time I interviewed for that job at the IT Training center, and encountered my ex-lecturer. As mentioned, it was an interesting interview, but until I got my ACTA, their hands were tied. It was also around this period I got that ill-fated but educational experience in Mozat. And so the search continued.

An obsession with meaningless things

Among some of the interview offers I got, there was a remarkable phenomenon among Government-affiliated positions, such as Singapore Press Holdings and Singapore Polytechnic. I applied, received replies indicating interest, and then they pulled this stunt whereby they asked for my GCE "O" Level Certification. For those not in the know, the "O" Level Cert is the piece of paper that tells employers that you have graduated from secondary school, i.e., you have a basic education. The "O" stands for "Ordinary".

When I queried if this was an absolute necessity to proceed with the interview, they replied to the affirmative - yes, I absolutely must have that cert. Which was when I politely declined the interview. The HR for SPH, in particular, seemed really shocked in her email. It was like no one had ever had the temerity to turn down an interview for Singapore Press Holdings before. Imagine that! Poor girl.

Some may be wondering why I turned them down over such a trifling matter. It was a chance to work for a big company, wasn't it? To understand this, you'd have to see things from the perspective of a tech person. I wasn't some desperate schmuck with no qualifications looking for just any job. The size of the firm didn't matter. I wanted a tech job for career longevity. And any company that was going to obsess over trivialities such as an "O" Level Cert, certainly wasn't worth my time. Seriously, I had a Bachelor's Degree and multiple Diplomas in related fields and a resume that suggested I'd been through the mill... and these clowns wanted to be absolutely certain I had a basic education?!

This may sound arrogant, but I assure you, hubris has nothing to do with it. In tech, what we value is people who can do the work. Certification is secondary. How many Computer Science grads out there can't solve FizzBuzz, for example?

Do not go there.

The insistence on producing such a trivial piece of documentation told me they were companies that didn't have their priorities right - and if that was the case, no matter how big they were, they were a no-go area. I would work for another startup before joining these big boys, any day of the week.

Also, I think I've paid my dues and have earned the right to say no to bullshit... even if said bullshit is coming from some big-fuck Government-affiliated company like SPH.

Being contacted by an Agency

About the time I was wading through a lot of options, I got contacted by a Recruitment Agency. It was in the form of a message sent to my LinkedIn account. They were hiring for a big tech company, and if I was open to a contract position (one year, renewable), we should talk further.

This got me thinking...

Contract Positions

Now all of my life up to now, I've actively avoid Contract positions due to the perceived lack of job stability. Who wants to be in the position where they're constantly looking for a job? Then I thought further. Constantly looking for a job... like now, you mean? I'd been taking only Permanent roles for the last fifteen years. Fat lot of good it did for career stability! The last two companies I'd had a Permanent role in, tanked. And I was in a position that wasn't too far different from if I had taken on Contract positions to begin with.

No more illusions.

All that "career stability" was an illusion. And I was done with the charade.

Also, in a rapidly evolving field like computer technology, staying too long at any one place was a bad career move unless I was planning to climb some corporate ladder or something. It would be hell on my employability in the long run.

Lastly, I was tired of having to explain why I left my last job. Sure, the fact that the last two companies tanked wasn't my fault. But some companies have this habit of trying to parlay it into something that could be construed as my fault, so as to gain a negotiating advantage. (They didn't know that Your Teochewness doesn't negotiate, and despises the practice.) You know the type - you say your company folded and you can practically see the Fire Sale sign blinking over their heads.


Next

The interview process... and beyond!

Sunday, 16 December 2018

My Year in Training and Assessment (Part 2/2)

The final month of 2017 ended quickly, and the subject matter of the classes was pretty fascinating. We covered different learning profiles and how different people reacted to different methods of information delivery. Looking up the internet and the library, I discovered even more stuff in addition to the reading materials.

My classmates were a fun bunch. Sure, they were mostly older folks and some of them said things I would have found cringe-worthy in another setting. Here, I tried to keep an open mind. The group discussions we were put through were insightful. Most of us tried to be nice to each other because we were depending on each other to get through the course. I soon learned that I got on better with some of the others, and even consulted one of them personally on my upcoming marriage.

Assignments

For the most part, I didn't have a problem digesting whatever information was given. A lot of it seemed to be common sense. When handing in a lesson plan, which was one of our assignments, the instructor even commented that I seemed to be getting the gist of it quite handily, and had nothing further to add. He wasn't just saying that, because he had a lot to say when others were handing in their lesson plans. On my part, I was just glad that I seemed to be on the right track.

We also had to keep a learning journal of sorts, detailing what we had learned and our reflections on it. I went a step further - I actually blogged about it. (Garry Mitchel's Ten Principles of Adult Learning made quite a nice listicle.) The act of doing so helped me digest the information and cement the principles in my head. Besides, that was actually how I best learned - via repetition and practice. My fellow coursemates thought I was this super student because I did my stuff way in advance.

I was a hardworking but woefully
untalented kid.

I'm afraid they were mistaken.

A lot of it isn't intelligence or diligence, but pragmatic time management. Every weekend, I dedicated a certain amount of time keeping the journal up to date so that I would have any problems handing in my work in March. One of the best ways to combat stress, is not to allow yourself to get into any unnecessarily stressful situations. Knowing that I'm not some extraordinarily smart individual that could produce written assignments on demand, it seemed foolhardy to leave everything to last-minute work and hope for the best.

Incidentally, it was the same way for me when I was younger. Study early, study often. I was never an A student. Mostly Bs. But boy, nobody knew how hard I had to slog for those Bs. People just thought I was really clever and shit. Word of advice: very few people are actually that clever. It takes a hell lot of work. And, of course, once again, time management.

Assessment on Classroom Facilitation

Midway through the third month, we all had to conduct lessons as part of the requirement. Each of us would decide on a topic which we would then have to "teach" our fellow coursemates. This was where I started floundering. People thought I wouldn't have a problem because I seemed quite at ease presenting to the class during lessons. What that was different - I mostly wasn't trying to impress anybody and nothing was at stake. Now, we were actually going to be assessed on how well we conducted the lesson plan we had developed, and I'm afraid the pressure got to me. No matter how much I rehearsed for the day, when it was time to actually do the job, my voice trembled.

One of the things an instructor is supposed to do, is assure the course participants that he or she is qualified to instruct them, and that they are "in good hands". In practice, if there's a way to say "I have a degree and three diplomas" without sounding like a conceited dickhole, I haven't discovered it yet. Some of my fellow coursemates had a better idea - they merely displayed their credentials on presentation slides to they could toot their horn without sounding like they were, well, tooting their horn. Well damn, why hadn't I thought of that? Because I'm an idiot, that's why.

Depending too much on
the whiteboard.

I kept the knowledge transfer small, facilitated group discussions and basically made sure items on the assessment checklist were met. Everyone was watching me because, well, I was the first to be assessed. I had actively chosen to be the first - to get it out of the way, and also, when you're the first to go, expectations are generally lower because you're expected to make a whole bunch of mistakes the others can learn from.

My chosen topic was "web development", and true to form, I had elected to prepare web pages instead of presentation slides. The rest of it, I reasoned, I could use the whiteboards for. Eliminate the chance of being stymied by technical failure. Surprise, surprise. The classroom we ended up in, had whiteboards that were blocked by heavy desks and assorted clutter. And here I thought I was being so clever. What the fuck, right?

As the "lesson" went on, I realized that very little of it was going the way it had played out in my head. I was nervous, my voice cracked, and sometimes I talked too fast and had too many pauses. And then the class, comprised of my fellow coursemates, began to act up.

This wasn't done out of malice - the instructor had told them they were supposed to act up so that he could assess me on how I handled disruptions. So I had people asking me blatantly stupid questions, making small talk loudly, defying instructions and so on.

Ironically, I was feeling like an utter failure by then and decided, to heck with it, I was just gonna do my thing and to hell with impressing the instructor. I totally forgot my fear in that instant. Have I mentioned that I've taught classes before? Well, when my fellow coursemates acted up that evening, I simply reacted, as if by instinct, the same way I did all those years ago. Blatantly stupid questions were shrugged off or waved away. When people made small talk loudly, I upped the volume of my voice for about two seconds, jolting them back to attention without missing a beat. When people attempted to start an argument, I told them I acknowledged their point and we could revisit this after the class. Basically, I came on strong, and backed the hell off when I needed to. The iron-fist-sheathed-in-silk-glove approach.

And I smiled. A lot.

When it was over, I went over the checklist and discovered, to my amazement, that I had covered a ton of items under "Handling Disruptions" without even trying. I hadn't even been consciously attempting to do it by the book! That was an epiphany for me - I do best when I don't try so goddamn hard.

Then it was over, and during the course of the next few weeks, I sat back and watched my fellow coursemates go through their own assessment. It was of small comfort that many of them faced the same problems I did, and some even had to repeat their assessment. It was my turn to conduct a peer assessment for some of them, and in those instances, I opted to be kind. After all, my remarks would make no difference at all to their final score, and overdoing the criticism seemed unnecessary.

E-Learning

The next module dealt with understanding the WSQ system. To that end, we were put through an E-learning program which was supplemented by webinar sessions. This was pretty dry, and the E-learning system absolutely sucked. To go into full detail about how much it sucked would be devoting too many words to it, so I won't. Again, I supplemented my learning with more blog entries, such as one about Five Elements of Competency and using WSQ Competency Standards.

My ex-boss from the startup had also completed his ACTA, and his advice and supplementary reading were invaluable. Another case for not burning bridges you don't have to. Never know when someone in your network can help you.

I was suffering from serious burnout by this time, and it was all I could do to keep my journal entries up to date. Also, the then-girlfriend and I were going through the arduous process of getting married. Let me assure you that nothing about it was fun, and mostly involved the logistics of making space for one more person in the house. More about that another time, though...

Assessment on Assessing

After the last excruciatingly boring module was the one on being an Assessor. We were trained on how to deliver an Assessment to a test candidate in a fair, empathetic and diplomatic manner. How to provide an optimal environment for Assessment. Things like that.

Assessing...

And then came the assessment... on our Assessment abilities. This involved live-action roleplaying with a prepared background scenario. We were divided into groups for this, and my group aced the entire thing without any do-overs. I can't claim any credit for this one - one of my team members was a right pain in the arse where details were concerned. He was also meticulous and not one to leave anything to chance. He prepared scripts for us to follow, and even had the bright idea of having them vetted by our instructor.

So, after we had made the changes recommended by our instructor, all we had to do was follow the script... and viola, another module out of the way.

Some drama occurred during the Assessment, things that made me come to new realizations. One of our team members lost his temper at another member. Harsh words were exchanged. To be fair, the guy being raged at, was slow to grasp the material and seemed to be going off half-cocked in the wrong direction... and this wasn't the first time either.

However, being a WSQ instructor is not just about having the skills and knowledge in facilitation of learning. Like many other professions, it is also about having the correct temperament. Often, instructors don't get a choice as to what kind of people are being allowed in the courses they are teaching. They are going to get people who are merely doing this on a whim. They are going to get the ones who think they already know everything. They are going to get the ones who aren't actually interested in the subject matter. Basically, those who are all but impossible to teach. And if we're going to lose our shit everytime someone like that shows up, maybe we should consider another line of work.

The Final Assessment

The day of the Final Assessment arrived. By then, my nervousness was gone and all I really wanted to do was get it over with. My time studying the WSQ Assessment System had all but assured me I wouldn't be failing this one (unless, of course, I failed to show up). After all, in order to justify a failure, a lot of paperwork had to be done by the Assessor. And honestly, I'd done the work. I had blog entries in addition to journal entries. And I had passed all previous modules. I can say with no false modesty that failing me at this point would require one hell of a justification.

I walked out of the assessment room with my ACTA...

Epilogue

... and on the very next day, I put that ring on my girlfriend's finger, and made her my wife. What have I done with that ACTA? Nothing to date, sadly. But it's there if I ever need it, and the experience proved enriching. Exhausting, yes, but enriching.

My fellow coursemates still hang out. Most of us are still in the original WhatsApp group we used during the course. Sometimes, we meet up to catch up. Yep, even if I never get to use that ACTA, I definitely don't regret taking that course. It was a blast. I don't know that it actually made me a better software developer, but it sure as hell rounded out my resume nicely.

Your certified Trainer and Assessor,
T___T

Friday, 14 December 2018

My Year in Training and Assessment (Part 1/2)

2018 has been a really busy year for me. Not only did I have to grind at a job where I was (and still am!) struggling, I had a woman I was seeing (and whose finger I put a ring on in that same friggin' year!), and I was in school.

What was I studying, this time? Nothing directly tech-related. I was taking my Advanced Certification in Training and Assessment (ACTA), certification necessary to become an instructor in any academic setting. Did I harbor aspirations in that direction? Not exactly. But it certainly was riveting subject matter.

How it all began

Back in 2017, the startup I was working for, had folded. I was out of a job again, and soon found myself interviewing at a training institute, for the position of programming instructor. I've had prior experience teaching, and part of why I was putting up web tutorials on this blog is because I firmly believe that part of what helps a developer grow, is the culture of sharing, and the act of imparting knowledge. So the position was interesting enough for me to give it a shot.

Surprise - my interviewer turned out to be my very first programming lecturer from Temasek Polytechnic! His hair was all white now, but I remember the guy. In fact, every time I pick up a new programming language, I can kind of hear his voice droning on about If blocks, For loops and arrays.

Over a pleasant chat, it was revealed that I needed an ACTA to even be legally allowed to teach. I would have taken it right away, but he informed me that upon turning forty, which would be almost half a year away, I would be eligible for a ninety percent discount on the school fees. Now, to someone who's out of a job, a few thousand dollars is nothing to sniff at. I soon gained employment somewhere else, but resolved to revisit the subject of obtaining this certification in the near future.

With that in mind, once things stabilized at my job, I signed up for the next available ACTA course. I would be in classes twice a week, from 7 to 10 PM. It would be a bit of a squeeze, but I'd make it work.

The first day

The class turned out to be filled with professionals from various trades. There were even a couple of actual trainers in there. Our instructor for this module was an elderly gent with a reassuring demeanor. To get all of us to know each other better, he had us play a game.

Breaking the ice.

We formed a circle. The first one would state his or her name, preceded by a descriptive term whose first letter should match the first letter of their name. (ie, Responsible Robert, Jolly Jacintha, etc), their occupation, how they best learned and what knowledge they hoped to gain from this course. And then the next in line would repeat the previous trainee's name, along with his own, and repeat the sequence. Which meant that I, being the the thirteenth, would have to repeat twelve names. Luckily, the instructor had written down the names as we went along, so if we were in any doubt, we could refer to the whiteboard.

And then it was my turn.

To my astonishment, I could repeat the names and descriptions of all twelve of the preceding trainees without referring to the whiteboard. Not even once.

"... and I'm Terrible Tan. I'm a software developer..." Here, I paused, wondering how to answer the next question. Then it came to me. "...I learn best through repetition. And I hope that by learning how to teach others, I can become a less terrible software developer."

Why "Terrible"?

Some asked me why I chose "Terrible" when the others were using terms like "Jovial", "Noble" and "Nice". I wasn't simply being cheeky, nor was I having a serious inferiority complex. You see, I am a software developer. And by definition, we software devs are all terrible. There is so much tech knowledge out there, and all of us, even the most knowledgeable ones, know but a fraction of it all. The key to improvement is to first acknowledge how much we all suck, and how much we each have to learn.

Someone who does not think he has anything to learn, is simply predisposed to not learn anything. That's just the way it is. A software developer cannot afford to think he is anything but terrible. That leads to false confidence, and eventually stagnation.

Why "Repetition"?

Each of my coursemates had had their names repeated over and over by the time it was my turn. The first one's name had been repeated thirteen times, the second one's name twelve times, and so on.

I'm not the brightest bulb in the box; I've known that since forever. I can't be told something once and immediately understand. But when I learn something, I get good at it by repeating it endlessly till it becomes second nature.

Why "better software developer"?

At first, in my new job, I was too busy struggling to even consider evening classes. However, an encounter with a colleague changed that.

Now, I have nothing against this guy personally. For all I know, he could be a totally awesome dude outside of the office. But he was exactly the kind of person I dread working with - loud, combative and dramatic. Add that to a ton of insecurities that seemed to compel him to constantly toot his own horn about his "workaholism" and drive... and you'll see why having to work alongside him made my job a lot less pleasant than it should have been. Also, his code sucked monkey balls... but that's neither here nor there. We'll speak more of this guy another time. What's relevant here is that a few months in the job, he got an offer from another company and decided to tender his resignation. And that, of course, involved handing over stuff.

Aww, poor baby.

Halfway through one of the knowledge transfer sessions, he asked us if we had any questions. When he was answered with an awkward silence, he threw a tantrum and started lecturing us about how he used to have many questions when he was in our shoes, how we just expected to be spoonfed...

Jesus, talk like that wasn't going to induce me to ask questions, that was for sure.

We were there as a professional obligation, and doing our best to absorb. We weren't here to listen to him yammer on about how enthusiastic and driven he was compared to the rest of us. I certainly didn't feel like asking any goddamn questions. All I felt inclined to do was wait for him to shut the hell up so I could get on with my work. Pro tip: Handing over work is a basic professional courtesy when you're leaving the company. So, if you're ever in the position to hand work over, stop acting like you're doing everyone such a huge fucking favor, OK?

And that, in a nutshell, was what convinced me that being a professional tech - in fact, any professional - required skills in knowledge transfer. Communication. You can be a really gifted tech, but if you can't transfer knowledge, your usefulness is pretty limited, isn't it?

In retrospect

The instructor, later on during the course, informed us of something I had been half-suspecting - that this icebreaker game had actually served a higher purpose other than getting to know one another.

Firstly, it was meant to show the lecturer who was more or less predisposed to learning. Those who had cited interest in teaching, or interest in the certification for career advancement, were sufficiently motivated. Those who were here simply because they needed to spend some SkillsFuture credits, less so.

Secondly, it was meant for each participant to self-examine how he or she best learned something. Different people learn differently, and being able to accept that is one of the basic requirements of a trainer.
Self-reflection.

The third purpose, I suspect, was psychological - for each participant to present their own self-concept to the class. Whether or not they were "Clever Chandran" or "Slow Serena", each participant's self-concept was something that could affect the speed at which they absorbed and digested new information.

Next

We'll go into more detail about what went on during those classes. Be back soon!