Thursday, December 17, 2015

The moment I knew I had to join OutSystems R&D

OutSystems Team
I can split into two moments, actually. But let me give you some context before I dig in:

It was the summer of 2014, I was in my 6th year working for a magical, unbelievable, amazing, awesome and mind blowing company. I had the company's DNA and the company's culture in my blood. I wanted to be the best. My confidence levels were sky high! So, I wasn't looking for a new challenge. Having said that, one of the clients I worked with had a huge OutSystems factory and I started working with the OutSystems Platform. I even wrote a couple of Posts (here and here) about best practices I was witnessing. Those experiences made me respect OutSystems and brought up the doubt: "I wonder how it's like to work there". Again, I wasn't looking for a new challenge.

But, that summer, the VP of Engineering invited me for a chat. I couldn't resist. I was too curious. And that was the first moment where I felt I wanted to be OutSystems. They made me feel special, the approach was different, informal, relaxed. Throughout the entire conversation I felt respected and I greatly admire the person that talked to me. After that conversation I accepted the recruiting process. The final step of that process was an interview with the VP of Product Management. Again, after an hour or so of a really cool interview he starts drawing something like this on the board and asked "how are you in this scale right now?":

Identity Overlap cesarafonso.pt

And that was it! Right there it made the click. This was an image from a blog post about Identity Overlap I had written months before the interview. He took the time to read it, he was interested in it and, most important, he found the right path to reach me. He knew I was an emotional person that embraces challenges with a passionate side. No doubt, I felt really wanted. And not 'wanted' because they could have a good financial Return On Investment with me, but 'wanted' to be part of a team! To add value to a team!

And that's exactly how the OutSystems makes you feel at the R&D: special, unique, important. Part of an oiled team that does something big! And perfection is not enough around here.

After this I admit that the decision was still not easy. I tried to gather as much information as I could, I talked with some people I knew that already worked at OutSystems (their feedback was invaluable). In the end, I couldn't resist the challenge. I still love the company that I grew with for 6 years, but the OutSystems R&D is from another world. I'm proud to be part of that world today.


About OutSystems:



Be part of the future: careers


Monday, December 14, 2015

Celebrate success as much as you can

I know what you're thinking:

"It's not about the destination, it's about the journey."

We've all heard this a thousand times and, in some way, it's true. I've enjoyed every single fight I had in my life to get me where I am today. I like the challenge, I'm addicted to the adrenaline of having to outperform myself. But:

"Lets face it: like it or not, the results are all that matter. If you "attempt" to take out the trash but only make it to your front hall, garbage will continue to accumulate in your home – and you'll have a problem. Quit patting yourself on the back for trying and save your rewards for actual accomplishment. Be hard on yourself until you get real results, not efforts!"

And this is also true. And that's why I celebrate "like a madman". It's that "work hard, play hard" music. Whenever I hit a milestone, I celebrate. Champagne, good wine, good laughs, best friends. Share with the world. The ones that matter will congratulate you and enjoy your success. Your team will also like you to succeed because your success is their success and their success is also your success. And it's like Feedback theory: maximize the effect of positive results, minimize negative results. Say all the negative stuff once, propagate good news throughout time. I'm not saying to ignore failure (failing is important), just to be really happy with success.

So, celebrate as hard as you can!

César Afonso Católica SBE

Monday, November 30, 2015

Go buy a book!

I don't usually take time just to read, I usually read when I have free time (e.g.: waiting in the car for someone, at the beach, etc). Also, I hate PDF books. When I was only a student, I had no choice but to read PDFs, but now whenever I like a book I just buy it (here's my bookshelf). There's nothing like that "touch" of paper and the smell of a printed book. Furthermore, I feel that nowadays people don't take enough time away from the digital world to relax and do other activities. Everything is on Google. So, here's my "Christmas suggestions" for you:


It is the ultimate best book ever. Truly. No words to describe it, it's a master piece. Just a few dollars and you'll get invaluable knowledge about how your brain works. It will change the way you interact with others around you on every situation. Here's an example: Priming effect.


I wrote about this book in the past. Although I'm not a fan of the author, I have to admit that the book is really good. It's motivational, every single time I read a couple a pages I just want to close it immediately and start working.


