Monday, December 31, 2012

2012 Retrospective and 2013 Resolutions

Another year goes by with more lessons learned in entrepreneurship, finance, leadership, compassion, and most of all love (for what I do and who I care for). Before I dive into the different topics, here's a quick glance at what I've been doing this year:


- Went to Edmonton for my buddy's wedding
- Went to Las Vegas for a bachelor's party
- Went to Winnipeg for my cousin's wedding


- Read Good to Great
- Re-read Rework
- Re-read Mythical Man Month
- Read Game of Thrones (A Storm of Swords)
- Started singing again along with voice exercises
- Lost 20lbs


- Started building mobile applications using Titanium instead of the usual PhoneGap.
- Started writing apps for the Play framework
- Did far more test automation on client-side and server-side
- Deployed mobile services to Heroku and setup continuous deployment via Jenkins/Heroku
- Started deploying more apps on Windows Azure either C#.NET or NodeJS
- Developed several graphing solutions using RaphaelJS and D3.js and SmoothieJS
- Developed a prototype Wedding Planner iPad app which lets users do seating arrangements, as well as, handling RSVPs


- Expanded my LinkedIn network to 630+ from 300 due to tons of meetups
- Launched CodeStorm, a social network to help developers connect with others in their same
- Launched two mobile apps into the Apple AppStore (iOS)
- Launched one mobile app into the Google Play Store (Android)
- Gave several talks on automation, JavaScript testing, NodeJS, Windows Azure, and more
- Helped grow the Azure meetup to 160+ members
- Joined up with Dell as a Senior Advisor in Software Development

It's amazing how much you can do in a year -- how many peoples' lives you can affect in a positive way. It's the level of the discipline that I have for my work ethic, passion, and family that really drives me to do the things I do. Without passion, I wouldn't be able to push myself so hard. That said, I am going to raise the bar for 2013. 2013 is going to be the year of all-out relentlessness. This is the time for the real Lion to come out as I've spent most of 2012 trying things and experimenting with different strategies on business and engineering, making mistakes, and connecting with the right people.

I've made tons of mistakes in 2012 -- and I've learned from them -- This is the life of an entrepreneur -- No risk, no reward. Now that the variables are in place, 2013 is where the formula starts being applied to every aspect of career, business, and family.

This is my year to shine. I'm going to make a positive impact on everyone I meet, grow stronger software engineering teams, build better products from the business, user experience, and engineering perspectives, and most of all, stay more connected with my family.

Sunday, December 30, 2012

My Social Networks

I've been diving into different social networks recently and I've come to realize that the world needs more of these. With the rise of social networks, it's easy to describe the whole ecosystem as a large mansion. Each room represents a social network and we use a series of a hallways to get to different rooms (APIs).

Facebook (The Family Room)

I love how Facebook has given me the ability to re-connect with my family. As a man who is extremely family oriented (people who know me know how much I care about my family), Facebook has given me the visibility I need to know how really happy each family member is. For example, most of my "Family" smart list has a lot of baby pictures, weddings, celebrations. Although my family is distributed across the world (Philippines, London, Winnipeg, and Vancouver), it is great to know that my family is in good shape.

In addition to family on Facebook, I use the Timeline as my own personal photo album and life experience audit log. Most of the things I add on Facebook are set to "Only Me" to prevent spamming my contacts.

LinkedIn (The Study Room)

LinkedIn provides a seamless experience for people who want to connect with people just as passionate as they are (based on industry) on a professional level. While it does surface features like having an online resume, it goes deeper in ways that you may not expect. From my own personal experience, LinkedIn has been an absolutely fantastic source for establishing new professional relationships, as well as, rekindling older relationships with past teammates. This creates an empowering circle of possible career opportunities where you can formulate stronger teams and build better products.

In addition to being able to find new career opportunities, the LinkedIn engineering teams have implemented a news feature which is curated by your own connections, as well as, "leaders of today" -- whom are successful executives of startups and large corporations.

