Life for the past year

Talking about code while having delicious Belgium beers. This is Rupeal. Picture (C) 2013 Rupeal

It’s been way too long since I’ve written something here. Life’s been full of changes and new challenges for the last couple of years and writing has gone way down on my list of priorities. Enjoying a holiday, I decided today is a good day for a status.

Change #1 – Welcome Lucas, the new family member

Lucas Santa-Clara Fiel was born. Being a dad is the ultimate experience and my kid has thought me so much about me and life in general. The scary thing is, this is only the beginning. What awaits for the upcoming years is a secret only time will tell, but let me tell you, I’m loving every nanosecond of it.

Change #2 – Goodbye Fullsix, Hello Rupeal / SWAT

After 5 and a half years at Fullsix Group Portugal, I’ve joined RUPEAL as Chief Technology Officer. I’ve been a close follower of the company since it began and many of the people there were my colleagues in college. The time at Fullsix was amazing and I can’t thank enough for the people I’ve worked with along the years.

Rupeal’s culture is very different from the typical IT companies in Portugal, and this is even more noticeable in the SWAT team. Everyone knows all salaries and everyone has a say on promotions, hirings and overall team strategic direction. Adding to the CTO role, I’m also managing this team and everyday I’m learning something new. SWAT are a Rupeal team focused on creating awesome web products, from UX to Engineering, mostly focused on Ruby on Rails. More on this later (I was a Microsoft guy, remember?). We only use Scrum and our main source of clients and projects is word of mouth, which is a very good sign for me that this team, basically, rocks!

Change #3 – Welcome Rails and Apple

Most of my career has been around Microsoft technologies – ASP.NET, SQL Server, Azure and Silverlight. I’ve been a regular speaker at Microsoft events and, most of the times, a big fan of their products. My new team is focused in Ruby on Rails and everyone uses a Mac (including me, and I’m in love with the 13″ Air). By joining SWAT I had two choices – learn these platforms or try to push MS ones. The choice was obvious and learning Rails and working on a Mac have greatly opened my horizons on some things. I’ve not stopped using Microsoft. I’ve just added some new ones. We do some work on the Microsoft stack (ASP.NET, Web API, SQL Server, Azure) and our latest experiences were great. Microsoft is in the right direction for web development and, IMHO, is now better than Amazon for PaaS in the Cloud. But my time on Rails was very important to really understand where the new concepts in MS stack come from: migrations, continuous deployments, etc…. This is not just coding, this is a whole new mindset. Most of my time, however, is spent on Salesforce, Excel and management stuff.

See you really soon. In the meantime, check Rupeal’s new website and the really cool video below.

Umbraco v5 is dead and why I think it was a good decision

If you are into .NET web development, you’ve probably heard and tried Umbraco, the leading open-source content management system for the Microsoft stack. For the past few years, Umbraco has turned into a solid, simple and powerful solution, powering around 100.000 websites around the globe. Yet, if you’ve missed the news, the awesome new version of Umbraco was killed after RTM.

Back in 2008, me and the heavy-metal-guitar-player Marco (previous software architect) had the task of choosing a new CMS to be used at Fullsix Group Portugal. We are a group of digital marketing agencies with some of the biggest Portuguese clients and our custom-built CMS was far from serving our needs at the time. After some research and small pilot projects, we decided on Umbraco. And what a good decision it turned out to be!

At the time, Umbraco was still in version 3. The main selling points were:

  1. Simplicity (for developers and end-users)
  2. Zero-frontend, meaning we had full control of HTML
  3. Extensibility
  4. Open-source

While far from perfect, we did a couple of projects on v3 and were happy with the results. By this time, version 4 was released and we were spreading the word among the teams and more and more people were being introduced to Umbraco. At some point, version 4 had a big change, with a whole new data schema and Razor support. Development was even easier than before. Cool, don’t you think?

Fast forward to v5 and more than one year of following the development of the platform. By now we deployed more than 100 websites on Umbraco 4, we have a team of around 20 developers loving the platform, clients are happy, marketers are happy and everyone is eagerly awaiting the new version. We created the Portuguese Umbraco community, presented it at several industry events (like this one and this one) and watched other agencies adopting Umbraco in a hurry.

The changes introduced in v5 were, in a single word, astonishing. A new data layer, custom trees,, an MVC frontend, a new plugin architecture… WOW! More about this here. What could go wrong? Apparently many things. If you read the above post, Paul Sterling from Umbraco states that “v5 has become an overly complex system that has turned into the very monster Umbraco was originally created as a reaction against”. And he goes deeper into “It was difficult to use, had performance issues, and was generally not an improvement over v4. The vast majority of Umbraco community members were continuing to develop and release using v4.”.

