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. 

Wednesday, November 28, 2012

CodeStorm: Answering the question of how to build stronger software engineering teams

With CodeStorm, we're always thinking about what makes software engineering teams hustle. From the tools each team member uses, to the process, to the internal and external initiatives set forth by higher level leadership.

After watching Moneyball (2011), it tells the story of how Billy Beane reconstructed his team and rethought how to build a stronger, better baseball team on a vastly lower budget than his competition. While everyone else in the Baseball industry was using archaic ways of recruiting based on experience and intuition (paying the highest for the rockstars), Billy Beane disrupted everything by recruiting on a specific metric -- On Base Percentage. The interesting thing here is that the players he recruited on his team were undervalued -- they weren't all stars -- and they were all passionate about their craft. In the end, the moral of the story is that the sum of the team is greater than each individual part put together. Moneyball was an incredibly inspirational film for me as it is something I always think about when building up CodeStorm -- how do we build better and stronger software engineering team?

Our answer is to allow teams of developers to easily login through GitHub and have our platform magically come up with big data metrics (commits, languages, technologies, tools, activity) and present teams with a wide array of analytics in the form of visualizations (venn diagrams) that can help teams become better. The idea here is that you can't improve without measuring yourself -- and in building a high performance software engineering team, there needs to be a new way of finding talent and ensuring team is constantly innovating, pushing the limits of their products, and inspiring themselves to be better.

Wednesday, November 14, 2012

It's not about me, it's about the team

Practicing servant leadership for the past few years, I've always made the effort to make every person and team I come across better -- through amplifying their confidence, increasing their ability to execute on tasks/missions, as well as, provide them with inspiration to chase after goals that they are most passionate about. There is greatness in everyone -- it's always my goal to amplify that because win-win situations can only be achieved if the whole team is greater than the sum of its parts. This is how you grow determined, energetic, positive learning teams based on mastery and purpose.

In looking at different perspectives on the definition of leadership, there has always been this ongoing misconception of what "leadership" is. People seem to think that rank is what makes you a leader. Partially. Generally, the graceful and professional actions of a leader in a number of situations definitely lead to them moving up in rank but to be a true leader is based on who you are. Having rank is one thing -- Having authority is another. As James C. Hunter would say, management is what you do: the budgeting, the allocations, the reports, the meetings, the salary negotiations -- but leadership is who you are -- you're able to inspire the team to move faster than they have to move, to think faster than they have to think -- you can naturally trigger hustle. Having this ability takes time and patience as it is solely based on growing your authority with the rest of the team and the fastest way to grow authority is to serve and support your teammates.

The above graph is an exponential function -- we can take this into account when modelling the behaviour of servant leadership and its return on investment for team culture. If we were to take all connections on LinkedIn and graph the level of authority you have as a leader -- you'll find a great way of measuring how much of a positive impact you're making on your colleagues and friends. If you're wondering how you can add data, one can use the recommendations or even the +skills feature (hey, this is a great idea for a startup built on top of LinkedIn's API!). 

The main point I'm trying to illustrate is that as a leader, one needs to continuously be making a positive impact on people's lives -- encouraging them to be the best they can be and enabling an environment that lets them be the best at what they do. This is how we're able to improve and push forward on several different levels from corporate and engineering culture to advancements in technology. Ultimately, things get better by being a role model and encouraging your teammates. 

In writing this, I have to admit that I'm caught at times thinking to myself, "what am I doing that I'm not supposed to be doing and what am I not doing that I'm supposed to be doing". This loop is the driving force in generating positive energy because you're always hungry for finding new ways to improve the world around you.


Friday, November 9, 2012

Valuable tips for students wanting to get into Software Engineering

Software development and technology moves extremely fast. It's an ever-changing landscape of different tools, platforms, and initiatives. With such a fast-paced discipline, I've been hearing questions from students wanting to get into software engineering, such as, "what are a few things I need to do in order to land a job with a team that's just as passionate as I am?"

Let's face it, being a software engineer is the hottest career right now. There's a war for talent where companies (startups and large corporations) are fighting over the best of the best software engineers that are leaders in their respective masteries (backend, frontend, mobile, games, etc). We're in an age where the cost of technology is so inexpensive thanks to cloud computing and continuously evolving toolsets. In addition to this, teams are now practicing lean. Lean is a simple way of quickly testing viability and value proposition by shipping fast and shipping often. This means that there are no "perfect" products in the startup world and usually means that there are a lot of 80/20 approaches to solving problems.

Below are a few suggestions that can help in landing your first job when you're coming out of university:

1. Show up at meetups and expand your professional network

It's always great meeting new people and finding out who's really dedicated to their mastery. Meetups will often open the doors to these passionate people. The faster you're able to connect with people that love what they do, the faster you can start making a positive impact on the community by working with them on collaborative projects, technical talks,  and open source initiatives.

2. Share your brilliance on Github and continuously improve yourself as a software craftsperson

Part of being a leader means not being afraid of embarrassment. Every programmer can write terrible code but it's really up to them to take in that constructive criticism from their peers, improve, and push forward. Being open about your mistakes is a great way of showing a high level of maturity.

3. Make a name for yourself as a leader -- inspire others around you

Adding value to other people's lives can have an extremely positive impact on your career path. People will always remember your acts of kindness and dedication -- going above and beyond the call of duty to help them, mentor them, or inspire them.


Thursday, November 1, 2012

