Search Results for: comment

15 Year Anniversary!

Wow. It has been 15 years since I started this blog!

It’s kind of cool seeing the areas that stick out:

Productivity, Testing, Evernote… that sounds about right.

Fun Facts

  • Most popular post: A Good Example of Liskov Substitution Principle (Nov/2010). It’s such an old post, but it still gets many views. The 2nd most popular post doesn’t have even 1/3rd of the views .
  • Total Posts: 426
  • Average Words Per Post: 342
  • Year with the most posts: 2007, with 75. This is post #51 this year, should I look into setting a new record?
  • I can think of at least two occasions when I googled something and ended up finding the answer on my blog, having totally forgotten I had already run into the same problem and written about it.
  • While I don’t get lots of comments left on the blog itself, countless times somebody mentions one of my posts in conversations. My point: people are “listening”, and that’s why I write and post, regardless as to whether I’m generating tons of views and a buzz or not.
  • I still look at zero-based arrays and think “what the heck?”. 🙂

Leave a comment

Virtual Brown Bag: June 2020 Summary

June was another month filled with Virtual Brown Bag meetings every Thursday. Lots of great discussions on a variety of topics. Here’s a summary and links to the videos. Enjoy!

June 4:
We talked about a bunch of stuff this week! Books, Connecting, F# Conf, WebForm/WinForm, Android crash, Racket, FizzBuzz, The QA’s Role in a Scrum Team. George brought up discussion on resumes and interviews It sparked many comments. We’ll bring it back next week. We have even mentioned FoxPro. 🙂

June 11
:
Great chat about resumes! We’ve lost the 2nd half of the discussion due to technical issues, but still, there’s good content in here.

June 18
:
We’ve continued our conversation from last week, talked a little more about resumes, and also job interviews, developer challenges, etc.

June 25:
We talked about upcoming free virtual events, Claudio’s “Trusting IT” call for feedback, the “Badass – Making Users Awesome” book, George’s code challenges, using generators, threading/pipeline operator, and the Rocketbook.

,

Leave a comment

Answering questions from my Scrum talk

I’ve had a great time giving my “Beyond the Daily Stand-up: An Intro to Scrum” talk at the Virtual Agile Shift yesterday (check out the conference: it’s going through the end of the month!).

There were great questions asked, some of which I was able to answer at the end of the talk, and some that I couldn’t answer as I ran out of time, but promised I’d post the answers to my blog. Hence this post!

Some of the questions make me want to write a full blog post for each, but in order to keep my commitment to answering them today, I’ll give the short answers now, but I’m saving the questions for future, longer posts.

Here we go!

What are your thoughts on Unified Engineering?

I had not heard of “Unified Engineering” before. When I first saw the question I thought it could be one of those things I knew about, but I just didn’t know that’s what it was called. That turned out to be the case.

A web search didn’t yield many results, but I’ve found this podcast from 2016 that had some references to it. Fortunately, there’s a transcript there and I was able to skim it to get a gist of it. If I haven’t misread it, my blog post from the day before my talk was exactly about that (The QA’Role in a Scrum Team), so those are my thoughts on it. 🙂

What should the Burndown be based on? Story Points? A count of stories? or is it based on hours assigned to tasks?

The Burndown represents the Sprint and it tracks the work to be done within the Sprint. That work is represented by the Sprint Backlog Items (the “tasks”), which are the way the team found to implement the user stories.

It’s very common for Scrum Teams to size those tasks in terms of hours, in which case, the number of hours is used when updating the Burndown chart. I’ve also worked on teams where we’ve decided to only track the number of tasks, instead.

The team decides what works best and has the autonomy to change the approach from one Sprint to the other, based on what the team believes the best approach is.

Is there a formula to calculate the velocity of the team?

It’s very common to calculate velocity based on the average of story points (if that’s how the user stories are sized) delivered by the team in the last 3 Sprints. We average it like that in order to account for fluctuations from Sprint to Sprint. For example, in one Sprint the team may deliver 60 story points, and then 50 on the next one. Why the drop? It could be because a team member was off sick for two days.

Also, as the team matures, the velocity tends to go up. Whenever the team formation changes (for example, a team member leaves and a new one joins in), the velocity tends to drop for a couple of Sprints. Averaging the last three Sprints help manage these fluctuations.

Who amongst the Scrum Team should take down notes for the feedback provided by the stakeholders during the Sprint Review (Demo)

That would normally be either the Product Owner or the Scrum Master, but I always encourage the other members of the development team to also take down notes where they see fit. They may see things that maybe neither the PO nor the SM picked up. It’s a group effort.

