Com|Passion

When I first learned of the Jedi and Sith Codes of the Star Wars expanded universe, I couldn't help but feel a lot of conflict. It's because while the Sith are shown as the antagonistic evil in the movies, their code is something competitive "go-getters" can relate to:

Peace is a lie, there is only passion.
Through passion, I gain strength.
Through strength, I gain power.
Through power, I gain victory.
Through victory, my chains are broken.
The Force shall free me. [Code of the Sith -- Wookieepedia]

Follow your dreams. Follow your passion. We have all been taught these, and apparently, these are the ways of the Sith. Contrast that with the way of the Jedi:

There is no emotion, there is peace.
There is no ignorance, there is knowledge.
There is no passion, there is serenity.
(There is no chaos, there is harmony.)(*)
There is no death, there is the Force [Jedi-Code -- Wookieepedia]

It seemed so cathartic. No emotion? No passion? What a bunch of lazy slobs compared to the Sith. No matter they got wiped out even if there were hundreds of them and only two Sith Lords at any given time. What a bunch of losers.

Indeed the common stereotype of a successful person being peddled by corporate America and the cult of Steve Jobs is the impertinent asshole: the person who won't let anybody or anything get in the way of their dream. The person who will stop at nothing to achieve their goals. The person who will forgo family or sleep to succeed. They are called Type As, A-players, achievers -- and theirs, theirs is the way to go if you want to succeed financially.

But at what cost?

Minecraft creator Markus Persson, known more by his online handle "Notch", made news recently with a series of tweets revealing the consequences of his $2.5 Billion windfall after selling the game to Microsoft. Notch is not the stereotypical Type-A personality, but rather comes across as an introvert who developed Minecraft as a hobby. The result of his unprecedented success, however, led him to a position not usually associated with success:

It is ironic that Markus's success brought about by his unbirdled passion for games would bring so much pain and isolation... until we realize that this is precisely Darth Vader's story. It all made better sense when I read the "original" form of the Jedi Code:

Emotion, yet peace.
Ignorance, yet knowledge.
Passion, yet serenity.
Chaos, yet harmony.
Death, yet the Force.[Jedi-Code -- Wookieepedia]

This form of the code reminds me so much of a manifesto that is very, very close to my heart as a professional software developer:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

That is, while there is value in the items on
the right, we value the items on the left more.
[Manifesto for Agile Software Development]

I put an emphasis on the last part because the Jedi code would've made better sense with those words. It's not that emotion, ignorance, passion, and chaos should be absent -- all of them need to be acknowledged to gain peace, knowledge, serenity and harmony respectively. And it is this acknowledgement that makes the Jedi Code superior to the Sith's. Passion will lead to strength, passion will lead to power, passion will lead to victory and a perception of freedom will be attained, but without peace, knowledge, serenity and harmony it will all feel empty.

If there's any single word that I could think of that would put all those words together it will be compassion -- "com" being a prefix meaning "with" and "together". When passion is felt and pursued in the context of rich relationships with others, any success that will be attained from that passion will automatically be shared. It won't be empty, because men are not supposed to enjoy anything alone.

So go ahead and pursue your passions -- but put a lot of compassion in it. And maybe, just maybe -- you won't need to be alone.

Posted in Career in Tech, Personal | Leave a comment

Kindness

There are a few great lessons that I've learned in my years, and two of them stand out:

1. If it's a matter of principle, fight for it. If it's a matter of preference, let it go.
2. It's better to be kind than to be right.

Whenever we get into an argument, a situation, a moral dilemma, or any other conflict, ask yourself first if it's a matter of preference or principle. Are you fighting over this because you prefer your way, that it just *seems* or *feels* better that way? Or is there a moral and ethical objection that you are fighting for? If it's a former; ask yourself if the argument is worth straining the relationship that you have for a mere matter of preference. If it's the latter, then you have to stand up for what you feel.

When you've decided to stand up for what you think is right, now ask yourself what method you would use to resolve your conflict. Should you be righteous and vindictive, or should you be gentle and find kindness? There are situations where force will be warranted for to defend your principles -- but sometimes you have to think out of the box so that you may achieve your victory via kindness.

I thank God whenever I find a way to be kind even as I stand up to the principles I believe in.