The Rise of Apps in Windows 8: Why you should join up for WOWZAPP hackathons!

When Microsoft commits to surfacing a new platform for new experiences, new business ventures, and new technologies, they usually go big. To me, this is a strategic opportunity for anyone that is a software developer as it opens up so many doors from a career perspective and at different levels of professional networking and talent acquisition.

From November 9th to November 12th, there will be a WOWZAPP Microsoft-hosted Windows 8 hackathon where there will be onsite Microsoft software engineers and technical evangelists to help you get up and running. This is a great opportunity for a developer wanting to make a name for themselves as Windows 8 is a compelling new operating system that will set the bar for business applications, games, and social media touch points for the next few years!

Come to the hackathon with your ideas on solving issues in a specific problem-space!


Tuesday, October 23, 2012

Plenty of Fish - Lessons Learned Meetup

Today, I had the fantastic opportunity of going to a retrospective by Plenty of Fish. As you may know, Plenty of Fish is the largest online dating site and it was all started by a local BCIT graduate named Markus Frind.

Below are notes that were taken on my iPhone. I do apologize as I am continually editing this blogpost.

What is Plenty of Fish?

An online dating site.

Why enter the dating market?

Back in 2003, it was the only thing that was interesting to build. Markus already knew ASP but wanted to learn more about building web applications with ASP.NET and improve his skills on his resume. 

How do you deal with the network effects problem?

In the early days, Plenty of Fish gained traction through Vancouver and Toronto.  There wasn't any silver bullet or magic around it -- Plenty of Fish heavily relied on organic user growth and SEO. The focus was to retain users more than go out and acquire new ones.

What are some early challenges you faced?

Markus actually ended up doing everything for the first 5 years. Some problems in growth involve asking "how do I get bigger in UK? or the US?". Additionally, the site grew so fast that they hit scaling issues.

What is your revenue model?

Plenty of Fish had lots of visitors. Google AdSense helped with bringing in revenue. If you have tons of users on the site, making money off users is the creative part.

Your startup began in the basement -- what made you move into your new office at (25th floor) Harbour Centre with a beautiful view?

Customer service.  Had 15 million users and peaking at 2 billion page views.  Markus needed help with supporting a growing user base.

Has Plenty of Fish changed much?

A year ago, it was 5% mobile traffic.  Now, Plenty of Fish has significant mobile traffic (I heard 70% but this is unconfirmed as I was taking notes pretty fast). 

What are the biggest challenges you face today?

Predict how users will interact with the site. Growth hacking is the process of finding out what will be important in a month from now.  Additionally, scaling has been a huge problem because of the fast user growth. 

Did you ever want to move from Vancouver?

No. Vancouver is home.  

5 years from now.  What will online dating look like?

No idea. Mobile is where everything is going now.

Advice to startups?

Release all the time.  Fix things.  Just get it out the door. It's okay if you break things, just fix them and move on. Additionally, always have growth hacking in mind (what can you do now to increase growth?).

Don't care about the competition -- they have their own fish to fry -- focus on the problems you're trying to solve and do it well.

Do lots of predictability modelling to improve how users will interact with each other. The endgame is to try to make the platform more valuable to the users. 

Mobile is a massive land grab right now. There's no mobile revenue just yet but there will be.

SEO and word-of-mouth is a great way for user acquisition. Try to figure out your retention rate for your users.

Did you ever have funding problems?


Site is simple.  What stopped you from adding new features? 

The prettier we make the site the more men sign up.  POF tries to be very simple and neutral so that users from different countries won't react too differently. For example, one of the top dating sites in the United Kingdom has a guy wearing a turtleneck -- that won't fly too well with users in the United States.

What's the company culture like?

Culture is like Facebook. Get shit done.  Within a week, you can affect millions of people in a day. If you're an engineer, there are tons of scaling problems to look into.  In regards to the original technology stack, there is still a lot of it around. POF isn't a place where a person can sit in the back of the room and hope that nobody notices -- everyone hustles because it affects everyone's productivity and work ethic.

How do you fix male female ratio? 

If there is too many men on the platform, they just drop off. Whatever you do you won't lose too many people.  Know what will drive growth.  

How do you get people to come back to Plenty of Fish?

Email has become a place for spam, instead, send push notifications to really get the user back.

What information do you find interesting about your user base?

Money is made from the 40 plus year olds. There is significant growth (blowing up) in the younger segments (18-25) using mobile.  At the end of the day, Plenty of Fish is making online dating culturally accepted.


It was a great experience hearing lessons learned from Markus Frind -- it has been an amazing journey for him to grow a business from 0 to 50+ million users with a revenue of 10+ million a year.


Monday, October 22, 2012

Running MongoDB on Windows Azure

It has been an exciting journey so far in trying to grow the Vancouver Windows Azure meetup with my business partner Jef King. Our mission has always been to inspire the community to build solutions on top of Windows Azure -- Since the release of many different SDKs, developers are now able to bring value to their users easily with common technologies. These technologies include Python, NodeJS, PHP, and Java. We are now at over 130 members with 10+ meetups that average 30 people coming out.

Check out the video! John Woakes, lead software developer from iQmetrix done a brilliant retrospective on running MongoDB on Windows Azure for the past few years. It's been an exciting ride for him and his team!


Saturday, October 13, 2012

Inspiring talk by Kyle Vogt, co-founder of Justin.TV/Twitch.TV