This book is in Portuguese (pt-PT). It's a more "hard to read" book. However, I do recommend it because small negotiations play a significant role in our day to day life. When we buy a new car, when we buy everything on the supermarket, when we negotiate with the others around us.


Do you have any suggestions? Feel free to email me some (contacts on the side)


Tuesday, November 24, 2015

The Vendor Client relationship (parody)

We've all been there: that client that want's everything but his budget doesn't "feel" the same way. Here's a really good parody that ilustrates this issue in real life situations:



By the way, I've been a Vendor and a Client. I can put myself in the Client's shoes and the Vendor's shoes. It's just a matter of balance and negotiation.

Friday, November 20, 2015

A bug costing 370 million dollars

A couple of months ago I wrote a post about Software quality assurance. Long story short, having a bug in a website for a local grocery store is one thing, having a bug in a medical device, a jet fighter or a commercial airplane is a totally different story. Here's a rare example when things go wrong in a critical software piece:

Quoting:
"Ariane 5 is a European heavy lift launch vehicle that is part of the Ariane rocket family. The first test flight (Ariane 5 Flight 501) on 4 June 1996 failed, with the rocket self-destructing 37 seconds after launch because of a malfunction in the control software. A data conversion from 64-bit floating point value to 16-bit signed integer value to be stored in a variable representing horizontal bias caused a processor trap (operand error) because the floating point value was too large to be represented by a 16-bit signed integer. The software was originally written for the Ariane 4 where efficiency considerations (the computer running the software had an 80% maximum workload requirement) led to four variables being protected with a handler while three others, including the horizontal bias variable, were left unprotected because it was thought that they were "physically limited or that there was a large margin of error". The software, written in Ada, was included in the Ariane 5 through the reuse of an entire Ariane 4 subsystem despite the fact that the particular software containing the bug, which was just a part of the subsystem, was not required by the Ariane 5 because it has a different preparation sequence than the Ariane 4."

Here's the report

Here's the video



Thursday, November 19, 2015

0.1 + 0.2 = = = 0.3 is not true

Just Open Google Chrome, press F12 and write the comparisation in the Console:

0.1 + 0.2 === 0.3

It's false? What? Why?
Well, it's not a JavaScript craziness. It's actually quite simple:

"Computers can only natively store integers, so they need some way of representing decimal numbers. This representation comes with some degree of inaccuracy. That's why, more often than not, 0.1 + 0.2 != 0.3."

You can read more here (Floating Point Math) and see the behavior in other languages as well.

Friday, October 30, 2015

You're the expert!

We've all been there: those end users trying to explain what they really want. They have requirements that, in some cases, even they cannot explain or understand. They want something, they just don't really know what they want. Something like this:

You're the expert!

Well, you're the expert. You're expected to do the impossible.

Wednesday, October 14, 2015

Free beer is an investment

I don't get those old school managers that think "everything that's non-billable is an expense". I can understand that it can be seen that way by the people in the accounting department, but as for management it's a totally outdated and obsolete way of thinking.

Free beer

Free beer for your team members on a Friday afternoon after work is an invaluable team building moment. It's not an expense: it's a really cheap investment. Highly motivated teams don't come from the sky: they are built from the ground up! And all the team building activities you can think of, whether it's beer, karting, paintball, team games, tennis, ping-pong, you name it, are often very cheap ways to create a team and not having just a group of individuals.

For those Project Managers out there it's simple: include all the team building activities in your plan (time, resources, whatever).

Monday, October 5, 2015

Javascript can be funny

Here's Some "cool stuff" Javascript can do for you (execution results are in comments):

Javascript magic

For someone used to Javascript this might seem normal, but it does sound weird to me. Why? Here's the "rationale" (or not).

JavaScript Like It's 2013 (OutSystems)


Here's the full presentation at OutSystems Next Step 2013.

Friday, September 18, 2015

Dynamic Social OGP tags for Blogger (Blogspot)

