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.