Truly inspiring talk -- especially where he dives into the trough of sorrow. Here are the notes I took in regards to the 16 lessons learned:

  1. Buy catered lunch -- employees would be waiting at long lineups or walking far just to get lunch -- Keep them at the office so they can socialize.
  2. Use Google Apps -- Simplifies email, calendars, and document sharing.
  3. Use data-driven development -- metrics on new features / AB Test
  4. Use hiring screeners
  5. Keep your job interviews short
  6. Don't hire a PR firm -- Marketing associate instead, leveraged his own connections..full time thinking about the product
  7. Put one guy on fund-raising -- This should be a focused initiative
  8. Work from home -- You don't need an office nowadays, keep costs down... need one room for a separate phonecall
  9. Use the cloud while you're small -- don't buy actual hardware unless you're a hardware company.
  10. Listen to your users the right way -- Users can tell you what's wrong..not what they want, observe the pain points
  11. Use a .com -- .tv was a marketing failure because people would go to
  12. Be transparent with employees: how much longer can the company survive with current funding?
  13. Don't outsource your core components
  14. Hire specialists when needed (if no one has domain knowledge, build or buy decision)
  15. Hire people smarter than yourself
  16. Have a plan for actually making money

Why I wrote node-twitchtv, a NodeJS client for TwitchTV API

I use daily -- some of the main gamers I follow are nl_kripp, kungentv, kingkongor, and reckful. They're really . The mission is simple for Twitch: connect gamers with their audiences, anywhere and anytime. It is open sourced on Github and can easily be integrated into your existing NodeJS solutions by using "npm install node-twitchtv".

After searching on npm for a TwitchTV / NodeJS client, it seemed like no one has attempted this. I decided to take the deep dive and give it a shot. In part of the design for this module,

Round 1: Retrieving basic data like games, channel streams, users

Round 2: Authentication with OAuth2 (server-side workflow)

Round 3: Video streaming as easy as "npm install node-twitchtv" (once the APIs are open)

Where I was going with this: NodeJS runs on all platforms now, it even runs flawlessly on Microsoft's new Windows 8 operating system (which uses the same tools for Tablets and PCs). My heroic vision was, If you wanted to build a streaming client, it would be as simple as, "npm install node-twitchtv", write a UI over top of it, plugin your Oauth2 credentials and off you go (use the Windows 8 APIs like screen recording and pipe it into the client's listener).

As an example, it would be amazing to be able to easily stream your "Pirates and Daisies" (a very popular tablet/pc Windows 8 game) gameplay by simply enabling the permission for the node-twitchtv client emitter. The idea behind this is to empower the Gamer -- Gamers will change games over time and it's important to keep their loyal followers connected to them because it isn't so much the game that is bringing the value, it's the persona and level of expertise they bring to the game.

As part of moving this forward, I wanted to ensure that there was 100% engineering transparency. That means, taking in feedback from the community who were passionate about Twitch's mission and willing to move forward with its streaming APIs.

Monday, October 8, 2012

Lessons Learned from Titanium SDK

It's been fun hacking together projects that integrate with Facebook's Graph API. In a matter of a few minutes, I was able to get login working, fetching friends, relationships, and profile information. Titanium team has been doing an amazing job at providing examples and documentation.

Don't trust the comments in Q&A section

Sifting through pages and pages of questions and answers that seem somewhat relevant to your issue will take an exhausting amount of time. Adding to that, some answers are 3 years old! I don't even know why they keep that sort of information around -- it is incredibly misleading. I really wish they would move to StackExchange.

Dig into the Objective C libraries

When I couldn't understand why I wasn't able to set http headers using the out-of-the-box HTTP Client in JavaScript, I figured out that there are only specific times you can set HTTP headers. Thankfully, I built a Service Locator and Service class that poly-filled everything for me. It is used internally within the HTTP Client 

Use the right source of documentation

When you google, "Titanium ui view", you'll most likely land here: This page is actually part of version 1.7.2 -- Some of the methods may still exist in 2.1.3 (latest), but you're sure going to hit a wall soon if you're working with "soon to be" deprecated methods. The right source is here:

Use an MVC framework 

The examples in the Titanium documentation write UI components in a way that is reminscent of Java Swing. This is fine but really, developers should be encouraged to use the right pattern for UI development. This would be Model View Controller. Here is the frmaework that is suggested:

Use keybinds to increase productivity

I'm a gamer -- I used to play World of Warcraft where I had every single ability bound to a key even if it was something as useless as targeting a specific mob. Anything you can do to shave off seconds will help you enjoy development more. Below are screenshots of my Eclipse keybinds.

Capture metrics and behaviours

Titanium has an API for tracking navigation events and feature events. If you come from Google Analytics or Omniture, we can easily describe these events as page views and custom events. Adding analytics will give you the insights you need to optimize certain views to increase XYZ action. For example, if you're creating an application with shareable data, you basically want to increase sharing throughout the network. Adding metrics around determining if users are seeing the Share button can be done to optimize this feature's value.

Loving it

I've really enjoyed working with Titanium. I definitely will be using it other hacks. At first, it seems daunting but that's only because the documentation and SEO can lead you down a dark path. Look for the real sources and you'll find yourself being productive! 


Sunday, October 7, 2012

Using PHP and Git-based Deployment on Heroku without Facebook Apps

Getting PHP up and running on Heroku is easy. Although you can easily deploy PHP applications on your own traditional web hosting provider (Monster Hosting, 1&1 Hosting), PHPFog, or Windows Azure, in this blogpost, we quickly go through how to get up and running on Heroku.