A couple of months ago I wrote a post about Social Networks and how they can leverage your career. Having that in mind, keeping your blog/site "Social Network friendly" is important. This blog is actually hosted by Google with Blogger (former Blogspot). Here's a simple code to have dynamic Open Graph Protocol (OGP) tags based on Posts:


<!--START CUSTOM CODE-->
<meta property='og:url' expr:content='data:blog.canonicalUrl'/>
<meta property='og:title' expr:content='data:blog.pageTitle'/>
<meta property='og:site_name' expr:content='data:blog.title'/>

<b:if cond='data:blog.pageType == "item"'>
<title><data:blog.pageName/> | <data:blog.title/></title>
<meta property='og:image' expr:content='data:blog.postImageUrl'/>
<meta property='og:type' content='article'/>

<b:else/>
<title><data:blog.pageTitle/> - ## PUT ADDITIONAL TITLE HERE ##</title>
<meta property='og:image' content='## PUT YOUR IMAGE URL HERE ##'/>
<meta property='og:type' content='blog'/>
</b:if>

<b:if cond='data:blog.metaDescription'>
<meta property='og:description' expr:content='data:blog.metaDescription'/>
</b:if>
<!--END CUSTOM CODE-->


To use this, go to "Edit HTML" button:

Open Graph Protocol Blogger


And replace the "title" tag (highlighted below) with all the above content.

Open Graph Protocol Blogger


Make sure you replace the ##Something## by your custom content. If you want a full explanation you can read this brilliant and simple explanation in Matthew Wilson's blog. And here's Facebook Object debugger.


Wednesday, September 9, 2015

Be a teacher – Be a student!

In a book about the stock market, Fernando Braga de Matos (Portuguese author) makes an interesting observation:

"If you think in the amount of stuff where you can put your money and get a return you'll most probably get a headache. There's one way to apply capital, however, that's the most rewarding of them all: in yourself."

This might sound odd for a book about the stock market, but it's just a "down to earth" advice. He gives a couple of examples too: If you're a really good looking brunette with deep green eyes, it might be worth investing in your body image (model maybe?); If you're a high intellectual machine, maybe invest in a MBA or something similar; If you have a brilliant idea, entrepreneurship might be the right path.
Although I'm interested in the stock market and financial instruments, I do invest in myself whenever I can. Here goes one of my personal experiences:

It was the year 2013 and I wanted to buy a new car. I love driving and I have a passion about cars. I already had a VW Golf 2.0 TDI with 170bhp (fun machine), but I wanted more. It's an emotional side, I don't avoid it – I learned to control that emotional side when it comes to cars. At the same time, I realized that I had to do something to take my career one step further. Looking at the options, it made sense to me to attend an Executive Masters in Project Management. Approximately 10.000€ – which was a lot of money at that time (it still is!).

Executive Masters

So, on one side there's an investment (education, yourself). On the other an object with high depreciation. Can you guess what I chose?

Well, it's a no-brainer. I grabbed those 10k€ and went "back to school" riding my VW (which, by the way, I still LOVE). I could have bought a new car; I could have gone in a really awesome vacation; I could have invested even more in the stock market; I could have bought a new furniture for my house; I didn't. I chose to invest in myself. I wanted to learn more, I thought it would be fun (it really was!). I realized that I deserved the investment. Education should be seen as an investment rather than an expense. Some do good investments, other choose the wrong "path" to invest. Either way, never stop learning. I love cars. A car can never give me the pleasure for so much time as the knowledge, relationships and connections I got from that investment in myself.

Final note: was it worth the money? YES! I would do it again!


* Be a teacher – Be a student! *


Friday, September 4, 2015

Demystifying Risk Management

Simply put, Risk management (RM) is the identification, assessment, and prioritization of risks (ISO 31000). The Project Management Institute also defines Risk Management in the Context of a Project and, if you want to explore RM further, there's even a more deep path with a certification called PMI Risk Management Professional. It has became a "soundly term" in the last years in all organizations, but it's around since ever and it's quite simple.


Everybody does risk management in their daily life. Want a simple example?
Do you own a car? Do you have a car insurance? That's a Risk Management technique: Risk Deflection. Risk deflection is a strategy for risk avoidance/mitigation, and it consists of assigning risks to another party in a formal way. This other party will be responsible for handling these risks. In some countries, a car insurance is mandatory, but think of other insurances like a Health insurance.