Posted in Personal | Leave a comment

Still at it

The funny thing about life is that sometimes it just doesn't stop surprising you.

Almost a year after I realized that life threw me a curveball, it's not done yet.

My feelings of loneliness and isolation were mitigated when I finally went back to having a full-time job middle of 2014. I was back at having officemates, I was back with a daily routine, I was back at having projects with teams and all was fine and dandy.

Until it started happening again.

I can't disclose much what currently is happening with my company; however, certain people have left and a lot of responsibilities are left for me to attend to. At one point I was afraid I was going to lose my job again, similar to 2013. My routine has been shaken up, and the easiest way to describe it would be that, yet again, I have been shaken to my core and thrown out of my comfort zone.

The funny thing is, even if it all sounds so dire -- I'm actually okay.

When a shake up happens in your life a lot of times it prepares you for even bigger things. Bigger responsibilities, bigger roles, even bigger wins. Admittedly I have shied away from many of these even if I was overdue in my career for more difficult roles.

So even if the universe was still at throwing curveballs at me -- I'm still at it too; growing my perspectives and honing skills I had not attended to. It's hard, but moving forward is all there is to do.

Posted in Career in Tech, Personal | Leave a comment

Curveball

I'm staring at the previous post that I wrote way back in January, right before things happened:

If I really wanted to make my mark on the world I have to build something. If I really want to become the kind of software developer I always wanted to be I have to write more, both in terms of words and in terms of code. I really want to experience the builder's high, that great feeling of having added something to the world.

It turned out the universe had other plans for me.

Readify's Manila operations have been shut down since the end of January. Circumstances beyond our control had lead to a management decision to shift its strategy and forego foreign operations, deciding to focus its efforts in Australia. Despite this, I remain grateful for the opportunities they gave me, and remain friends with many of my former colleagues in their various Australian offices.

I then pursued freelance work opportunities, and this work, along with my current role leading the Philippine .NET Users Group, has occupied me since January. However, even before Readify Manila closed I had been working from home most of the time. I have been working home-based for half of the year now, and while I appreciate not having to wrestle with traffic and parking problems every day, I've been facing a challenge I have never encountered before:

I feel isolated. I feel alone.

I thought that these feelings would be made up for by the presence of my wife and children nearby, and mitigated by online conversations with my former peers. But what I have taken for granted is the ease of approaching people and striking a conversation or raising a question at the workplace.

I also came to appreciate more the value of a team -- a set of people who have different strengths and capabilities -- each one focusing on their own contribution to an overall effort. I have been in excellent teams in my stints in Readify and ITRS in the past four years, and this stretch of working alone made me appreciate those years all the more.

I had wanted to be able to build and write more, but working alone proved to be more harrowing and tiring than I have ever imagined. My recent experiences have given me a great opportunity to think and reflect to know myself better, and they answer a lot of question that I've had for myself before.

Now it's time to act on that new information.

Posted in Career in Tech, Personal | 3 Comments

Building: Life and coding

I change the title of my blog, again.

I used to have two blogs; I wrote purely technical topics on this one and wrote personal and political views on the other. After realizing that I was spending too much time, effort, and emotional capital on my political blog, I decided to retire my "political blogger" hat and focus on writing about technology.

With less than 10 entries per year however, one thing was clear -- I wasn't writing about technology enough!

Sure I was quipping on them -- taking tiny snipes on Twitter and Facebook. But other than that I was avoiding any real work, and any real connection that inspires me to write something.

That is, until I came across Michael Lopp's excellent entry on his blog Rands in Repose:

What’s the last thing you built when you got that high? You know that high I’m talking about? It’s staring at a thing that you brought into the world because you decided it needed to exist.

For me, the act of writing creates the builder’s high. Most pieces are 1000+ words. They involve three to five hours of writing, during which I’ll both hate and love the emerging piece. This is followed by another hour of editing and tweaking before I’ll publish the piece, and the high is always the same. I hit publish and I grin. That smile is my brain chemically reminding me, Hey, you just added something new to the world.

...

Turn off those notifications, turn your phone over, turn on your favorite music, stare at your blank slate and consider what you might build. In that moment of consideration, you’re making an important decision: create or consume? The things we’re giving to the future are feeling increasingly unintentional and irrelevant. They are half-considered thoughts of others. When you choose to create, you’re bucking the trend because you’re choosing to take the time to build.