Just before going into it, a while ago, there was a partnership announced between Facebook and Heroku. As an application developer, if you wanted a place (for free) to deploy your social application, you could use Heroku -- and you would have a lot of automation behind setting up your canvas/tab configuration. This was back in the day when they had Page Tabs!

Traditionally, developers would use web hosting companies like 1and1 where you needed to pay a small amount per month and you would have a web site; however, the question was, "will it scale?". Being on a platform like Heroku, Windows Azure, PHPFog gives you the options you need to scale accordingly based on your social application's virality. We all know how it feels when you launch and your site goes down with the increase traffic. 

Below is a snippet of my shell that I used to get up and running within a matter of seconds. This workflow assumes you already have the Heroku Toolbelt or Gem installed (gem install heroku).

Let's walk through what I did!

  1. Created a heroku application and named it "hello-php-jbueza"
  2. Initialized the current folder as a git repository (git init)
  3. Create a file "index.php" with phpinfo(); 
  4. Added the file and committed changes to my local repository
  5. Pushed to heroku remote (master)
Hope that helps! I understand there are other great platforms to deploy to like PHPFog and Windows Azure, but if you're using Heroku at your next hackathon (and you want to use PHP), this should get you up and running quickly.


Monday, September 24, 2012

Using Sublime Text 2 Build Systems, NodeJS and Mocha

Recently, I've been switching between TextMate and Sublime Text 2. The latest feature I've been using quite a bit on NodeJS projects is the Sublime Text 2 Build Systems. Although I don't specifically use the "NodeJS Build System", I do use the Make version with a minor edit to how it pipes its commands through shell instead of its own sandboxed way of doing things. This enables the build system to leverage your current bash settings.

Below is a screenshot of my Sublime Text set to Make build system:

Below is a screen shot of what was changed (~/Library/Application Support/Sublime Text 2/Packages):

A Sublime Text 2 build system is a preconfigured plugin for Sublime Text with associated keybinds to make running tests, compiling the project, and deploying your application easier. It's a productivity monster. People who come from the Visual Studio or Eclipse (Java) world will love it as running your GNU make build system can be as easy as +B (if you're on OS X).

This is the result:

Hope that helps!

If you're wondering what my Makefile has, it's a simple one that invokes Mocha and points to the tests directory, as well as, changes the reporter to be less chatty.

Monday, September 17, 2012

You Only Live Once

"YOLO" stands for "You Only Live Once". From what I've seen, people tend to use this phrase as an excuse to do unlawful or reckless things.

I work extremely hard to be a role model for my family and my teammates. A few years ago, I took a second to reflect on how really successful I've been based on my core values that have matured along the path of life. I'm a firm believer that the test of a person's integrity is based on their values. These are values I am willing to die for and I do what I have to do to uphold them.

Be respectful

Everyone has their own path in life and it's important that you respect their decisions. Never impose a belief or work ethic on someone -- but inspire them to be better and encourage them to make a difference in others' lives.

Be professional

We always come across someone in life that is nasty to you, or your family, or your teammates. This should never phase you. The best thing you can do is be professional and just be positive.

Be relentless

Work your ass off. Set the bar high and leave no stone unturned in whatever you do. Search for the best in the people around you and amplify it.

Be selfless

Never expect someone to pay you back for your kindness. The only way to inspire people to be a better person and improve is go out of your way to support them without expecting something back. Being a mentor and being positive is extremely infectious.

If you only live once, why not live to inspire others to be better? Make a difference.

Monday, September 10, 2012

LiveBolt: Cloud-based deadbolt automation -- Cheap hardware integration and cloud computing

Cloud Computing has disrupted the way we build software today by reducing infrastructure costs dramatically. Five years ago, in order to even start building an application, you would need to put down several hundred thousand dollars to pay for servers. Now? Free while you're small and then scale up when you've got users (Windows Azure / Heroku). In today's blog post, I wanted to quickly blog about the reduction in costs on hardware that integrates with cloud services.

I am talking about LiveBolt, the winners of the Tech Crunch Disrupt hackathon. For only $60, you get a mount that integrates with your door's deadbolt and you can get entry-level home automation. In only a few hours, this team was able to ship an MVP that provides instantaneous home automation. The value proposition here is that you can easily get into your house without using keys (which are annoying to have... I'd rather use my iPhone to unlock/lock things).

The future is bright as we continue to hack together solutions that bring value -- I always emphasize "hack" as a way of describing a solution with a short time-to-market and obvious value proposition. Infrastructure costs and hardware costs are going down which allows us to pave the way to the future with innovation and creativity.

Keep hacking away and solving problems!

Thursday, September 6, 2012

Designing the Amazing Insights Logo

Amazing Insights is a real-time server analytics and logging application that any .NET developer can easily integrate into their existing solutions. When designing the Amazing Insights logo, there were a few core characteristics that needed to be accentuated to empower the brand:

  1. High Performance
  2. Confidence
  3. Well balanced
With these 3 characteristics of Amazing Insights, I set out to look for inspiration. 

 I finally came to BMW M logo as a source of creativity as I was walking near a Best Buy and saw an M6 parked in the front.

The BMW M has a global reputation to be BMW's high performance line up in any class. The classes include M3, M5, M6, M-Coupe, and M-Roadster. If you want a high power vehicle within the BMW brand, you had to get an M.

