Thursday, June 20, 2013

Dos and Don'ts for winning a Hack Day (and how I won it)

One of my greatest accomplishments this year is wining the Hackday at Netflix!!!!

Even thinking of the idea of winning at first sounded a bit too good to be true, since (a) I had worked at the company for just two months at that point (b) it was the first time I was participating in Hackathon or Hack day type of event.

As many people in software industry, I had heard a lot about Hackathons different companies held in Silicon Valley and seen some pictures of many folks staying overnight to finish the most ambitious 24 hour projects ever! So now that I finally moved to Silicon Valley and heard about the initiative my employer was organizing, I couldn't pass on it (although two months is not enough time to learn about the internals of such a large company as Netflix). I devoted a day to this event, learned a lot, met new people, worked on a great idea, and won the Hack day!

Here is the list of dos and don'ts from my limited, yet successful experience.  
  1. Come up with idea
    • Brainstorm about things you'd like to see added to the product, it really doesn't have to be specific to your project. Rather think as a customer of your own product, what would you like to see? What is the missing feature?
    • Another approach is too think from your viewpoint as an engineer, what is it that requires tedious effort? How to make your life easier? Is it maybe your build system? bug filing? IT ticket opening? Chances are others experience the same problems and would be very happy to see your hack implemented 
    • Talk to others in your company and team, most people have really interesting ideas. Due to competing priorities not all ideas will get implemented, but it will help evolve initial idea
  2. Present your idea and get feedback
    • Don't waste too much time on building 20 page Powerpoint presentation. The best way would be to show a prototype, if it's a UI project use Gimp, Paint, or my favorite tool Balsamiq Mockups
    • Send your idea to your peers, to any distribution list that is related to hacking, maybe someone else will join you. 
  3. Keep it simple
    • You have only 24 hours to implement your idea and very short amount of time to present it, so be careful not to be to aggressive with the concept
    • It's for the best, and increases the chances to win, if idea is straightforward, and many people including the judges of the competition can relate to it. So keep it simple.
  4. Join a team
    • If you don't have a killer idea, and you see a team that has one, join it!
    • Or better yet work with people you haven't worked with before. It will give you a chance to meet new people and likely work in a team with diverse skills (and maximize your chances to win). I belonged into this category in Spring '13.
    • Divide work and stick to deadline. For example, plan to finish implementing web services by 8PM, binding it to UI by 10PM, and adding new feature until the sunrise next morning. Don't start working on features until web services are written, as you may run out of time.
    • Be flexible and prepared to let parts of the concept off, the time is short and pressure is on
  5. Learn something new
    • Volunteer to write a piece of project that requires a skill you haven't used recently
    • Or skills you haven't used at all (no extremes although, it's not a good idea to commit to writing objective C component if all you code in is PHP)
  6. Have fun!
    • The last the the most important point. Enjoy what you are doing and don't make winning your biggest goal
    • Give a fun and interesting presentation.

Happy Hacking!

Tuesday, May 21, 2013

Judge the book from it's cover!

Most of us, growing up, were told to not judge people bases on their looks, we we thought to appreciate the inner beauty of things and people and not make a fast judgement based on appearances.

One day this idea expended on books and material objects, and we learned from our elders and decades after started teaching our children the well-known truth Don't judge the book from it's cover... You have to look inside, you have to read it to be able to understand, and only then make an opinion about it.

Only if the latter argument true, if people were not to judge books by their cover books would come without covers. All the books would have the same font, so people would not be tempted by the cover. The books of the world would have light green jackets, have their Title written in Times New Roman, 14 font bold, and the text maybe in Times New Roman, 10.

I have been toying with this idea for a long while and it is something I believe in. Do Judge the book by it's cover!

Most if not all bestseller authors of modern day take the time and spend the resources to get professionally made covers that would particularly appeal to their target audience. As an example, if I am in a bookstore eyeing the bestsellers, after the first glance I know which one of these books I am going to most likely going to buy and read - that is the first one of three I pick up, a decision made entirely based on the cover:

If all these female-friendly titles above do not appeal to you, that simply means the covers were not designed with you in mind, so feel free to skip all the three books.

The same principle, only magnified, applies to User Interface (UI) of software, apps, websites, tools, etc.

The customer today has a very short attention span, and does not have much time to spend "learning" your interface, I am sure there is research done that will tell you how much time you have exactly before the attention span is lost -> your app is uninstalled, your website closed, a quick review published "Doesn't work". (Yes, I know how not helpful and painful it feels going through 1 star reviews saying "it crashed", "didn't open". When you know it works).