So, is it that easy? Well, it has more to it. Lots of it. But the basics is quite easy to understand. Here's a "simple framework" for dummies example driven:

Risk A: Having a flat tire
Risk B: Having a tire completely ripped apart

The probability of a tire being totally ripped apart is low, but a flat tire is a more common event. The impact of both events is the same: you're on foot and you won't get to your destination (maybe an important meeting).

Risk Management

So, In the above matrix I'm saying that the impact of both events is 0.20 and the probability of Risk A (flat tire) is 0.5 but the probability of Risk B (tire ripped apart) is only 0.1. Multiply the value in the X-axis by the value in the Y-axis and position the risk. As tou can see, Risk A needs action. What's the solution? Well, a spare tire. That's a Risk Management technique: Risk reduction (or mitigation). With this PlanB, we just reduced the impact of Risk A and Risk B:

Risk Management

So far so good. However, with the evolution of technology and manufacturing techniques, car manufactures have realized that the probability of a totally ripped tire is really low and, as you saw, it's actually in the "acceptable" zone (green). So, car manufactures came up with a different contingency plan from the spare tire: Self Inflating Tires. The idea is that if you have a flat tire, it auto-inflates back to allow you to reach the next service station with no need to exchange tires. New BMW cars come with this technology and no spare tyre (meaning less weight, less inconvenience to the driver, more space in the trunk, fuel economy improvement, etc). This technology, however, does not work if the tire is ripped apart. So, what happened is that the new matrix is now a little different:

Risk Management

As you can see, Risk B is back to it's original position and Risk A is mitigated. Both risks are on the acceptable zone now. This is a very basic "for dummies" example, but you get the point. Of course, Risk management has several other intrinsics to it (including several techniques for managing the risk, like the one mentioned above with insurance, Risk deflection), but the basic idea is quite simple. It does sound nice to have "Risk Management Expert" in your "resumé".


Thursday, August 27, 2015

Make a choice

I'll write the logic of this post below, but lets start with an exercise where you have to make choices. Ready?

First one:
You're the leader of a country and you're population is facing a new recently found deadly disease. Your medical staff gave you two options of test treatments to apply on 600 people:

Make a choice for a Treatment
This is what we're facing. You have to choose one option.
Done?



Second one:
Now, a contingent country is facing similar problem. The leader of that country asked you for advice. His medical staff presented him with the following treatment options:

Make a choice for a Treatment
Again, You have to choose one option.



Let's look at the logic. Last year (2014) I wrote a post about "The power of feedback" and how a framing effect could be used to leverage that power. What you just witnessed is a pure example of framing.

In 1981, Amos Tversky and Daniel Kahneman explored how different phrasing affected participants responses to a choice in a hypothetical life and death situation. Participants were asked to choose between two treatments for 600 people affected by a deadly disease. Treatment A was predicted to result in 400 deaths, whereas treatment B had a 33% chance that no one would die but a 66% chance that everyone would die. This choice was then presented to participants either with positive framing (e.g.: how many people would live), or with negative framing (e.g.: how many people would die).

Make a choice for a Treatment

As you can see, both options have the same outcome for Treatment A and Treatment B. However, Treatment A was chosen by 72% of participants when it was presented with positive framing ("saves 200 lives") dropping to only 22% when the same choice was presented with negative framing ("400 people will die").

What were your choices?
Another cool context for this effect: "93% of PhD students registered early when a penalty fee for late registration was emphasized, with only 67% doing so when this was presented as a discount for earlier registration". This kind of frame is very common in sales and marketing.

You can read the study published in the Science Magazine here.


The above example was adapted from Wikipedia.

Wednesday, August 5, 2015

The (not so) Pretty Woman

Movies are full of fails, some more obvious than others. However, most of those fails are not noticed by viewers due to selective attention (Christopher Chabris and Daniel Simons call it attention blindness in the book "The Invisible Gorilla"). Here's a good example from the movie Pretty Woman:


Notice the change from a "croissant" to a pancake.
You can see other cool examples in this previous post.