In regards to confidence and balance -- I went with higher font size A and I but a smaller font for the rest of the letters. In trying to project confidence, everything is uppercase and the grid lines up perfectly to speak to its solidity. With power, comes the need for balance. In order to gain balance, one needs to provide control. In the Amazing Insights logo, the base is lined up perfectly and the stripes (//) with the A are exactly 2 pixels apart giving it 3 stripes.

On the whole, ABC is moving forward on sales, branding, and product development. Thank you all for the wonderful and honest feedback.

TransLink rolling out Fare Gates

Translink will be rolling out new Fare Gates which automate the process of validating tickets. This a great initiative. In the article, it denotes that having this system in place will generate $4 million dollars annually. Let's be honest though -- $4 million at SkyTrain's scale (500,000 daily users) is chump change -- There's more tha. At best case, let's say 50% of the people in daily usage are 3-zone and out of the 50% we have 10% that are not paying for 3-zone bus passes and end up paying twice a day at $5 a ticket (2 ways).

250,000 * 0.9 * $7.55 ($151/20 work days assumption) = $1,698,750
250,000 * 0.1 * $10 = $250,000
Total = ~$2million revenue per day based on 3-zone daily users (best case scenario). These super rough numbers don't even count 1-zone and 2-zone. Based from experience on using the SkyTrain every work day even sometimes on weekends for the last 7 years -- There's no shortage of people coming from Surrey. I actually think most customers are from Surrey based on how packed it is during rush hour (7am to 9am and 4pm to 7pm).

Taking this even farther, I don't believe the goal for Fare Gates is to make the customer's transportation experience better -- it isn't to make their lives more easier, safer, or more comfortable. It is to ensure they can implement more automation and reduce the man-power (guards) required to keep the operation going. This is just what needs to happen to run at their scale. So the question I have is will reducing the number of guards at each station make customers feel more safe? I doubt that.

Let's think for a second and say TransLink lays off 1,000 guards. Let's also assume that each guard is about $100,000 per year (base salary, vacation, health insurance, sick days, etc). That's $100,000,000 in savings with a $20,000,000 investment in automation (FareGates). Furthermore, I'd like to describe my perspective as a daily user.

The fundamental problems (as a daily user of SkyTrain) are scale and safety. People think of TransLink as a fantastic way of getting between Surrey and Downtown Vancouver. It is; however, it comes with its own set of problems. Those problems include drug addicts / violent drunks causing problems on the train, civil disputes randomly starting, and gradual rising costs of monthly transportation passes.

I fully understand that when running a business, the most expensive resource in staying alive is the people. People are expensive. Moving forward, automation is the key to saving operational costs -- but I think that TransLink will need to be more vigilant than ever to ensure the safety of their customers and the scalability of the system as a whole. There are far too many people using SkyTrain during rush hour and customers need a way to feel safe and comfortable without costing an arm and a leg on monthly transportation passes.

Tuesday, September 4, 2012

Thoughts on Responsive Web Design

As part of our core initiatives to make ABC more user-friendly, I've redone the homepage (landing on master very soon) to be more mobile-friendly and gives a clearer perspective to the end user on the value that our suite of tools provide. Incidentally,  this included using common patterns found in Responsive Web Design practices. After working through a 6+ month old site, I've come to realize that media queries can be an absolute nightmare for older sites -- but none the less, there is always a solution: find the highest value pages and give them a responsive interface.

In our particular case, our primary goal was to increase conversion of user registrations (I think most startups have this as a common goal). That said, we've RWD'd the homepage and I'm currently moving towards the product pages now including CodeStorm (devops social network) and Amazing Insights (real-time logging and analytics for Windows Azure). 

With lessons learned, when starting a new project, I'd look at Twitter's Bootstrap project. It is an amazing UI library that comes with grids and reusable components. Additionally, as long as you set the viewport meta element and include its responsive stylesheet, you can get a fully responsive website in a matter of minutes. That said, this comes with assumptions. The assumption is that you're using the same grid system as Bootstrap. Adding to that, Bootstrap's documentation is fantastic: it is full of examples and provides notes on limitations/caveats/gotchas.

At the end of this effort, I ended up just rewriting the company front-end to be in line with Twitter Bootstrap's examples. The out-of-the-box responsive web design you get from following the markup structure is extremely valuable in that you can continue to RWD all your pages with the least amount of worries for specific use cases. 

Friday, August 31, 2012

Windows Azure Mobile Services: The Hacker Way

Microsoft recently released Azure Mobile Services, which allows your teams to quickly create a data store and a few operations (insert, update, delete, read) to quickly start pushing/pulling data from your mobile clients (iOS, Android, Windows). I call this "back-end as a service" or "BaaS". Furthermore, It is becoming a hot topic for the past few months as Parse is currently tackling the same problem space. It turns out, there are many more companies in the same arena. Also, to point out, the Microsoft team actually built that with NodeJS / SQL Server.

The value in BaaS is in its ability to provide mobile hackers a quick way to prototype (create an MVP) without having to think about the back-end architecture. This is quite powerful because thinking about architecture might put you down a path that slows down your team's momentum. It is definitely needed -- but not for creating an MVP and putting it infront of real customers and then taking in feedback.

Mobile is here -- it is going to stay -- it is now the standard. That said, releasing a BaaS to help accelerate team's TTM (time to market) is making a significant impact on how we (the consumer) can make better decisions on how these apps make our lives easier and how mobile app developers can make mobile user engagement easier. 

Monday, August 27, 2012

Autonomy, Mastery, Purpose -- Software Engineering

Software engineering is hard. We all know from a technical perspective, we hit our heads against the desks trying to figure out solutions to problems that have the most constrained environments and it's up to our ingeniousness to think outside the box and solve it. This is why I love software. In today's blogpost,  I won't be talking about the technical aspect of software engineering but the human side: team building.

The next generation software engineering companies that create the most interactive, engaged, and fun environments will be built on top of 3 core concepts: autonomy, mastery, and purpose. This is a widely used phrase and it's evangelized by Dan Pink. In his book, "Drive", it dives into the problems of current working environments for software teams but then it goes into a few studies and examples of how to evolve the working environments to create teams that know how to hustle, have fun, and drive value to their customers.

Valve, Github, Atlassian, 37 Signals -- all great examples of teams that know how to hustle, think outside the box, and ship amazing products that provide a solid amount of value proposition.

Why does autonomy work? At the core of autonomy is self-direction. A teammate has the ability to take the reigns of a project and apply their own creative thinking to solve a customer's problem. Human beings naturally want to build ... things. We're made to be creative -- our minds are so expansive. We've put a man on the moon, we've created microprocessors which can calculate results in milliseconds on extremely large data sets, and we've created medicine that heals people's pains. With such an incredibly valuable tool (the mind) to the human anatomy,  the question isn't "why does autonomy work?" it should be, "why do we hire managers to tell smart people to sit down, shut up, and code XYZ"? Self-direction is the result of a teammate having an amazingly positive attitude, the willingness to learn, and the initiative to take ownership and get things done.

Mastery is another core aspect of motivation. Mastery can be defined as the level of subject-matter expertise one has in any particular topic whether it is sales, engineering, or user experience. Adding to that, having a level of expertise also is complimented by the attitude to consistently keep learning new things -- getting better through practice -- constantly evolving and improving.

Purpose is the drive towards accomplishing the mission. Having a team with shared vision -- with a purpose to ship an amazing product -- is the most satisfying and exciting feeling one can have. I always like to think of this as an NHL team putting their hearts and souls into winning the Stanley Cup.

The management styles of the 1900s which are militaristic, iron-fist, and hierarchical will die off at an internal level (there's political sides to "showing" that you have hierarchy for example to investors) to make way for a much more humanistic, evolved, and scalable solution that obviously puts the team, customer, and product first -- not hierarchy. It is becoming widespread and it's clear that software engineers prefer the freedom to create: to experiment, take ownership, and drive value proposition in their own way than have a fancy title and a large office.

Friday, August 24, 2012

A focus on making DevOps more open and connected

After serving the RESAAS vision and its team of high performance salespeople, visionaries, and software engineers for the past year -- I've made the decision to take on a different challenge that involves helping DevOps be more open and connected to their tools, teams, and solutions using social and big data as vehicles to achieve our grand vision. It's official -- I have left RESAAS and I'm determined to make things easier for DevOps as it continues to grow as an integral role in software engineering teams.

By reading Software Will Eat The World -- one can agree that software has the ability to disrupt a wide array of industries and markets. The great thing about this is with cloud computing, costs to ship an MVP have been reduced drastically. Furthermore, having production systems serving millions of customers have caused the "DevOps" role to emerge in Internet-based software companies.

DevOps can be defined as a hybrid of operations, quality assurance, as well as, development. With over 3+ billion users on the internet and different SaaS initiatives across the globe, it's becoming an increasingly hot role to play on a field where your online services must have an exceptional uptime record. But let's face it, anyone who has been in the role of a DevOp knows this -- it can be extremely stressful with the velocity of most software engineering teams shipping code to production over 20 times a day utilizing continuous deployment processes.

The faster a DevOp can react and resolve a situation with the right tools and right environment in place, the safer the business can feel about the user experience (do our customers trust our brand and reliability of our services if we're down?) and the health of their sales pipeline (can we as a business keep the foot on the gas pedal for customer acquisition?).

Saturday, August 4, 2012

Tools We Use at RESAAS

If you're ever wondering what we use for tools at RESAAS, I've taken the time to write about the different tools we use for specific parts of our engineering initiatives. This includes automation, project management, and feature development across different operating systems and platforms.

Feature Development on Web

Visual Studio 2010 Professional - This can be downloaded through MSDN. Additionally, since our whole platform is built on Windows Azure, we use the Azure .NET SDK to integrate with many of Microsoft's cloud services, such as, Blob, Tables, Queues, Service Bus, SQL Azure, and Traffic Manager.

Sublime Text 2 - A free text editor that has interoperable plugins with Text Mate. It also works flawlessly across Windows and Mac OS X.

SASS (Compass) - A easy-to-use language on top of CSS which gives developers the ability to create reusable mixins, css variables, as well as, auto concatenation and minification.

Mojo - A JavaScript microframework that lets developers leverage dependency injection, aspect-oriented programming, and implementation silos. Additionally, since we have several different web services in our API, Mojo ships with a Service Locator to make it easy on integration. Furthermore, Mojo is built on top of jQuery so you can easily leverage 3rd party plugins.

Feature Development on Mobile

Xcode 4 - Apple's IDE for any iOS development.

Eclipse for Android Development - Necessary for any Android development.

Visual Studio 2010 - Necessary for any Windows Phone development.

Weinre - An easy way of debugging mobile-specific layout using WebKit inspector. An awesome project and drastically decreases the time an engineer spends on debugging.

Automation and Testing

Jenkins Continuous Integration Server - Since we've engineered a fully automated continuous deployment pipeline, we make Jenkins do all the heavy lifting. From pulling down latest in the tree, running our C# unit tests, running Selenium UI tests, as well as, deploying between different environments -- Jenkins is core to our principles in maintaining a test-driven engineering culture.

Selenium UI - End-To-End UI testing using the C# SDK for Selenium UI. These tests can take a while to run especially when you have several core use cases to write tests against.

CasperJS - We're always about productivity and ensuring that the quality of the software being delivered to our customers are shipped with the least amount of bugs as possible -- this is why we've heavily invested in going headless for end-to-end testing. CasperJS is an extremely fast tool for writing JavaScript-based specifications (describing behaviours) and have that pipe through MSTest.

.NET HTTP Client  - Our API endpoints are the backbone of our platform. Adding to that, we've invested heavily in server layer tests that use the .NET HTTP Client library. We specifically output JSON so we end up having to test passing parameters through HTTP POST/GET requests and assert the results.

Chutzpah - A Visual Studio extension that lets you write JavaScript unit tests in either QUnit or Jasmine BDD. This is by far one of the best testing tools for any front-end developer on a .NET stack. Under the hood, it runs all your tests through PhantomJS and streams the results to console. I've heard some great things about ReSharper, so you can probably check that out too.

Project Management and Source Control

Atlassian OnDemand (JIRA + Confluence + Tempo + FishEye + Crucible) - Atlassian provides an amazing suite of software development tools. We're particularly fond of the Task Board (swim lanes) in JIRA.

Subversion - We're currently on our way transitioning into using Git. Stay tuned!

GitHub (hackathons, open source, contracting out work) - GitHub is an extremely popular developer social network that provides a platform to easily collaborate on projects using Git.

Monday, July 2, 2012

Windows Azure Web Sites: Too easy and too much fun

Microsoft recently landed an incredibly powerful feature: Windows Azure Web Sites. This feature allows developers, designers, and basically anyone to deploy web sites (PHP, NodeJS, Static) to Microsoft's public cloud.

The barrier of entry has been lowered significantly and that's because of the amazing work of the Azure teams. I've attached my slide deck here. In trying to come up with some good slides, I didn't want the audience of 30 people sitting there through a bunch of slides. I wanted it to be more interactive and I wanted to really illuminate how amazingly simple the process is.

In part of the talk, I ended up doing 3 demonstrations

1. Deploying to Azure with Git (git push azure master)

  • created a static html file
  • added azure as a remote
  • pushed to azure within seconds

2. Creating a Wordpress site with a MySQL database

3. Using Express (NodeJS) to deploy a web application to Windows Azure 
  • used the express node module to generate a new site
  • installed all dependencies using npm install
  • changed the listening port to process.env.port so that iisnode can properly manage node (redirecting traffic from IIS and spawning/killing node processes)
  • showed how Azure will automatically detect package.json (and automatically pull down your dependencies)
  • went over a few of the gotchas
    • SSL on shared instances are going to land in the future
    • custom domains only work on reserved instances but this will change in the future

At the end of the talk, I think the audience was really impressed at how easy it was to get going on Windows Azure. Additionally and most importantly, the audience was extremely excited about the actual feature. This was my intention and part of my core principles as being an evangelist for any technology -- Get people excited about the technology so their teams can start adopting it.

Good luck and have fun,
Jaime Bueza

Jaime Bueza is a software engineer in Vancouver, British Columbia, Canada. He has developed web applications for Nintendo, Starbucks, Bacardi, Nike, Electronic Arts, Ritchie Brothers, Kiwi Collections, Cox Communications and Microsoft. When he's not developing useful software that constantly evolves with business requirements, he's writing open source software and helping developers in the Windows Azure NodeJS community.

Saturday, June 30, 2012

Scaling an engineering team: "Caliber"

Being tasked with growing a team and finding talent is a tough challenge. If you're in a place where the talent pool isn't as large as, say, San Francisco, you could be on a really bad spot. From a business perspective, whoever you choose to sign to the team can have an extremely positive effect on the product or an extremely bad effect on the product -- this is why you should always choose carefully who you decide to hire.

In building a team that executes and delivers effectively, I believe that the most important values of a high caliber team is the cohesiveness of the team (how well they work together in regards to execution), the shared vision (believing in where they need to go), and the ability to adapt to shifting environment variables (team learning, incremental improvement). Much like a hockey team that has a chance at the Stanley Cup, the only way to win it is for the team to fully understand the importance of supporting each other, believing in the vision, and always pushing to the best of their abilities.

When I served at Blast Radius (almost 5 years), team morale was always an issue on death march projects. I was extremely lucky to have had mentors and team captains that were always positive and confident in the decisions he/she made for the team. Sometimes the decisions weren't always in favor of the engineering side things (it was more political, dates needed to be hit) -- it's the decisions that had to be made that encouraged everyone to follow that level of leadership. Team captains would make decisions when everyone else was too afraid or unsure to make those decisions. In tying into that, I would say that biggest lesson learned from those experiences is to never be afraid to be wrong. Every decision in life is difficult -- but having the power to inspire confidence in your team when you make that decision takes courage and valor. Furthermore, these are the traits that you should look for in any potential teammate. They should show confidence, compassion, persuasiveness, and the ability to inspire their team to do better even during times of struggle.

Being positive is infectious. So is being negative. It's the most devastating feeling when the team doesn't feel motivated to push the front-lines with everyone else. This is why it is important to bake stewardship and commitment to the growth of your teammates into your company's DNA.

Today, I find myself at RESAAS, with a small team of incredibly talented and passionate engineers (we're at 10 now). I couldn't be happier and in trying to grow this team, I always feel worried that should we grow even larger that we may lose our faith in each other to grow, to execute, and to nurture the product we set out to build when we started. That said, I truly believe that the quality of the product is directly tied to caliber of the team who designed, built, and maintained it.

Good luck and have fun,
Jaime Bueza

Jaime Bueza is a software engineer in Vancouver, British Columbia, Canada. He has developed web applications for Nintendo, Starbucks, Bacardi, Nike, Electronic Arts, Ritchie Brothers, Kiwi Collections, Cox Communications and Microsoft. When he's not developing useful software that constantly evolves with business requirements, he's writing open source software and helping developers in the Windows Azure NodeJS community.

Monday, May 7, 2012

Visual Studio Keybinds Front-End Engineers Use

After being in Microsoft land for the past year (I joined RESAAS, primarily a .NET shop), I've grown attached to Visual Studio. It's an amazing IDE. In the last 5 years, I was primarily on Mac OS X with TextMate/Vim so I grew used to using keybindings to increase productivity. With Visual Studio, I realized that the only way to be productive is to use keybinds! Visual Studio without keybindings can make it almost impossible to use as the menus are nested beyond 2 levels. That said, I use Visual Studio for JavaScript and HTML. Everything else like SASS, CoffeeScript, and NodeJS, I use Sublime Text 2.

Below are a few different keybinds I use on a regular basis. I'm sure that these will change in the future once Windows 8 launches and every developer will have Visual Studio 2011 in their hands!

Key Bind Description
Control + , Go To File - When you're working on a large code base, it's easier to just navigate to the file.
Control + Shift + F Search Solution - Quickly find any string in the solution or project
Control + M -> L Expand all braces - When opening up certain files that have collapsed views
Control + Shift + B Build Solution
Control + Pause/Break Stop Build
Control + W (custom keybind) Close currently opened file
Control + K -> D Format document (braces, alignment, etc)
Control + Shift + S Save all documents in solution

With the above, I'm sure there's more keybinds that can be integrated, such as, binding JSLint/JSHint, or auto-running Chutzpah (JavaScript test runner), or getting the current directory's git status.

I thought I'd share out a few of the keybindings I use on a day-to-day basis in Visual Studio that help me be productive.

Good luck and have fun,
Jaime Bueza

Jaime Bueza is a software engineer in Vancouver, British Columbia, Canada. He has developed web applications for Nintendo, Starbucks, Bacardi, Nike, Electronic Arts, Ritchie Brothers, Kiwi Collections, Cox Communications and Microsoft. When he's not developing useful software that constantly evolves with business requirements, he's writing open source software and helping developers in the Windows Azure NodeJS community.

Sunday, May 6, 2012

The Cost of Continuous Delivery

Continuous delivery is a process in which developers can land features on master (or trunk if you're on subversion), have it run through continuous integration (unit tests, user interface tests, service layer tests), have it propagate through the various stages of your deployment pipeline and have it on production in short matter of time. It sounds great because you'll never really need an ops team anymore and really dispels the need to have iterations (in 2 weeks, a feature lands, instead, a feature lands when it lands).

A build pipeline like that saves money for the company in that respect and makes it so that engineers can react more quickly to problems without having to go through layers of communication; however, it surfaces many more issues. As a software engineer on a fast pipeline that is continuously delivering to customers, it is increasingly more important to have test coverage. Below is a list of aspects of testing that need to be seriously thought of
  • Unit Testing
  • Web Service Testing
  • User Interface Testing
Taking a step back, in order to really take continuous delivery seriously, we should always look at the true value of having automated tests. Here are some of the core principles of automation testing:
  • To protect our users from misbehaviours in the system (never cause distrust between the product and the customer)
  • To be vigilant on any changes to the source tree (new and legacy code can be fractured easily)
  • To be able to verify functionality in an automated fashion without increasing engineering manpower (reducing costs -- people are the most expensive aspect of running a business)
With the above, automated tests in a continuous delivery model should now a part of the feature itself. Without tests, it is not a feature and it should not be able to land on production as it would be too much of a risk to the product and the customers. The most difficult part of absorbing the cost of continuous delivery is convincing the stakeholders that the new model is faster but needs more checks along the pipeline. This cost of continuous delivery (Jidoka) includes

  • spending time writing unit tests
  • spending time writing service layer tests (assuming your platform follows SOA, validating inputs/outputs of data)
  • spending time writing user interface tests that detect defective user flows (registration, updating profile, etc)

In the end, following the guiding set of principles of Jidoka allows your engineering teams to produce high quality features by detecting defects along the pipeline and ensuring there's fixes in place to keep the pipeline pushing forward.

Good luck and have fun,
Jaime Bueza

Jaime Bueza is a software engineer in Vancouver, British Columbia, Canada. He has developed web applications for Nintendo, Starbucks, Bacardi, Nike, Electronic Arts, Ritchie Brothers, Kiwi Collections, Cox Communications and Microsoft. When he's not developing useful software that constantly evolves with business requirements, he's writing open source software and helping developers in the Windows Azure NodeJS community.