Few months ago, I called the biggest and most well-known flower delivery store in Yerevan, to order surpise flowers for a birthday. The pleasant lady on the phone, who held an impressive title, like International Customer Relations Manager, told me she can't take the order over the phone, it has to be made online. Guess what, I had been trying to do exactly that for the last 45 minutes. I called only because I couldn't figure out how to operate their site. The steps for making an order ended up being something like

  1. Open IE,version 8 or earlier supported
  2. Provide your credit card information (Note, I haven't chosen anything yet)
  3. Confirm delivery address and gift message
  4. Choose the flower bouquet 
  5. Click "Buy", then "Deliver" (Note,I haven't seen the final price yet)
  6. The final charge appears on your screen

The lady had to walk me through these steps one-by-one and answer my annoying questions, probably thinking why I was so slow and need so much hand-holding  After the bouquet purchase was finally confirmed, I tried to justify my reasons of being "slow" and taking so much of her time, and explained what I expected from an online store, namely

  1. Browse and select an item
  2. Add to card
  3. Provide credit card information and address
  4. See and confirm pending charges

Just because that's how online stores work today. Her answer was:
"I know it's tedious the first time, but you learned and will do better next time".

Guess what?
If there is another moderately trusted website available, by the time I plan to send flowers to Armenia again, I won't go through this experience again. Had the answer been "we are planning to redesign" I would think again.

Don't be the guy who provides this experience on his website, people won't return.

Judge the book by it's cover, and the website by it's UI.

Friday, May 10, 2013

Google Glass

Recently I had the opportunity to try the Google Glass for myself. The following is some observations noted about the newest tech innovation, that sounds really cool today, and will continue to sound even cooler as it gains more popularity.

The tagline is that Glass is a great concept and is most likely to be a great gadget in near future, and a household accessory within very few years.

To summarize in few bullet points

  1. Lightweight and comfortable - Looks impressive doesn't it? After few minutes of adjusting the projector at the right position, it felt pretty well fitted
  2. Speaks in your skull - Glass uses "bone conduction" and sends sounds directly to your skull unlike the traditional devices. This enables you to hear better in noisy places, and not broadcast the sound to everyone in the building
  3. Take videos and photos fast - I have a goPro camera for sports activities, which I recently took to karting. While I wouldn't risk ruining the Google Glass during rafting and surfing, for bike riding, karting and many other sports it would serve better than goPro, since (a) you see through the projector what you are filming, and (b) you can use voice commands to start and stop taking the video
  4. Opportunity for innovation - There are not many features available yet, so why not innovate, now is the opportunity to write your own apps and rock the world
  5. Coolest new device - Expect to become the "popular kid on the block" as you are one of the first people in you company/school/town to own them. People will try to be friends with you just to try the Glass!
  1. Doesn't fit well with glasses - I wear prescription glasses everyday and didn't find it conformable to wear on top of those
  2. Not ready for consumer use - Do not expect to get an out of the box solution like your IPad, this is a concept, so expect lots of crashes, draining your phone battery when synced on Bluetooth and brace yourself in public since you are likely to say more than a few times "OK Glass" to activate
  3. Not many apps yet - It was just released to lucky few, so it doesn't come with Angry birds on it, wait for innovator to come up with the apps, or better yet design your own
  4. Public acceptance - Not surprisingly people have mixed feelings about the futuristic device suddenly brought to reality from SyFy movies. The glass was already banned from number of bars and casinos, management claims that customers should be able to relax and not worry about being secretly filmed. I'd recommend not to take it on a date, unless your date is a dedicated Geek, others won't appreciate you looking like Terminator and communicating through "parallel universe"
  5. "OK Glass" command - currently the only way to activate through voice command is saying "OK Glass", in case there is another person in surroundings with Google Glass "speaking" to his glass, or someone decides to say "OK Glass" suddenly, that will affect your Glass as well, and they will be in command of it! Expect this will be fixed soon.

So would I use one? Sure, I would love to. Would I buy one? The only scenario I could justify buying it myself, is committing to writing Glass apps at least part time, otherwise it's too pricy for a conceptual gadget.

Friday, April 12, 2013

I don't always test my code ...

It's too good to skip... The The Most Interesting Man in The World ads originally designed for Dos Equis have gone viral, and certainly made their way to software geek circles. But thinking about this, have you ever observed overconfidence, cowboy attitude or perhaps unrealistically aggressive deadlines that allow the only one flavor of testing - not testing at all ? (Here I don't mean the fancy Testing in Production or Function Testing in Production automation methodologies).

Some may ask, "why employ a test department? Skip it! Save on the budget and let customers do the testing". "Isn't that what Facebook does? And many other companies as well?". Answers are: "Don't skip it" and "No, that is not what Facebook and other successful firms do".

It took me some time to realize that the era of "classical approaches" of software development should be considered gone. What we learned in school and where asked to do at work not so long - at most a decade ago, that is focusing on the quality of the software first is long gone... Making sure to use efficient algorithms with best time and space performance, taking time to write clean code, necessarily writing unit tests and automation, and taking time to identify and resolve all the bugs before going to release..

The current market is very competitive, and the customer has very high demands, and if you don't move fast you are done... This is why all the big names in software industry are leaving traditional software development life-cycles and almost consider the world "waterfall" a curse. They are investing many thousands of dollars and hours in adopting Agile development and lean methodologies. Today everyone is challenged to deliver fast, or be taken out of the competition.

The interesting dilemma about customers is that, they are increasingly becoming more tolerant to error, yet being very demanding to get the new technology fast. Truly, after we are "hooked" on Gmail, Dropbox or Strava (new phone app I recently discovered), a few crashes here and there are not going to make us switch... What may make us switch is the point where these products stop evolving and competition provides better services faster and better yet one what will require lesser amount of clicks :)

