Sunday, August 30, 2015

What is a 10x Programmer?

Sorry again... got sidetracked with a bunch of things: new interesting project at work, reading Team Geek, and an addictive mobile game (yea... and it seems blogging is still not really a habit yet).

Regarding Team Geek, great book.  It's written by some Googlers and filled with fun facts and funny pictures. It goes through a lot of ideas about how to be a great developer/engineer/manager/team player.

Recently a recruiter asked me what I would like in an ideal job, I wish I could just point him to this book.

OK... so originally I wanted to write a long post about the 10x Programmer, but I'll just keep my point short since I've had previous rants about Software Developer Heuristics and keeping things simple (this and this).

And that's really all there is to it, I think. So here's a summary:
  • Have a broad background and experience so that you can 
    • pick up new ideas quickly and integrate them to your existing knowledge base
    • develop an entire solution/proof-of-concept (front-, middle-, back-end) fairly quickly... and bug-free
    • have brain flashes of new ideas and solutions that make 1 + 1 > 2
  • Automate, automate, automate! 
    • Know how to identify and get the computer to do all the boring, repetitive work (basically the other 90%) 
    • Make it check your code so that releasing a bug is almost impossible (unit tests and automated integration tests)
    • Now you can focus your energy and time on doing something that actually has real value instead of trying to just keep the lights on


Tuesday, August 18, 2015

Move To Digitization

Actually a very old post, maybe 6 months ago (OK not that old) but just realized it was a draft. Didn;t really edit it though...

I'm preparing to move to a new house and the whole family is going through all our stuff and seeing what to keep or throw away... there's a lot...

I came across a huge piles and folders of CD/DVDs which I haven't touched in years. And I realized that people never use anything if takes significant effort to locate, even less so if it's not important.

(I also came across a lot of other stuff from my childhood which did bring back some interesting memories... more on this as well below)

Anyway, I guess this is also caused by the current shift in culture, where everything is digital and can be accessed almost instantly. Unfortunately, digging through volumes of DVDs or other stuff is too much work in this context, so it seems we just put it away and forget about them. This may work well for some stocks but this stuff takes up space somewhere and for most of the time, produce no value.

It's probably poorly organized as well.

Digital things though are usually really well organized in folders (at least for me) and there' is also the ability to search through huge amounts of it with very little effort.

So now I'm in the process of digitally archiving all those CDs into my external HD (and cloud, I got 2TB of space there as well).

I'm also going to take a few pictures of some of the old stuff that did bring back memories, mostly old school books. I don't know but to me, physically holding it doesn't really mean much to me but seeing the general contents brought out some sentimentalism so it seems the picture would be enough, maybe a video?

Either way, it seems the the digital form provides more value than the physical one and again: it takes up far less space, is now organize-able, and at my finger tips instead of in a box somewhere in the attic.

I can't wait until we have realistic VR with all senses... we could just can in all the old stuff or something and get rid of them and we would still be able to get the memories back.

Sunday, August 16, 2015

Motivation for Making Things Easy

So this is actually related to the previous post and another way of seeing it.

I have streamlined a lot of our processes such as build and testing (probably mentioned this several times already). But what is the motivation for building these and other tools that make doing things easier?

There are a lot of reasons but at their core is this fact: it reduces (significantly) the cost associated with doing whatever it is that they are supposed to do.

So what?

Well let's take shipping new features for a (software) product, something that is done a lot. If it takes 4 days to build and release a new version, what tends to happen?
Well from my observations and experience:
  • A single release typically has a huge list of features... and when something goes wrong it is very hard to figure out which change actually broke it (I am starting to hear prayers...)*
  • Releases are done less frequently; ready features are still waiting (and when they do go through, is been a month and no one remembers exactly what this feature does and what exactly needs testing)
  • Time and energy are wasted on mundane work that a computer could do in seconds
*Also if it needs rolling back, the features that are working fine would be removed as well. I did this once when I first took over a project. It wasn't my bug but still it was impacting users so had to rollback and removed some unrelated features. Users weren't too happy.

All of this can be summed up as either immediate pain or cause of future pain.
And so this brings us to my conclusion (it might sound familiar and like it should be coming from a philosopher):

There are really only 2 things that motivate people: pain and pleasure (reward)
Therefore if cost of doing something (Cost) > Reward, the tendency is it will not get done... until  Pain > Cost

And in the context of software development, the work is then rushed through and poorly tested, leading to production issues which again take away time from doing other work, which leads to less time for testing and developing quality code, which ... (You get the point)

Basically MORE PAIN

So what is the solution?

Reduce the cost to the point that Cost < Reward, or in other words:


Make things easier!

Sunday, August 9, 2015

The Path of Least Resistance

As everybody probably knows, electricity flows through the path of least resistance. Well generally people do as well!

Surprised? Probably not right? I'm sure you can think of your own examples where you take the easy way out which may or may not have negative consequences later.

So what is (IT) upper management thinking...

We have all these lengthy procedures and "paperwork" needed to get things done. But a bigger issue is the software used to do all this is buggy, slow, and not intuitive...

And surprisingly, we brought these from vendors... using (a lot of) money! If these targeted consumers, i.e people buying iPhones, I'm pretty sure they would be out of business by now.

As a developer, I like building programs that make doing things intuitive and easier... not harder. At the very least they should fix this yet upper management takes no feedback from users and the vendors never do anything on their own... Other then maybe update a picture somewhere or add a note that says their program is incompatible with Chrome.

So here's some questions I want to really ask these guys…

  • Why do we buy software that looks like they were built and last updated in 1990? 
  • More importantly do you think people will do the right things if doing the right things to perfection is so unnecessarily difficult?
  • Why are there systems that seem to trap useful data without any good ways of getting it out (data silos)?
  • If developers have to spend all their energy dealing with these clunky applications and manually transferring the data out of them, how much innovation do you think we will do?
And lastly... It's already hard to get most people innovating or to do the right things, so why are you making it harder?

The Cost of Eating Healthy is Not as Steep as I Thought...

For lunch at work I always buy, mostly because I really can't make my own the night before and don't like eating left over dinner.

I use to (grammar...) eat at Panera and griped about how much it cost: $7-8 per sandwich, $4 for a soup… other restaurants are similar or even more expensive probably because the area has a lot of banks.

A month ago, I came across a huge sheet of coupons for a fast food restaurant and have been pretty much eating that for lunch up to now. $4 gets me 2 burgers and fries!

However... I just realized a correlation. Lately my productivity has plummeted... Brain kind of feels like mush at work. Also my motivation for doing personal work like coding, learning algo, and blogging (yea...) have been near zero. Even watching TV feels like a chore.

So to confirm the hypothesis, I ate at Panera on Friday, and it seems to be working. I wrote this post! However, this is rather short and I'm writing it at 12 AM (ideal blogging hour?)... and editing at 9AM while sitting outside (so maybe it's just the fact of having nothing else to do and I wasn't really tired last night).

Another benefit I guess is since you are paying so much, you may feel richer. I think there's the saying: you are what you think/believe/do.

So if you believe you are rich and act like it, you will become rich!