Thursday, July 23, 2015

Social Networks – and how can they leverage your career

"The best social network is still a table of friends."

I hated social networks like hi5 or facebook. In my twenties I didn't even had an account on any of these. Not Google Plus, not twitter, not Facebook, nothing. I had my friends close to me (the people I really needed to be happy) and I didn't see the need to have a part of my life exposed. The value proposition wasn't interesting enough.

Now, just a quick "side note": for those of you that are thinking "you only expose what you want", that's not entirely true. Someone can publish a photo with you, a bar, disco or restaurant. You name it. And this is just one way to identify you. Furthermore, as soon as a photo gets uploaded, you lost control of that information. Facebook or whatever now owns it. Even if you delete it, was it really erased from the repository? Or just flagged as deleted and marked as not visible? And how many people downloaded it before it was "made invisible"? You lost control. Just like a message you send using the chat or even a mobile phone text message. Another issue that I find annoying is that these social networks tend to use the word "friends" to describe the people you're linked to. I could bet that 99% of the people on these social networks have only 1% to 10% real friends amongst their "virtual social network friends".

So, back to the point, facebook was just something I didn't find useful. I had all the friends I needed (still have). In recent years, however, I've found a good usage for social networks: personal branding. Social networks like facebook turned into a personal branding media and they can be useful if you learn what to share, how, when, in what form, etc. Don't get me wrong, I'm not saying you shouldn't post "that lovely picture drunk on a saturday night". Just learn how to post it so it doesn't affect your image amongst people that are not your friends. Want an example? Suppose someone posts a public picture with you on a friday at 4a.m., having fun at a bar. Your co-workers see it. The meeting you had at 10a.m. goes wrong (and not because you had litle hours of sleep, but other factor whatsoever). Although there might be no relation at all between events, the fact is that your image can get hurt. So, my advice is simple: face these social networks as they're a program on television that anyone can turn on and see what's going on.

Here's an interview from Mark Cuban that illustrates what I'm saying:


As a final note, LinkedIn. I think LinkedIn is actually the best social network around because it tries to keep it professional. The advice here is actually that simple: keep it professional. Keep your LinkedIn updated with valuable information. It's the first "Google Search" that any employer will try to do when looking for your name: LinkedIn profile.

Thursday, June 25, 2015

Engineering Culture – The Spotify & OutSystems examples

The culture of an organization is a key stone to it's growth. In case of Engineering teams, the culture brutally affects productivity. Here's a good example by Spotify:



And here's another good example by OutSystems:


Monday, June 22, 2015

It's been 7 years!

Guess what: My first post on this blog was 7 years ago!

WhatsApp hadn't been released yet; Facebook's $104 billion IPO was yet to happen; Windows Vista was the latest Microsoft OS back then; iPhone was in it's 1st generation (original iPhone); Lehman Brothers was still "alive".

I'm still active around here after all this time. That's because one of the fundamental premises that led me to start the blog still remains valid: "Sharing knowledge is an invaluable characteristics of a professional."

Wednesday, June 17, 2015

5 Aspects of Emotional Intelligence

A couple a years ago, an IT professional was just someone who needed to have really good "Hard Skills". Nowadays, an IT professional is much more than that. Sure, there are still companies that don't mind the "geek in a box", just focused in a monitor without social life, with human aversion, but that's not the rule anymore. "Soft skills" are definitely crucial.

Here's a great article on emotional intelligence @ Inc. Magazine

Tuesday, June 16, 2015

Project Management Extreme Version

Is it really possible to plan everything...?

Plan everything in Project Management

Friday, June 5, 2015

MS caches query parameters in WebAPI 2.0

ASP.NET WebAPI extensibility is actually quite simple to implement thought the use of Filters and MessageHandlers. However, looking at the WebAPI HTTPMessage LifeCycle, you can see that only one filter occurs before ModelBinding:

ASP.NET WebAPI Page LifeCycle

(click to enlarge)


So, to do something like Form to URL Encoded (application/x-www-form-urlencoded) you either use the Authorization Filter or MessageHandlers. Taking this scenario, imagine you have a parameter in the body like:
Source = 'CA'