I fully agree with Paul’s comments. What was initially a simple yet powerful product turned into a complex, unstable, slow and unfinished one. Remember the top feature that made me choose it in the first place: simplicity. That was key for Umbraco. That was lost in v5. By putting all focus on v5, we started having issues in v4 as well. Mostly, performance and caching issues. v4 became less stable that before. Which means there’s not a rock-solid Umbraco version at the time of this writing. Hopefully 4.8.0 is out at any time now and most issues will be fixed. And there’s my main source of happiness for killing v5: get the team together, fix what became broken in v4 and bring the best of v5 into it. It has a history of excellence in previous minor versions, so it has a good codebase. And did I tell you the Umbraco team is really smart? They are. They’ll know what to do and how to do it. After all, it’s hands-down the best open source CMS for .NET.

On top of this, Windows Azure, the cloud platform from Microsoft, whose website is actually built on Umbraco, was not supported in v5. How can you release a major version and drop support for one of the things you were good at? This one I don’t get.

Honestly, I think v5 architecture was a very good one. It was the implementation that turned out wrong. Still, I believe the team did an amazing job and, in the end, were humble and smart enough to kill it before adoption started growing.

Finally ,when chosing a CMS, I don’t care if uses MVC, WebForms or whatever. I care about developer and user experience, extensibility, stability, performance and features. For me, WebForms and Umbraco 4 are enough. (We do use other CMS – Kentico – for the larger projects, but I’ll keep it out of scope here). So, bring the best of v5 into v4 and I’m sure Umbraco will be on the right track again really soon. We’ll be eagerly waiting the improvements.

PS: Can we ask for native Windows Azure support, please?

Useful tools for SQL Azure deployment and backup

I was a guest speaker yesterday at Microsoft during a Windows Azure training. We’ve been doing some medium-scale work in Azure and I was there, together with create|it’s CTO João Pedro Martins, to talk about our real world experiences with Windows Azure.

One of the topics was SQL deployment and backups. Although Microsoft has worked hard to ensure that SQL Azure is the closest possible to SQL Server, there’s a couple of things you should be aware of. There’s a good comparison chart at http://social.technet.microsoft.com/wiki/contents/articles/996.compare-sql-server-with-sql-azure.aspx. I won’t discuss the differences. Instead, I’ll just share some tools and practices we’ve been using, specifically for deployment and backups.

Deployments

For most of our on-premises database sync work we use RedGate tools, mostly SQL Compare and SQL Data Compare. We’ve had good experiences with these tools on SQL Azure, but for BIG databases, they may not be the best solution. There’s a good description of some problems you may encounter at SQL Azure Connection Management. Mostly, for BIG databases, we’ve experienced more than once connection timeouts.

Solution

An excellent set of tools for large database deployment is SQL Azure Migration Wizard, which is free and open-source, hosted at codeplex. Inside the downloads area of the project, you’ll find SQLAzureMWBatchBackup and SQLAzureMWBatchUpload, which are command line tools and can automate your SQL deployments. Read the documentation of these projects for all the details.

Backups

You’re using “the cloud” and you should not worry about backups, right? Wrong! Although Microsoft ensures that your data is not lost, Microsoft can’t protect you from the most common source of data loss: human error.

Sometimes we have weekly or more deployments of a website hosted on Azure. Even if don’t have this process automated, are you really going to remember backing up your SQL Azure database before deployment? Every time? Every single time?

Solution

We’ve been using the SQL Azure Backup tool from RedGate and loving it. It has been discontinued as RedGate now provides a service for this (RedGate Cloud Services). However, the things I love about SQL Azure Backup are:

  1. It’s free Sorriso
  2. It has both a GUI and a command-line, which means YOU CAN AUTOMATE YOUR SQL DEPLOYMENTS

 

Our current set-up is, for each project, we host at one  of our on-premise servers, a batch file that calls the command line version of SQL Azure Backup once a day. We’ve been using this for quite some time now and never had a problem.

This creates a bacpac file (a very compressed and human readable format) with all data and schema from your database and stores it in your Azure Storage account. Given the cheap price of storage, don’t worry about keeping backups in there.

DAC exports are not transactionally consistent, so if you want to ensure this, you can use the /CreateCopy switch of SQL Azure Backup. This creates a transactionally consistent copy of you database and uses that database for the bacpac generation.

Just a quick note: SQL Azure Backup calls an Azure service called SQL DAC Import/Export, so this is an async process. Your backup may not be performed immediately, but we’ve noticed that it never exceed the 1 minute mark. SQL Azure Backup polls the DAC service, so it only terminates once the backup is complete.

Session content: Umbraco CMS Websites in the Cloud (Windows Azure Uncensored event)

The contents for my recent talk on the Windows Azure Uncensored event at Microsoft Portugal are now live.

I presented how to deploy multiple Umbraco websites to Windows Azure and the advantages of doing so. The whole event was great, and we had a good discussion during the Q&A of my talk on how Umbraco compares to other CMS systems and why it rocks so much.

By the way, Fullsix Portugal is now the first Umbraco Certified Partner in Portugal. Smile

NOTE: Contents are in English.