That struck me. If I really wanted to make my mark on the world I have to build something. If I really want to become the kind of software developer I always wanted to be I have to write more, both in terms of words and in terms of code. I really want to experience the builder's high, that great feeling of having added something to the world.

Happy New Year, and I wish you all the energy and inspiration you need to build something awesome this year.

Posted in Personal | Leave a comment

How I celebrated my 0x21st trip around the sun

It was the 2013 Microsoft MVP Global Summit the week before my birthday, and I had finally been able to make arrangements to attend. It was a great week of learning what comes next for Visual Studio and C#, and I also got to meet guys I've followed, read and talked to online: Scott Hanselman, Phil Haack, Scott Koon, and Laurent Bugnion to name a few.

But what completes the whole experience for me is meeting the guy who made C# the awesome language that it is right now. I'm talking about Anders Hejlsberg.

Anders Hejlsberg and me at the 2013 Microsoft MVP Summit

Anders Hejlsberg and me at the 2013 Microsoft MVP Summit

Aside from C# Anders was also responsible for Turbo Pascal and Delphi, and is now also working on a Javascript superset language called TypeScript.

A totally geek moment and an apt birthday gift to a C# junkie like me. :)

Posted in Personal, Talks and Conferences | Leave a comment

Homecoming

Back in September 2012 I got an email from a friend as an introduction between myself and one of the managers at his company.

This friend of mine had been telling me for years about how great his company is and how much he enjoyed being there, and had invited me to join them then. However, it required a move overseas and, for personal and family reasons, that wasn't an opportunity that I took seriously.

The surprise then was finding out that the manager he had introduced to me had been tasked to set up an office here in Manila, and build a development team that adheres to the stringent standards of their company. Of course there was an implicit invitation to join their team as well -- but as I had a bevy of commitments back then, I opted to just help them any way I can in putting up the new office.

Fast forward 10 months later. I will be joining Readify as a Senior Developer after a three year hiatus from the Microsoft stack.

I had a great time with Cormant (as a returning consultant) and ITRS doing iOS, Java, and a bunch of other things completely outside of my prior experience, and the lessons I have learn delving in them are completely invaluable to me.

Then again, it's good to be back home.

Posted in Career in Tech, Personal | 1 Comment

Evolving the Quality Assurance role

Assuring quality is everyone's job -- but programmers and testers alike forget that.

I have encountered all sorts of variations to where developer testing ends and Quality Assurance/Professional Tester testing begins. Some developers hack away carelessly at their code and throw it to QA letting them test it (often the first test the code encounters) and just wait for the bug reports to come, in other times QA personnel start filing bugs that aren't defined in the specification, and start treating programmers as "the cretins who introduce bugs". Entire wars erupt between these two sides of development.

As if to add fuel to the flame, an article claims that quality assurance is one of "10 technology skills that will no longer help you find a job":

5. Quality Assurance Specialist and Managers

Hiring professionals in the Dice survey placed Quality Assurance (QA) on the "low priority" side of the ledger. Do not expect this to change. These days, the tech industry seems to be following Google's lead and turning everyone into beta testers. Users are the ultimate quality assurance staff - and they don't get paid! [Brian Hall - 10 Technology Skills No Longer In Demand]

While the absence of testers dedicated to making developers cry seems like a good idea to software developers, the lack of staff dedicated to testing presents its own problems. There has to be a set of "fresh eyes" that will not see an application under the narrow focus developers tend to have. Implementing the "users as QA" principle also requires the very expensive overhead of analytics modules that are necessary to track user actions that caused a particular bug. Not to mention that the analytics stuff would probably have bugs on its own.

While I tend to dislike the traditional definition and role of Quality Assurance, I believe there are three areas QA professionals can focus on to keep themselves relevant in the industry: test automation, user experience, and domain expertise.

Test Automation - There is enough tedium in the QA process that is worth automating. Repetitive tasks should be relegated to a script, which frees up QA to focus on writing test cases and measuring the performance of applications instead of random bug hunting. Besides, even if you had access to thousands of cheap testers, repetitive tasks are best done by the very machines applications are tested for. There are countless tools dedicated to this effort, and many of them allow you to address Michael Hunter's You Are Not Done Yet Checklist [PDF] in an automated manner.