But, your Controller is expecting this parameter in the URL:

Parameter URL WebAPI

(click to enlarge)


To do this before the ModelBinding happens, you either do the trick and use the AuthorizationFilter or implement a MessageHandler. The first option is a kind of "Hack" since you're not actually doing authorization logic, but it works. In our scenario, we want to do something like this (ignore the "hammer code", it's the simplest to illustrate):

Change URI WebAPI Filter

(click to enlarge)


Now, there's an extra hack. Microsoft caches the Query parameters in a varsbag and uses those cached parameters in the ModelBinders (e.g.: my TimeBinder in the above example). So, altering any request URI won't have any effect until you clear the "cached params":

new StringContent

(click to enlarge)


After you do this, you can alter the RequestUri (although this is not a good practice). This only works on WebAPI 2.0. Here's more info:



Friday, May 22, 2015

StringContent defaults to text/plain

If your using Microsoft's WebAPI, you probably had to play around with the StringContent class. This class allows you to build content for an HttpResponseMessage. However, the documentation in MSDN is not clear about what you can do with this class. If you enter the more complete constructor, no info at all. So, to create a new Content Object, you could do something like:


new StringContent

(click to enlarge)


Even with just a string it works, but, the Content-Type defaults to text/plain:


new StringContent

(click to enlarge)




Friday, May 8, 2015

End-to-End Tests: a necessary evil

End-to-End tests are mandatory. But what's the right balance between Unit Tests, Integration Tests, and End-to-End tests? Here's an excellent article from the Google Testing team with a real world example.



"As a good first guess,Google often suggests a 70/20/10 split: 70% unit tests, 20% integration tests, and 10% end-to-end tests. The exact mix will be different for each team, but in general, it should retain that pyramid shape."



Thursday, April 2, 2015

Priming effect

"Priming is an implicit memory effect in which exposure to one stimulus influences a response to another stimulus. (...) For example, if a person reads a list of words including the word table, and is later asked to complete a word starting with tab, the probability that he or she will answer table is greater than if they are not primed."

This effect is widely used in marketing and sales, because our subconscious can influence a buy. Here's Priming effect explained in a really simple and fun way:



Friday, March 6, 2015

You're not going to jail rookie!

For the past years, I've been to universities to talk with students and I've participated in a few tech talks with recent graduates. Last week I was speaking at a conference under the topic:

"The new challenges for recent IT graduates"

It was an interesting discussion on the new trends, how do you refresh your knowledge after graduating, how technology adds value to other industries, how universities adapt do constantly evolving technology, the IT market, etc. There's a pattern on the questions that the "non-experienced" ask, but there's one question that ultimately pops in the end when everyone is more relaxed and lost the fear to speak up:

"What if I fail and my code ends up messing everything?"

One graduate once shouted "Is it possible for me to go to jail?" Well, yes. But it's more likely for you to win Euro millions. In the live discussions normally comes out a short version (that will be in the end of this post), but here's the longer version. Keep in mind that this post is towards recent-graduates.


It's a delicate and controlled balance

According to the Project Management Body Of Knowledge (PMBOK 5th edition) by the Project Management Institute (PMI), "Managing a project typically includes, but is not limited to:"
   (...)
    Balancing the competing project constraints, which include, but are not limited to:
            Scope
            Quality
            Schedule
            Budget
            Resources
            Risk

Simply put, if one of these constraints changes it is likely that it will affect one or more of the others. For example, imagine that the original asking was a mobile app to work on Android phones. Now, the client wants the app to work on iPhone as well. Scope is now totally different and unless you do something with other constraints, your project is on the fast track to became a flop. Even the Risk analysis has to be done again to accept, deny or mitigate new risks associated with the new scope. This 6 points project constraint is an evolution of the most basic triple constraint model:

Project Management Triangle

Let's focus on this more basic as it's enough to explain. Considering these three points, how would you position your student works? Can you compromise the schedule and delay your delivery by three months? You'll probably fail the class by that time right? Is cost relevant to you? Did you measure how many hours you took to do the work? It were "a lot" right? But if you needed to add another 4 hours, you would: "Cost" (on human resources – you) was "irrelevant", you wanted to deliver the work on time. Was it a bulletproof piece of work? Probably not. Analysing the "real world" is no different.


