Saturday, May 14, 2016

Joined Microsoft UK

Great news! After several years working closely with people at Microsoft in Lisbon as a CTO of Create It, as of Monday May 9, I have joined Microsoft in the UK subsidiary. I'll be working as a Cloud Solutions Architect in the EPG team, completely focused on Azure, my topic of choice in the last few years.

This blog will continue existing, hopefully with more frequent posts and how more focused on Azure Architecture. One disclaimer I must do is that the opinions and views expressed in this blog are mine and do not necessarily state or reflect those of Microsoft. Just so you know :-).

Wish me luck!

Tuesday, February 23, 2016

How (not) to hire - notes on hack.summit()’s session

Pluralsight’s virtual hack.summit() event started yesterday, and I managed to follow most of the sessions. The last session was by Hampton Catlin (“Created Sass, Haml, m.wikipedia.org, and book author") on the topic of “How (not) to Hire”. The session is partially a reflection on the success of past hires, but also the sharing of alternative and (lots of) interesting ideas on how to hire people/developers.

One of ideas I thought was most relevant was that you WILL do bad hires, and that you should face the idea of letting people go as naturally as possible: “It’s your job as a manager”. I’ve had to do it in the past, and it’s not easy, but he’s right. “What are you afraid of when hiring someone? that he’ll bring down the company?” These questions frame the process in a “lighter way”: you don’t have to get it right at first, and should accept that you'll make mistakes. I guess most of us are so cautious when hiring because of the effort/time associated, but also because of the failure itself and being associated with it. I’ve both done bad hires in the past, and also seen the “stigma” associated with it in a colleague, so accepting that mistakes will inevitably happen should be in our minds to avoid this - no mistakes, no learning.

Another relevant insight from the session was the difference between Positive and Negative hiring. In Negative hiring, you try to find problems, reasons NOT to hire. In Positive hiring, you try to find out how awesome someone can be, what are his strong points, how he can make a difference. I bet most of us that hire follow the first approach (me included). He says that he used to follow the “Veto Rule”, whereby if anyone on the team wasn’t convinced the interviewee was awesome, they wouldn’t hire. This is exactly what I did for most of my career, on the footsteps of “Peopleware”’s recommendation to involve the team in the hiring process. An alternative approach, he mentions, is the “Believer Rule”, whereby if anyone on the team is really convinced someone would be awesome, he should be hired. The truth is probably somewhere in the middle, but this a great idea.

Catlin also advocates that you should hire mostly depending on someone's ability to work as a team/collaborate, and not only technical skills – “It’s easier to teach code than it is to teach empathy”. This is true, but I’d say there must also be a technical baseline.

Another idea, and this was to me the most interesting one, was the suggestion that candidates themselves should design their own hiring process, giving them a chance to show off and see their best side. What the candidate chooses is obviously a clue into what his strong and weak points are. I find this idea brilliant, and will keep this in mind for the future.

Another suggestion that he gives is that just discussing technology with candidates is a very effective way of assessing the person, and his/her passion, interest and skill in technology. Asking about some specific project, what they think of Azure vs AWS, or of C# vs Python, etc.

Finally, during the Q&A there was another interesting insight, or framing of the hiring process overall. Some companies (I think I’ve read about Google doing this) try to hire people that are better than the average of the company, constantly “raising the bar”. The insight is this: if you keep doing this, at some moment in time you yourself should NOT be employed at the company! :)

Anyway, lots of good ideas in the session, to keep in mind for the future.

Thursday, February 11, 2016

SIGFOX Makers tour Lisbon

I just spent the afternoon at SIGFOX’s event in Lisbon, learning about the company offering and doing some hands-on demos with an Arduino Uno and SIGFOX’s network.
What is SIGFOX? To be honest, I didn’t exactly know, when I got the Meetup email from Productized about the event. SIGFOX is an telecom operator, exploring a range of radio frequencies and a kind of modulation (UNB – Ultra-Narrow Band) that makes it especially interesting for the IoT world.

Up until today, my only experience with IoT was with the Raspberry Pi, and the code to handle the wifi connectivity in case of failures has given me several headaches. It seems bluetooth, which is more widely used with Arduinos, is also not a simple process, due to the need to pair, for example. SIGFOX’s network promises several advantages in this area: simplicity in sending (and receving messages) from the network is a question of doing a send call – no need to pair, connect, authenticate, etc. There are base stations (much like in GSM) that get the message, de-duplicate it, make it reach SIGFOX’s infrastructure, and either process it there or route it to our own application server via an HTTP call. Another major selling point is the low power usage: the protocol used is designed to maximize energy efficiency and use energy only when needed - essentially, it uses 20-35mA when sending messages, and the chip is supposed to be in standby most of the time, when not communicating – the communications pattern assumes the device polls for incoming commands when required/regularly. A solution using this approach is supposed to have up to have several years of autonomy, supposedly.

