Márcio Azevedo

Knowledge is Power!


Blog has been moved to https://anoblequest.wordpress.com/!


What I love most about Professor Hans Rosling, besides is work on data about Country’s Health and Wealth evolution, it’s his way of showing data, specifically its bubble charts! Without doubts, an incredible way of convincing people about the facts. He has a unique way of telling stories  and he’s a world reference on the subject.

I invite you to take a visit to:

Gapminder: Unveiling the beauty of statistics for a fact based world view

Proposed exercise: Year’s Retrospective and New Year’s Predictions!

2015 is almost over and by this time of the year everyone starts making the New Year’s resolutions, a great exercise, specially to define new goals for the next year, and challenging yourself to achieve something greater. In the last few years, besides resolutions, I’ve been doing something that I find very interesting and amusing.

I’ve found, a few years ago, how interesting is to read your own opinions that you’ve written several months / years ago. So, I’d like to propose a new exercise to the end of the year: Year’s Retrospective and New Year’s Predictions!

Write about your last 12 months in a retrospective way. It doesn’t matter if it’s about personal life, professional career, company that you’re working on, or even some hobby. And write something about the next 12 months too, as if you were in charge of making predictions. Public or private, it’s your choice, but keep it! And don’t change it for the next 12 months! ;)

So, by the end of the next year, before starting the same exercise, read your previous thoughts.


A few weeks ago I’ve had the opportunity to explore a little bit more Medium, a new kind of social network where you get the opportunity to expose your ideas, thoughts and promote discussions around them.

It’s actually amazing to see that, despite all the social networks that already exist, there’s always room for more options, more innovation and more sharing.

Today I’ve found the The Stack That Helped Medium Drive 2.6 Millennia of Reading Time really interesting.

Automating release notes with Git, TFS, Build vNext and Octopus Deploy

These days, it’s quite easy to have a fully automated continuous integration and deployment process. If you’re developing in the .NET stack, things like TFS Build vNext, NuGet feeds and Octopus Deploy make the automation process even easier, and for the common cases, it doesn’t require any custom development – just proper tool configuration, it fits really well!

But, when it comes to release notes, the scenario is a little bit different. Producing release notes for each product increment is not an easy task, the more you depend on manual processes, more exposed to human errors you will be, not to mention the inefficiency of all the process. Therefore the challenges are:

  • How can we produce releases notes in an automated and accurate way with minimal impact in the development process?
  • How can we established a relation between a deployed version and the release notes of that same version?


Here, at Celfinet, we’re developing a Network Configuration Management product for several customers, which, in most cases, it imply having to deal with different versions for different customers.

It’s hard to ensure that the latest stable version is deployed to all of our customers at the same time and even harder to keep track of the release notes. We needed to find out a solution that fitted our needs and took advantage of the tools for the several scenarios:

  • Getting the release notes from a known release number
  • Getting the release notes from a known build number
  • Compare releases and get the additional release notes


So, basically, the solution was establishing a relation between Release number, Build number, Deployment package number and the Product Features / Bug Fixes (and, if we needed, even the source code changes between releases).

Knowing a Release number, we were able to determine the build number, and knowing the build number we could track to the source code committed changes and associated work items (Features, Backlog Items, Bugs, etc).

Release workflow (with help from https://www.gliffy.com)


With this relation between all elements, it’s possible (and easy) to create the right tools to automate the release notes process. It all starts with a feature properly specified and ready to be implemented:

TFS Features

TFS Features

Once the implementation has started, all commits can be linked to that Feature (or any other Work Item such as Product Backlog Item, Bug, etc) – as long as the developer uses the hashtag followed by the id of the Work Item.

TFS Git commit

TFS Git commit

With the Build process triggered by every commit (Continuous Integration), every successful build provides the necessary information between features (or any other work items), source code changes / commits and build number:

TFS Build vNext succeeded

TFS Build vNext succeeded

TFS Build vNext allows full integration with Octopus Deploy, which enables having a step process that triggers the creation of a new release and respective deployment to an environment (or more). By default, this step process adds to the Octopus Deploy Release release notes, a link to the build process that triggered the deploy.

Octopus Deploy Release

Octopus Deploy Release

This way it’s possible, using Octopus Deploy API, to get the relation between an Octopus Deploy Release and the Build Number.

Additional Setup / Code Samples

As mentioned before, having a step process that triggers the creation of a new release is something that you can already benefit because it’s available for the TFS Build vNext process. This step allows you to include, not only the link to the build number, but also the change set comments and related work items:

Octopus Deploy Step

At this point, you can use the API to automate the missing steps and / or built your own release note tools. Here’s a code sample to get the release notes of a specific release version (via Octopus Deploy API):

public string GetReleaseNotesByReleaseVersion(string releaseVersion)
    // Note: It requires Nuget Package https://www.nuget.org/packages/Octopus.Client/.
    // https://github.com/OctopusDeploy/OctopusDeploy-Api/wiki/Releases
    // GET ~/api/projects/{id}/releases{/version}{?skip}

    var endpoint = new OctopusServerEndpoint("Octopus Server Url", "Api Key");
    var octopusRepository = new OctopusRepository(endpoint);
    var release = octopusRepository.Releases.FindOne(resource => resource.Version.Equals(releaseVersion));
    return release.ReleaseNotes;

Regarding Team Foundation Server there’s also available a TFS API (and related TFS API docs) that provides a (programmatic) way of getting the needed information. So, basically, all the relations that I’ve showed before between Product Features and Release Notes are likely to be automated according to your needs (and rules).


With the right process, release notes automation can be done in an effective way, with low impact in the team’s daily tasks and, above all, allowing the team to focus on what really matters: Adding Product Value in an incremented way!

Ten “Laws of the Physics of the People”

Ten “Laws of the Physics of the People” that applies to software development. Very interesting article and important lessons to have in mind.

Amdahl to Zipf: Ten Laws of the Physics of People

Technology Radar November 2015

I’m a big fan of Thought Works and its Technology Radar which is already available (November 2015). It’s important to have a perspective of someone who have already experienced the Tools, Technologies, Frameworks, Languages, etc, before starting to using it in a project.

Five Lessons From Ten Years Of IT Failures.

With the increase of IT projects it seems natural that unsuccessful results from past projects should translate into lessons learned and successful results in the future projects. At this point, it was expected to have a clear evolution with increasing success, but seems that we’re going the other way. Here’s the retrospective:

Five Lessons From Ten Years Of IT Failures

Having doubts about your Career options as a Software Engineer?!

Great talk about some Career options for early Software Engineers / Developers, and the importance of choosing something that you really like to do:

Where Next? Building a Career as a Technologist



There’s a time when we think we can do everything, without limits, embrace all projects, any tasks or challenges, but then, there’s family, friends, typical job issues and we realise that 24 hours isn’t enough. At that point, that’s when you realise the importance of choosing properly which tasks to accomplish – prioritisation, and you starting focusing on the (right) goals and how to achieve them.

That’s productivity!

« Older posts

© 2016 Márcio Azevedo