The Impact (aka short version)

If you were developing a small eCommerce Website to a local store, do you think they would be available to pay whatever necessary to put a small website up and running? That might drive little business? So, Cost is probably one of the most important issues to them as opposed to scope (if the site doesn't have real amazing graphics, no big deal). On the flip side, what do you think is the crucial element for a new medical device or the software for a new Jet fighter? Cost isn't probably the biggest problem, but scope and quality is vital. That's why a new medicine can take a decade to be released and implies thousands of tests. So depending on the work, industry, etc, the constraints weight differ and the focus moves around:

Project Management Triangle

So, in the example of the Local Store, the Cost is probably the focus, compromising some Scope. On the other side, the healthcare industry has it's focus on scope and is willing to compromise Schedule and Cost. So, as your work has more impact on something, either a business or people's lives, the risk of some crazy code getting into production environment drops dramatically. It tends to zero on extreme cases like the pharmaceutical industry (healthcare), aviation, military. These three are examples of industries where "a bug" cannot make it into production. An Airbus A380 with a bug and a plane crashes? No way right?

This level of commitment implies some trade-off and it's only possible due to years of operation. How was the Quality Assurance in your student works? You basically had a development machine, your colleagues and some source control? In, let's say, a Bank or an Insurance Company, it's not that simple. Here's a real example from a Telco company:

    You develop some feature in your machine, then it goes to the team's development environment, then it goes to an Integration Environment or similar where all the teams integrate concurrent developments. Side by side with this, there's Source Control Systems and Unit Tests (with or without regression tests). Next step is a certification environment where another team asserts that everything is "correct" from the users perspective. After this, it gets deployed (by another team) to a Quality environment at which point the client has to give the green light to go into production. Final steps: Deploy to a pre-production environment to assure that the deployment process is independent and clear, with no machine related issues and that "no surprises will arise at 2am or whatever" when deploying to production. If and only all the previous steps are "ok" the software finds its way into production. And all this is required for the smallest feature. Not only that, but there are several people and teams involved and for the latter steps of this process a form submission is required with deployment steps, impact on operation, risk analysis, rollback procedure (in case something goes wrong), etc.

This is just an example, but as you can see, changing the color of a button it's not that simple. And that's the good news. All this adds overhead, but a required overhead to assure high confidence levels on new developments.


So, keep calm. Don't be afraid of your skills.


Also see CMMI.

Friday, February 27, 2015

You should (not) upgrade!

Please note that this post is mostly focused on the Services Industry rather than the products industry.

When someone approaches me and says "We should upgrade from X 2.0 to X 4.0, the word "WHY" instantly comes out of my mouth. Studying Computer Science in my early twenties I had the privilidge to have amazing teachers and to learn using the latest technologies available at that time. After graduating, I thought "now I'll be able to use all this new tech and it's going to be so awesome!". And then the chip dropped: most customers in the banking, insurance, telco & media, etc, don't use recent technologies. They have legacy systems that are working and doing their job brilliantly for years. They don't give a damn about what's new in the Microsoft tech stack: they want technology to help improve their business, which most of the times is not technology. And that's good: Technology is just a means to an end.

Coupled to this mindset, working "one step behind" the wave of new releases has huge advantages: the big "problems" are solved, the framework or whatever you're using is now stable and most of the "strange" issues and behaviors you encounter have already been discussed. Google becomes a really fast helper. You're able to really focus on solving a customer's problem instead of trying to figure out why "Microsoft, Apple, whatever, did it this way and how can we do some workaround".

Now, on the flip side, working with recent technologies is much more fun and will allow you to be on the edge of technology, always quickly renewing your knowledge. And this doesn't mean that the above quote is no longer valid. It still is: Technology is just a means to an end. It just adds the uncertainty of working with products that might not be as good as you expect them to be. And when doing project management, this has to be taken in consideration.

And that's the bad side. When working "on the wave", you're constantly facing problems that cut your productivity. Yes, Microsoft, Oracle, IBM, Apple, whatever, are all companies that are operated by humans that make mistakes and sometimes make design and implementation decisions that are questionable. And trying to decipher some of these decisions is sometimes exhausting.


So, is working on the latest technology good? YES YES!
Challenging? God, YES! I LOVE IT!
Always the best for your customer? It depends.

Saturday, February 21, 2015

WBS Modeler add-in for Visio

MS Project is essential in my life. Although I think it's one of the most confusing and "buggy" products from the Office Suite, I've learned to love it. After you're passed the tricks and the "small breaking changes" from versions (2003, 2007, 2010, 2013...), it's as easy to use as MS Word. Another sometimes misunderstood product is MS Visio. It's so useful that I can't believe why it's not a must have for everyone. This is another life essential for me. So, combine these two with the amazing work Microsoft did in allowing extensibility through Add-ins and Magic happens.

MSProject MSVisio Addins

One of my Favorite Add-ins "links" MS Visio and MS Project. It allows you to draw a WBS in Visio and Export it to MSProject with one click. And it also allows you to do the opposite (from Project to Visio). When it comes to MSProject, I have templates for everything nowadays, but I still love this little Add-in.


The Visio 2010 Addin actually works in Visio 2013 (the 32 bit version, at least. Read the answers from this post). Also, if you're using Visio 2007 with other version of MS Project (e.g.: 2013) it also works (the Export and Import work really well).


Some more info:

Monday, February 16, 2015

WebAPI with CORS – IIS Intercepts OPTIONS Verb

Note: In this post, I'll ignore JSONP since it's a "workaround" to the topic. Also, CORS doesn't have anything to do with an Irish band.

When exposing a REST API, you have to consider whether you want to allow CORS or not. If you don't allow CORS (as of today, Twitter doesn't), then your API will have a "broken leg" since browsers, by default, will block the use of it:

IIS WebAPI OptionsVerb

(click to enlarge)


Browsers will issue a preflight request (OPTIONS) whenever you have an HTTP method that's not GET, POST or HEAD. Even when it is one of these, the browser will still issue the preflight request if you use specific/custom headers. You can read the specification here and you can see this request in the browsers developer tools.

Now, when using Web API to expose a REST API, enabling CORS is quite simple. There's a quick guide here: Enabling Cross-Origin Requests in ASP.NET Web API 2.
However, the guide isn't complete. If you're using IIS as your WebServer, this just won't be enough. That's because IIS, by default, has an Options handler that will intercept the HTTP request before it gets to your "WebAPI":

IIS WebAPI OptionsVerb

(click to enlarge)


So, you have to do a little workaround. In the web.config of your Application, just remove this Handler and add the Options processing to the ISAPI handler:

IIS WebAPI OptionsVerb

(click to enlarge)


Important note: By removing the Options handler and allowing the HTTPRequest to be processed by WebAPI, you also removed the handler when someone issues an OPTIONS request for any handler (e.g.: an ASP.NET Page). Other option is to change the priority of the OptionsVerb relative to the WebAPI handler. However, this WILL fill your web.config with all the handlers (at least in IIS7, 7.5 and 8).


Here's more info:
And here's a POST I created in the IIS forum for the ordering issue:


Tuesday, February 3, 2015

A good motivational book

I don't usually take time just to read, I usually read when I have free time (e.g.: waiting in the car for someone, at the beach, etc). From time to time, I open Amazon and see what books come up as suggestions. A few weeks ago, Amazon suggested this book:


Well, I was ordering two other books and I thought: "What the hell. I like the preview, let's go for it". Great decision. Although I'm not a fan of the author, I have to admit that the book is really good. It's motivational, every single time I read a couple a pages I just want to close it immediately and start working! I know it sounds weird, but it's a huge compliment! It really tickles my brain to "go do something"! Here goes a quote:

"Lets face it: like it or not, the results are all that matter. If you "attempt" to take out the trash but only make it to your front hall, garbage will continue to accumulate in your home – and you'll have a problem. Quit patting yourself on the back for trying and save your rewards for actual accomplishment. Be hard on yourself and never let yourself off the hook until you get real results, not efforts!"

Added with a 4.5 star rating to my bookshelf!