This simplicity and low power consumption, clearly major selling points, are offset by some limitations in the range of applications: messages have a payload of 12 bytes (xml and json are out, as are applications regarding media transmission) – this means you’ll be optimizing messages on the bit level; additionally, to comply with european regulations in the usage of the spectrum, you can only send up to 140 messages per day (about one message every 10 minutes), and finally the transmission rate is pretty low: 100 bits/sec – so it pays to keep messages as small as possible. Even with these limitations, it’s pretty clear there is a wide range of applications for this approach – my Raspberry Pi temperature setup uses Wifi and is constantly plugged in, a SIGFOX+Arduino solution would probably just require batteries.

Interestingly, there is already network coverage in Portugal (an in the Netherlands, France and Spain – as well as several other major cities worldwide), and prices are supposed to be very affordable (2€ to 25€/year, if I understood correctly), depending on factors such as usage. In one of the demos, a message sent by the board was picked up by 4 base stations – the workshop was in the city’s downtown.
Snootlab_Akero_ArduinoUno
The platform has mechanisms (callbacks) that can handle requests from the devices, either semi-automatically by parametrizing preset responses (ex: return the current time), or by making HTTP calls to a configured application server on our end. Interestingly, Azure Event Hubs (which I also use in the Raspberry Pi tests) are also natively supported, with the network automatically posting incoming messages from devices into a configured event hub – and the Azure IoT Suite will also be supported.

I thoroughly enjoyed the afternoon in the workshop, and was surprised at how easy it was to use the network and the Arduino. I’d seen demos of Arduino before, and to be honest was not looking forward to be back in coding C, but it was easier than it thought (I still have this book around, from when I learned the language in high school).

As to doubts and issues: IoT security seems to be in the news every day, so this is obviously a concern. I don’t know much on the topic, but device authentication, server authorization, and server authentication in the device seem obvious concerns. The trainer, Nicolas (great job!), didn’t have much time so he didn’t expand on the topic (and I still don’t have the slides with me), but it is a concern I’ll have to explore.

The SIGFOX demos done in the workshop are available on GitHub. The board provided can read the temperature (with a degree resolution), so I might do the exercise of converting my C# code from the Raspberry to run on the Arduino.

PS: I have very basic electricity/electronics know-how, and somehow see myself with a couple of Raspberry’s, now an Arduino, and several sensors, cables and breadboards on the way from AliExpress. What is happening to me? :-)

Monday, January 11, 2016

IoT: Raspberry Pi2 and Wireless conectivity losses

As I have described elsewhere, I have setup my Pi2 with a temperature sensor which posts the information to an Azure Event Hub. I’ve made the code more robust to handle different errors, but eventually the Pi2 – every 3 to 4 days - would just stop sending readings and responding to pings.
The problem is apparently related to the Wifi dongle, so (with a little help from a friend) I found the commands that restart the wlan, and after adding the code, the problem seems to be fixed. Here’s the relevant C# code:

public static void RestartWifi()
{
    Process proc = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "bash",
            Arguments = "-c '" + @"/sbin/ifdown \'wlan0\'" + "'",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        }
    };

    proc.Start();
    Thread.Sleep(5000);
    proc = new Process
    {
        StartInfo = new ProcessStartInfo
        {
            FileName = "bash",
            Arguments = "-c '" + @"/sbin/ifup --force \'wlan0\'" + "'",
            UseShellExecute = false,
            RedirectStandardOutput = true,
            CreateNoWindow = true
        }
    };

    proc.Start();
}

Thursday, January 7, 2016

Videos of 2015’s sessions online

Just found out about 3 videos of recent sessions being published online, so I’m posting the links.
The video of my WebCamp 2015 session on Azure WebApps is now online at Channel 9. The 45 minutes were clearly not enough for everything I wanted to show! My summary of the session is here.

Also available at Channel 9 is the session I did earlier this year at TechRefresh 2015 on the Azure App Service architecture, where I focused much more on Azure LogicApps. My summary of the session is here.

Finally, the video stream of the roundtable at Merge Lisbon #3 is available now on Youtube. The roundtable itself starts at around 01h45m. My summary of the session is here.

Monday, January 4, 2016

«Creating a great [software] engineering culture» roundtable at Merge Lisbon #3 – Post event thoughts

(this post is somewhat late, but this time of the year is always busy).

I thoroughly enjoyed the roundtable at Merge Lisbon #3. It was a very interesting and lively discussion, and having two people coming from the online product world/startup, plus two from the development/system integration services world, contributed a lot to the discussion and exchange of different points of view. RUPEAL’s organization was top-notch, and I’ll be waiting for the future editions of Merge Lisbon.