The more connected you are at a professional capacity -- the more career opportunities start to emerge. More doors, more possibilities, more challenging problems to solve, more people you can make a positive impact on, more chances you'll have to prove your leadership, integrity, and expertise.

Twitter (The News Room)

Twitter is an amazing tool for reading the latest news. Anything that requires real-time will be on Twitter. For example, if there was an earthquake in a specific area of the world, you'd be able to get this information by going to a specific hash (#something) -- News sites have no way of pushing out this information fast enough compared to people tweeting it out on their phones. Another example is for UFC/Boxing events -- people are constantly tweeting who wins each round. Other than that, I use Twitter as a way of finding out about the latest technologies people are hacking on based on who I follow.

Since you're able to follow anyone that has valuable information to you, you're able to customize your feed based on your interests, passions, industry, and more. This is a different model from Facebook because Facebook requires a handshake and usually you're connected to people from high school who don't share the same interests.

Github (The Man Cave)

As a software engineer and serial entrepreneur,  Github is where all my projects go. Github allows me to collaborate with other software engineers to make the world a better place. Not only do we get to help each other with projects, we also get to share an infinite amount of knowledge over how to solve complex software problems. Every software engineer and team has a unique way of solving a particular problem space -- these techniques and approaches become completely transparent on Github. Originally, Github only supported open source projects but with a rather large investment of $100 million, they are now tackling the enterprise arena.

Meetup (The Town Hall Room)

I love meeting new people. Along with LinkedIn and, I've managed to expand my professional network by an order of magnitude. Meetup facilitates a process that lets users easily create events and invitations based on a particular passion (it could be a wine, karaoke, or technology meetup). This could be as simple as a technical talk or a night at the pub with a few people from your industry but not from the same company. Couple and LinkedIn, you'll be able to learn more about specific companies and teams.

Tuesday, December 25, 2012

We Were Young: Staying Motivated and Inspiring Teammates

Historically, leadership has been illustrated as a person who sits on a throne -- the Don Vito Corleone -- the one who yells out orders, commands respect, as well as, disciplines his/her team mates if they make mistakes. In essence, this has caused generations of children to seek out leadership practices that are ineffective in today's corporate and startup culture. While it is always great to be a hustler, a person who is ceaselessly trying to achieve goals -- one should never be blinded by someone's level of motivation in comparison to their composure and integrity.

We were all young at one point where we believed we were invincible. Being invincible meant status --  no one could sway your judgement and no one could tell you you were wrong. As a person evolves through out their life in regards to career and family, they start to become less stubborn. From forging new relationships, rekindling old friendships, and experiencing the roller coaster of life, a person ends up stepping away from that fearless mentality and instead takes the lessons they've learned and applies it on a day-to-day.

In my mind, being relentless means being motivated. The direction of that motivation is what defines the level of integrity that a person has. People can use that motivation in negative or positive ways but as I continue to write this, I find myself reflecting on some of the key things that my mentors have taught me: serve the team. The idea in servant leadership is to not blindly pursue individual goals but to relentlessly seek out the best in your team -- to inspire them with confidence that they will be the best at what they do and that every contribution adds value to the company's vision.  

I must admit that along the way, I do get lost and forget about the whole selfless aspect of leadership -- that is why it is a discipline. Leadership is something you practice, over and over, hours on end. No matter if you're applying the same practices to your family, your sports team, or your group of colleagues at the office -- being motivated to seek out the best in your people builds positive authority, stronger teams, better products, and ultimately adds value to your company on a multitude of levels. 

If you want to make a positive difference in someone's life -- inspire them to be a better person so that they can take those very same practices and apply it to other teammates. Be positive, confident, and motivated -- relentlessly seek out the best in your people.

Thursday, December 13, 2012

Using Yeoman, Jenkins in Continuous Integration