User Experience - If there's an area that could not be efficiently tested via automation, it would be the visual appeal and intuitiveness of an application. Quality assurance professionals that focus on usability, user experience and design, not just in terms of visuals but also in terms of workflow and ease-of-use will be very valuable in producing software that will have either a lower after-sales support overhead for enterprise software or mass appeal for commercial apps.

Domain Expertise - Many times the breaking point of software projects is the ability of a particular piece of software to follow specific business rules or accommodate new pieces of regulation that the app should comply with. Quality assurance professionals who could gain domain expertise and gain greater insight on an application's impact in the business side of the equation would be immensely valuable. Even in outside organizations working within that same domain.

Just as software development has already evolved far from being a solitary effort running punch cards and checking if the desired output is achieved, quality assurance has to evolve beyond merely using an application and reporting any bugs found. A QA professional possessing at least one of the above skills beyond normal tester job descriptions would be invaluable to any organization priding itself with shipping quality software.

Posted in Career in Tech, Industry Talk, Tech Musings | Tagged , , , , | Leave a comment

Was User eXperience invented with the Macintosh?

With today's web and mobile technologies with varying user interfaces of all shapes, sizes and colors, it is easy to forget that once upon a time when someone said "computer" they meant facing a drab, single color, single font-size terminal that tends to hurt your eyes.

Were you already born when this came about?

This dull vision of technology was changed by a young Steve Jobs, who in January 24, 1984 came out with a computer that was able to display much, much more than text. The Macintosh was the first in a long line of products that up to this day bear (almost) the same name.

It is probably reasonable to say that the term Graphical User Interface was, for the general consumer and personal computers, born that day.

Prior to the Macintosh user interfaces were merely textual, and the only other product on the market that had a GUI was the Xerox Star, which was a client-server system that required an office to shell out $50,000 to $100,000 and was definitely out of reach of the common user. Of course there was the Xerox Alto, basis for the Star and famous prototype at Xerox PARC where Jobs got his ideas in the first place -- that one never made it to market.

However, aside from just being a fancy computer with pictures, Steve Jobs was also very particular about "look and feel", and how the menus and buttons of an app worked together, and how layouts affected use, aside from how aesthetically appealing the Macintosh's appearance was. Now, while the term "User Experience" may have been coined in the mid-90s, it is clear that the concept of having an easy-to-understand and easy-to-use application, not just in terms of visuals but in terms of how it affected working with the software, was started way before it, and perhaps championed by Jobs with the Macintosh.

I'd like to wonder out aloud: was user experience invented with the Macintosh? Did Steve Jobs invent user experience? Or have I have been RDF'ed to think that way?

Posted in Tech Musings | Tagged , , , | 1 Comment

Learning without context, and YAGNI

I'm currently studying how to do test-driven development in Javascript. I'm studying JSTestDriver, and while it's not a particularly difficult framework to learn I'm having a hard time slogging through the materials simply because I've got no context.

What do I mean? I have nothing on me yet. No specifications. No user stories. No real-world examples. Every signal swimming through my synapses related to my current project is hypothetical.

That's a problem -- at least for me.

Many of the languages, frameworks and concepts I've had to study before were either existing as a legacy system or at least had some sort of specification lying around. Before that, everything was just fun, games, and Hello World.

I learned BASIC off of a GW-BASIC manual as a kid trying to draw graphics on my monochrome screen. I learned C and Visual Basic for machine problems and projects at school. I learned HTML so I can make a website for my freshman class. I learned COBOL, C# and iOS building on existing projects at work.

It seems that the brain is invoking the YAGNI (You Ain't Gonna Need It) rule -- which teaches you not to implement application features you don't need yet, or you only think you're going to need. I'm going to use TDD on my new project, that's for sure. But because it knows any code I write now is throw-away code, my brain has a hard time cooperating.

It explains all those times I had a hard time studying in school -- I didn't think I was going to need any of those lectures in real life (I was mostly right). Too bad it took me a decade to realize it.

I never thought YAGNI is applicable to study and learning -- but here it is.

Posted in Tech Musings | Tagged | Leave a comment