Like I said, there were several topics on the table, starting with what creates a great engineering culture, what is culture anyway, and what is the influence of the “founding fathers” of a company in its culture (”if the founders live 10.000km away, not much”, was one of the answers).
Having founded a services company, of which I was the CTO for 14 years, these are questions that made me think and that I feel as my own. In my view, my company was a mix of the personal views of each of the founders (which mostly – but obviousy not exacly – coincided). A vision of values like agility, transparency, qualitity in the delivery, informality, etc. In time, I do think that this changed - one day at a time - towards a more processual way of working, a trend that was luckily identified and reversed.

Reflecting on my own experience, I think that a founder working in his own company has a bond that is much stronger than that of employees, who can leave whenever they want. Making sure that he creates an adequate workspace, with a great team, challenging work, great culture – is essential to his own happyness and the company itself. And this leads me to one of the points mentioned that night, that a lot of this culture issue relates to “fit” - between the people and the founders and the way the company does business. Which reminds me of the recent example of Holacracy implementation at Zappos – and if I can empathise with the wish to have a specific way of managing the company, I can’t feel the same regarding the “either you’re in, or leave” way of putting things. I’m sure Zappos lost amazing talent in that process. Was it worth it?

One of the big topics discussed at the roundtable was the Hiring process, and how to decide who to hire. My take is that while technical skills are critical, behavioural fit is also as essential, and being able to work as a team. One reference I gave out was the (absolutelly mandatory) book Peopleware by Tom DeMarco and Timothy Lister, which suggests that the team which the new employee is joining should be involved in the hiring/interview process. Other books that have shaped my view on this are Belbin’s Management Teams: Why they work or fail and Team Roles at Work. These defend that – at least in management teams – complementarity between the “types” of people is what makes the teams work. One extreme example is: does anyone believe a team of 5 people like Steve Jobs would get anything done?

Some roles Belbin identifies are the Shaper (the classical “I Have a Vision” guy), the Chairman/Coordinator, the Creative (“Plant”), etc. Joining these views together leads, however, to a very real risk: that of creating a “mono culture”, where people who have very different team roles don’t get hired. For example, a company with a focus on “conservative” team roles will tend not to hire creatives/disruptors (“Plant” and “Resource Investigator”, in Belbin’s terms). Would you hire someone like Elon Musk for your team, if you were recruting him?
I do ask myself if this role categorization captures all there is to it, and tend to think it doesn’t. In my first job, over 90% of the people (web designers/creatives, all) voted in the same left-wing party, for example. Some more food for thought.

A specific question from the audience was on the value of having handbooks with the “principles” and vision of a company, much like Valve’s Handbook for new Employees. While I agree that these documents can be seen as a way of “marketing”, I still see value in them. They represent a vision for what the company strives to be, helping keeping focus/remembering of what the core values are. Time generaly turns organizations into the convervative/bureocrat side (as Jullian Birkinshaw brilliant argued in his Coursera course on Managing the Company of the Future), and these documents can help fight that tendency. Other examples I know of are Ricardo Semler’s “Employee Survival Manual” at Semco (a sample of which is at the end of his book, Maverick), and recently I found out about Outsystem’s The Small Book of The Few Big Rules as a a great portuguese example.

The topic of being a specialist (someone with specific skills in a given area of technology) or a generalist (broad know-howin several areas of technology) was also on the table. The trend seemed to tend towards a tendency to prefer specialists in the hiring process, people who can quickly deliver results in their area of expertise. My only take here was a sentence from an experienced software architect I admire professionally, when describing himself: “I’m an expert in generalities”. This is somewhat obvious if you think about it, but as you grow in experience you will start doing architecture, and it’ll be impossible to know all the technical details of the different parts of your solutions. You’ll have to focus more on knowing the capabilities, and forget about knowing the specific details of each technology. In my experience, making this leap (realizing you don’t have to be an expert in everything) is perhaps the most important one on the career path from developer to tech lead/architect.

Another of the questions from the audience was on how to keep the culture of a company when a team is working at a customer’s site. This is a challenge I am well aware of, because of my work in the last 4 years, and my answer to this was to take your company’s culture with you. One example (a small thing) is just shake everybody’s hands when reaching the site – incluing the client’s people - , and going for a cup of coffee together [as you would in your office]. But this is a simplistic answer and example. Other factors that I think are important are: try to bring people over to your office regularly, even if just for half a day every two weeks, have leadership/management people work at the site as well (even if on different contexts), in internal communication try not to forget that some people are out of the office (for example, if scheduling training sessions, birthday lunches, etc.). “But what if the client’s culture turns out to be better than yours?” “That’s good on two ways: first, you’ve learned something about what motivates your team, and second, you can try to bring that experience to your own company”.

There is a promotional video of the event, which you can checkout at KWAN’s Facebook page, for a small taste of what it was.