Yeoman is a tool that will concatenate and minify your scripts, as well as, run JavaScript unit tests (JasmineBDD) inside a PhantomJS instance. It's fast and easy to integrate into your existing continuous integration process. At present, we have Jenkins as our work horse who will do the following upon each push to a specific development branch:
  1. Concatenate all JavaScripts based on a Gruntfile (GruntJS with NodeJS)
  2. Run JSHint on the concatenated JavaScript file (call this all.js)
  3. Minify the generated concatenated JS file (call this all.min.js)
  4. Run "yeoman test" to execute all the JavaScript specs against the concatenated JavaScript file
  5. This should fail the build process if any specs fail or if JSHint chokes
At this point, you could ship the assets over to CDN on Amazon CloudFront or Windows Azure Blob (CDN) to further reduce latency for your users.

Below is a shell script that can be easily modified to fit your needs:

 yeoman concat min --disable-insight --no-color  
 rm -rf src/test/build  
 cp -R src/main/MYAPP/public/javascripts src/test/build  
 yeoman test --disable-insight --no-color  

Above, you'll see that we're removing the src/test/build directory, which is just a directory that contains all your JavaScript assets. In the next line, we copy over the application's JavaScript files to the src/test/build folder. One thing to note is that the src/test folder is actually where the Jasmine BDD Test Runner resides.

In trying to integrate Yeoman into your pipeline, you'll most likely hit this feature where it prompts the user to allow 'analytics for usage'. You can disable this prompt by adding the "--disable-insight" flag. The reason why you'd want to disable this feature is because it will cause builds to fail on Jenkins if it comes up.

Happy front-end development!

Saturday, December 1, 2012

Re-reading Rework

Rework is a fantastic business book for all levels of entrepreneurship. I use this book as a way of reconnecting myself with reality. I'm naturally always relentless and sometimes I find myself slowly being blinded by the passion I invest into my vision. In the time that I've been doing startups (2 years ago), I've learned a great deal of things that I will always know I can transfer into the next venture. I love what I do and I love building products that connect people in valuable ways.

In tying into the things that Rework outlines, leverage is one of the most important things to use in any type of process you use in business. If there's a tool you will allow you to put in 20% of the effort but output 80%, you'll find yourself moving faster than your competition and investing that extra time in refining your product. Being stuck in the trenches where you are frantically trying to figure out what features will grow your platform's user base can be a stressful situation. In the beginning, it's described as a "eureeka" moment because it all makes sense; however, once you get into the marketing portion, you find yourself hitting a wall because it just isn't simple enough or people don't understand the value right away.

Since then, I've adapted, learned, and changed my ways. In trying to build better products, I always try to think of the ziploc concept (thanks to an inspiring colleague of mine). If the product you're trying to build doesn't pass the ziploc test, it will almost certainly fail. In the mobile world, it becomes increasingly more important the user experience is extremely simple. One button: login, one button: accomplish a task that adds value to my life. This might seem crazy but it's exactly what gets people addicted to your application. In the past, I've tried to apply the same "tried and proven" user experience strategies, such as, having clear CTAs, better copy, structured information architecture -- things are different now and the bar has been heightened and things need to be relentlessly simplified. In fact, for an example, with tools like Facebook Connect, LinkedIn Connect, and GitHub, it almost makes no sense to build your own authentication system.

In one my startups, we added several different authentication providers, such as, Facebook, Google, Windows Live, and Yahoo!. I think this was a small mis-step which had a huge impact because it introduced too many choices. Software developers (our primary target audience) are obviously technical but ultimately, they are human beings -- and in order to humanize any type of complex software product, it needs to pass the ziploc test. Additionally, as a technology startup, it becomes extremely important to use the right tools for the right job -- not the tools that are politically aligned. On the web, if you're unable to get up and running within a few minutes and shipping to production -- you're probably using the wrong tools. While many things didn't go as expected, this is the life of an entrepreneur and a software believer. It's never a straight road to success -- it's going to be full of wild challenges -- plenty of victories and plenty of losses. The main thing I have learned is that although I've fumbled and tripped over a few obstacles, I'll always have that burning determination to get back up and try it with a fresh perspective again.

"I have not failed. I've just found 10,000 ways that won't work." - Thomas Edison.