Where do Developers document what was coded?

Different people, teams, organizations do it in different ways. My personal favorite approach is a combination of things:

  • Write good specs (aka “tests”). I believe there’s a good example at the bottom of this post. I also have a whole set of posts around testing;
  • Add good comments to the Pull Request, referring back to the user story it implements. Include a link back to the user story in the tracking system used (Pivotal Tracker, Team System, Jira, etc…);
  • Add a link to the Pull Request in the user story on the tracking system.

With such approach, we can learn about things both ways: we may come to the user story to find out what code changes (pull requests) were made to implement the story, or maybe looking at the code changes (pull requests) and figure out what they were made (link back to user stories).

How should the information gathered from a 1/1 conversation between Dev and Business be shared with the entire team?

It would depend on the nature and outcome of the conversation. Here are some ways that could go:

  • If a new acceptance criteria has been come up, update the specs/tests;
  • If a user story has been clarified, update the user story on the track system to reflect that clarification (maybe a change in the wording?);
  • Bring it up at the daily scrum to share it with the team;
  • If a more in-depth discussion with the team is needed, book a meeting and share the information there;
  • Add comments to the user story in the tracking system;
  • Drop a note into whatever messaging system the team uses (Slacks, MS-Teams, email, etc.)
  • All of the above?

Pick the ones that work for the team and the business.

Are there agreed-upon roles and responsibilities for the various players? Ambiguity makes it more challenging – especially if Agile is new to the org

The Scrum Framework lists the three roles: Product Owner, Scrum Master, Developers. Within developers, it’s up to the team to define the roles. A development team may start with a hard separation between QA and coder, for example, the QA person tests the work produced by the coder.

As the team matures its collaboration skills, the coder may start helping QA, by teaching them how to write automated tests, while QA may start helping the coders by helping them understand the acceptance criteria better.

The roles and responsibilities within the team may change as per the team’s needs and how it grows in maturity over time.

If the user stories are not completed till we release to production then the burndown will not go down till release is done typically at/after the end of the sprint

This question touches on the Definition of Done (DoD). The idea is to have potentially releasable increments at the end of the Sprint. If the DoD for user stories at the end of the Sprint includes something like “feature deployed to production” and that item hasn’t been checked off, then yes, this story rolls over into the next Sprint. If the team tracks tasks by hours, then the hours associated with deploying to production rolls over to the Burndown for next Sprint.

On the other hand, “deploying to production” may be part of DoD for release. Depending on how the business does things, a release may only happen after a number of Sprints, with an aggregate of features built during those Sprints, so at that point, the release’s DoD should include the “deployed to production” check.

Wrapping up

I saw the tweet below early this morning. What a great way to start off my day!!

 

Leave a comment

How to test private methods

A very common question I hear from developers is “How do I write tests for private methods?”. My immediate answer is “You don’t!”. Technically, if you’re in C# Land, you can instantiate the class and then use Reflection to call the private method. But please don’t!

Say you have some class like this one:

Of course, instead of comments, you’d have the actual code. You get the point.

You then decide to clean things up a bit and extract the “make sure all the ingredients are in” code into a separate, private ValidateIngredients method, like so:

That’s usually the moment when developers ask “how do I test that private method?”. If we have tests for the main method (DoTheMagic, in this example), then ValidateIngredients already get test coverage.

Quite often, when developers feel strong about having separate tests for a private method, there’s a clear indication that the private method should really be a public method on a separate class. Think Single Responsibility Principle.

Following the example above, we create a Validator class and move our validation logic in there:

And then we use that validator in the previously shown class:

You’ve probably noticed that we also introduced an IValidatePotion interface. Think Dependency Inversion Principle. One of the benefits here is being able to isolate tests for the AwesomenessPotion and AswesomenessPotionValidator classes.

2 Comments

Know Where to Look

Tired of bad news yet? Well, maybe you should be aware of where you’re looking!

I was born and raised in Sao Paulo City, Brazil. There was a time in my life where my morning rituals involved watching the local news as I got ready to leave for work. Every single day, no exception, the core of the news centered around how many miles of traffic jams we had and what kind of records we’re breaking that day.

Brazil, Buildings, City, Cityscape, Clouds, Sao Paulo

Starting the day off like that was a torture. I felt miserable even before leaving the house. I didn’t own a car at the time, so that wasn’t an option for my commute. I could take the bus, on a ride that could take anywhere between 1 to 2 hours (or more) on any given day, through a congested city, on a bus that was always crowded and many times I couldn’t even get in (I’d be hanging off the bus, nearly missing hitting trees and lightpoles on the way). I could ride my motorcycle, which would get me to work faster, but the stress level would still be higher due to the risks of riding in that chaotic city. But I had to make that choice at some point.