The question is about the line between quality and speed, knowing how fast can you actually go without ultimately sacrificing on quality. But this is up to the Big guys to decide.

Happy coding!

Friday, March 29, 2013

How To count sheep in binary

Have you ever counted sheep, or maybe clouds to fall asleep?

Chances are the answer is -Yes. It is a customary to many cultures to ask someone trying to get asleep or suffering from light insomnia to visualize a large space (like a green, wide field) and start counting objects in it (like white curly sheep). The goal is to occupy one's mind with repetitive and rhythmic task, which presumably introduces boredom, and that will make one fall asleep sooner.

I have been told to try this when refusing to go to bed many times as a kid. However the boredom trick never worked for me, starting to count sheep actually got me more awake, trying to come up with the optimized ways of sheep counting... See, counting them one-by-one would get me confused on which sheep were already counted, and I felt responsible for not counting the same sheep twice. One of the things I envisioned was building a gate in the middle of the field starting with all sheep on one side and none on the other, and send sheep to the empty side of the gate and increment the sheep count, maybe with a digital sign (like modern day parking lots showing the number of available spaces). 

Of course there was still lot to do: instead of counting one-by-one you can be sending a pair of sheep trough the gate at once counting the evens only 2, 4, 6, etc sheep helping to save time! You don't need to stop here,  you can go by the increments of 5 or better yet 10. This was already enough, at this point there is no point already of thinking about falling asleep. My complains to my parents that I reached ten-thousand sheep after two minutes would surprisingly leave them disapproving. 


As a graduate student at University of Michigan, I found myself at the same dilemma getting more and more anxious about not being able to fall asleep for the few precious hours before the final exams. I would spend hours on the typical task of counting if I fall asleep this exact second how much time would I be sleeping before the alarms start buzzing... This is by far the worst way of trying to fall asleep besides maybe drinking Red Bull right before going to bed.

Then, one day I recalled the sheep counting task from my childhood. It wouldn't work in the original version, since it never did, so it needed to be updated to make any sense at all... I "reinvented" a slightly geeky version of Sheep in the Field. By counting sheep in binary! Counting goes as 00001, 00010, 00011, 00100, 00101, 00110, ... Boring and confusing enough, isn't it?

This is how I envision the field with sheep: 

There is a possibility that I made a mistake the sheep counting/numbering on this picture already. Additionally  coming up with this wonderful picture on MS Paint really bored me. The morale of this story - counting sheep in binary(*) worked for me. You should try it out as well!

(*) Binary numbering system:

Decimal (base 10)
Binary (base 2)



Sunday, March 10, 2013

Girly geek or Geeky girl

I like the word Geek. These days the meaning of the word has shifted from the synonym of rather negative words looser or dork to a rather positive meaning, like a "successful technologist" or "technology enthusiast".

If you think about it... Today we would not call everyone in technology a geek - neither the guy who can code, nor the cliché character from movies wearing very thick glasses and collecting rare varieties of butterflies automatically qualifies as a geek. The word has become descriptive of a person who truly likes technology and is good with it.

Attention Geeks & Girlfriends of Geeks! MicroSoft geek Definition T-Shirt (L)
Merriam-Webster definition of geek.

To support this theory just search for the word "Geek" on Bing or Google. You will see no negative results at among top 10. Microsoft company store is full with gear – cups, T-shirts, hats, toys with the trademark "geek" on them.

I take no offense in being called a geek. At times I have felt almost proud that a classmate, teammate or a colleague has seen enough passion in me for making things better in technology and I have demonstrated the depth of knowledge to be called a geek, and qualify for the membership of Elite Society of Geeks.  

How would the ladies of the Elite Society of Geeks should be identifying ourselves? By ladies/girls(*) I mean besides the obvious anatomical differences from men, species of humans that including but not limited to the list, may: display fondness of shopping, wear makeup daily, possess extensive knowledge of the designer brands, willingly choose walk on high heel shoes for extended period of time and intermittently become overly emotional about stuff.

Lately I needed to provide a brief bio - and I thought of being slightly funny to take the pressure off and identify myself as a "geeky girl". However on the second thought I realized that it is more related to a Halloween costume of a girl wearing a short skirts and oversized glasses than a computer programmer, and that it does not assume about one's technical overachiever status or membership in the unregistered society of Geeks. But then what was the alternative to put in the bio?  

Next I thought about the a little wordplay and expression "girly geek". Well, maybe I didn't come up with it myself - but it represented exactly what I meant! It is a person with strong intellectual skills and high level of knowledge of the field who also satisfies the definition of a girl(*) from above.

Therefore, I hereby declared myself a proud "girly geek". Join the club ladies!

Saturday, March 9, 2013

We're Back! [to blogging]

Dear reader, for a long time I have been planning to comeback to blogging, but between the constant travel, work deadlines, busy schedule and overall high stress it has been difficult to make the time commitment and start again. Now that it the blog is linked to my site I am excited to be posting again!

So with the nearing closing of chapter now in Rainycity and a new coming up  in Sunnyvale please read, comment, share. Welcome to my blog.