I’d then get to work and the co-workers would be complaining about traffic. Going back home, it was even worse (drivers’ skills certainly worsen by the end of such days).

Still, I tortured myself watching the news everyday. It felt like Groundhog Day. So why did I do that? No idea. All I know is that I’ve eventually realized I shouldn’t be doing that. I replaced that nonsense habit with something like listening to music that lifts my mood, and other activities of such type.

That was in the early 2000s. I remember thinking: “man, why do they only show bad news? Isn’t there anything good out there to be shown?”

What’s up in the air?

The air quality in Sao Paulo is pretty bad. But I didn’t quite know how bad, since that’s the only air I had known up to that point.

Skyline, City, Urban, Cityscape, Skyscraper, Building

I then move to Houston, Texas, in 2002. While Houston is one of the biggest cities in the US, it feels small to me compared to Sao Paulo. So one of the first things I just had to noticed was the kind blue sky. The next thing, the quality of the air: so, but so much better than Sao Paulo’s! I could actually feel it as I took some deep breaths.

Know where to look!

But why am I saying that? Well…

  • if all I eat is junk food, I may not be aware of what better foods taste like;
  • If all I listen to is bad language, what should I expect to come out of my mouth when I talk?
  • If all I watch is bad news, I’m probably doomed to think that life is really bad!

people can't see air, fish can't see water - IF PEOPLE CAN'T SEE AIR... CAN FISH SEE WATER... conspiracy keanu

So I’ve been making a point to myself to check what’s good out there as often as I can. Seeing examples of good people doing good things out there is always inspiring and that’s why life should really be about.

Here are some resources I follow on a daily basis:


TanksGoodNews

John Krasinski’s Some Good News

Upworthy

Intelligent Tuesday

Please, drop in a comment to suggest any resource you might recommend so I can check it out!

Leave a comment

Using Evernote Tabs and Tags

I have posted many times about my extensive usage of Evernote: I’ve just broken the 25k-note mark! I organize my notes by using a good mix of notebooks and tags. But going beyond that, I also organize certain notes based on when I need. For example, there are times when I need notes…

  • Today
  • This Week
  • This Month
  • This Year

When I’m doing my period review (daily, weekly, monthly, yearly), I tag notes as per my temporal needs as listed above (i.e., “today”, “week”, “month”, “year”). I then use Evernote’s feature to have multiple tabs open:

On the Mac version of Evernote, I do the following:

  1. Open a new tab (Command+T)
  2. Filter on the given tag (Command+J to search for the tag)

For example, when I do my weekly review and planning for the upcoming week, I create one note for each meeting I have coming up, and then I tag those notes with “week”. That way, it’s easy for me to find those notes and drop in comments or any other information I’ll be needing in those meetings.

Another tip: depending on how I’m working on my notes at a given point in time, I also leverage the option to open a “new window” in Evernote. That way, I have one window with tabs for the different periods I’m organizing, and another window for anything else (sometimes with tabs for different projects, people, places, etc.).

Leave a comment

Creating a TODO template in Resharper

It’s been a while since I created a template in Resharper. I wanted to create one yesterday, and it took me longer than I thought it would, so I figured I should write a post I can refer back to. I probably got spoiled by how awesome CodeRush is when it comes to creating templates and was expecting similar experience in R#. Anyway…

The template I want to create is one where I type todo to expand the template, and then I can type whatever comment I want to attach to my todo:

Here’s how we do that. Go to Resharper -> Tools -> Template Explorer…

Select C# and new on the New Template button:

Type in the template:

For shortcut, I typed todo.

Notice I’ve included $date$. Anything within $ indicates we want to create a parameter. On the righthand side we can select from a list of macros that get evaluated for the parameter:

I’ve picked “Current date…” and set the specific format I want (yyyy-MM-dd):

Now when I type todo in the code editor…

I get the result I want and can type in whatever else…

Leave a comment

Why the Dark Background?

Once in a while I hear comments like “so, you’re one of those who like everything dark…”, as people look at how some environments are set on my computers. Those comments make me think about my reasoning behind that choice.

Of course, some people choose to go dark just to go with the flow (“That’s what the cool kids are doing…”). That’s not my case.

I’m getting old. This is what my screen used to look like when I started working with computers some 25 years ago:

The software I wrote used to look like this:

At some point, things started to light up and MS Windows brought white background to everything. As I worked with MS Visual FoxPro, and then Visual Studio, as far as I remember, white background was all we could use, so I got used to it, but I always felt it a little “too much” on the eyes.

Once Visual Studio allowed me to switch to a dark color scheme, I embraced it, and that’s how I’ve had it set for a long time:

I do the same thing with Gmail and any other tool that allows me to:

What about the other tools that don’t let me go dark? I don’t care, I just use them regardless. The important thing is that the tool where I spent most of my time is set to my liking.

And why do I prefer it dark? I do because it looks calmer as I read through the text.

Leave a comment

Catching up with my Book Reading

I have the bad habit of starting to read several books and then taking a long time to finish (I just finished a book that I started to read 3 years ago!). I like books both in printed and electronic format. I grab them and start reading. Next thing I know, I’m reading 10 books at the same time.

I decided to organize things so I can finish off the books I’ve started, and put a little more thought into what books I’m going to read next. This is what I do…

Put all books in a single place…

I put all of my digital books in PDF format in a Books notebook in Evernote. This allows to search across all of these books (a feature of Evernote). I also add one note for each print books and audiobooks I have.

 

Tag them…

I use 4 different tags:

  • Backlog: used for books I want to read;
  • To Read: used for books I want to start reading as soon as possible;
  • Reading: used for books I’ve started to read but haven’t finished yet;
  • Read: used for books I’m done reading.

Use “Saved Searches”…

I created one “Saved Search” for each one of those tags. It looks like this on my search menu:

I’ve been focusing on my “Books – 2-Reading” search, as I want to finish off those books (there are 11 in the list right now!).

This is how I create each search:

This is how I save the search:

 

Write book notes…

For each book I’m reading, I create a separate note named after the book’s title, and tag it with “book notes”. I then type in whatever comments I want, put snapshots of specific pages, URLs, anything else related to the book that I find I may need in the future. These notes also go into my Books notebook.

I know I can annotage things on Kindle books and export my notes, but as I mentioned, I have books in Kindle format, PDF, print, audiobooks, so I decided to follow the flow described in this post for any type of book format.

Signing off now. I have some reading to do!

Leave a comment

Upcoming Speaking Engagements

I’ve taken a break from doing presentations in the last two years or so, and a lot of people have been asking me when I’d come out and develiver a talk again. Time has come! 🙂

I’ll be speaking at the Houston Tech Fest on September 28, and also at the Tulsa Tech Fest on October 11. I’m looking forward to both conferences, as I’ve had a great time presenting at both in the past.

Here are the talks I’ll be doing…

Houston Tech Fest

Want to build software? Get your act together first!

Software developers are supposed to create applications that make people’s life easier, automating tedious tasks, encouraging users to get their work done, organizing complex workflows into digestible information and actions, helping them separate the most important information from the least important. But still, most developers forget to automate their own boring tasks. We forget to organize our information. We sometimes use tools that do not help us get our work done.

So how can we build software that fits our client needs, if we don’t understand those needs ourselves?

This session is NOT about software development; this session is about things we can do and tools we can use to organize ourselves, so we can free up our minds to more important things. Tools covered in this session include (but not limited to) Evernote, application launchers, screen capture tools, tablets, smartphones, etc.

Tulsa Tech Fest

Adventures of a .NET developer in Rails land

After several years of working almost exclusively with .NET, I started looking into Ruby on Rails; different language, framework, tools, mindset. In this session I go over the findings that were important to me, the main source of difficulties, what resources were helpful, the things I enjoyed the most, etc. Attendees to this session will learn what they need to know in order to get started developing Rails apps, or at least learn things that might help them approaching things in a different way when doing .NET development.

Software Development is a Joke!

Several of my technical presentations introduce some kind of humor, but sometimes people end up learning the joke and not the concept. So I decided to do a humor presentation based on software development, introduce some technical stuff, and see what I get!

After so many years writing software, I can’t help but laugh at so many (good and bad!) experiences myself and other developers have had. Not to mention things that just can’t make sense to normal people: how can this ?[A-Z0–9._%+-]+@[A-Z0–9.-]+.[A-Z]{2,4}$ be called a “regular” expression? (If you know by heart what that expression means, you are probably the kind of people who willl try to explain to me why zero-based arrays are kinda cool… please, just don’t!).

F-bombs may be dropped, but let’s be honest, you drop them yourself when it’s 5pm on Friday and that code insists not to work, don’t you?

Share your story!

Have your own funny or outrageous software developer story to share? Check out my post on Software Development is a Joke and leave a comment!

Leave a comment