Categories
Development

What to expect of your goals after 2 months in

A new year can bring excitement and hope for improvements. It’s easy to set ambitious resolutions, but we all know that success depends much more on how well you execute your ideas. How many of your goals have you completed after a couple of months? If you haven’t achieved what you had hoped at this point, you’re not alone. In this article, I share my own experience with tracking goals to help ease some of your anxiety and keep you away from giving up.

Completion is non-linear

I’ve been setting resolutions and tracking their completion for over ten years. The chart below shows my completion % for each month in the last five years. For readability reasons, I preferred not to include in this chart the data from 2012 to 2016, but I considered them for my analysis. The dotted line shows what the completion % would be if it were a linear function with 100% by Dec.

Goal completion rate per month from 2017 to 2022

The results over these years ranged from 46.74% (2012) to 67.56% (2017). After analyzing the data, I could identify a few interesting patterns:

  1. The completion rate was never linear and never evenly distributed: 2021 was the closest year to being linear. 2019 followed an S-shape. The median month-to-month variance was 5.13% (min = 0% and max = 15.88%) while an even distribution would expect 8.33%.
  2. High completion by January was not a good indicator of high annual completion: The year (2019) with the highest completion in Jan was only the fourth one with the highest annual rate (64.49%). The second-highest Jan completion (in 2018) turned out to be the second-worst year completion (53.51%). Similarly, low completion in January was not a good indicator of a low annual rate.
  3. Low completion by February was a better indicator for low annual completion: 2020 had the lowest completion rate in Feb and finished with the lowest year rate. The same happened for the second-lowest – 2018 – when it closed in Feb with 6.93% and in Dec with 53.51%. So far, my 2022 rate is only at 4.27%. It’ll be interesting to check in Dec this year if the Feb rate is a valid indicator.

100% is not realistic

By design, I’m not trying to reach 100%. I group my goals into personal and professional ones. On average, I set 25 goals per year.

Number of goals set per year by type

Within a group, I also identify if goals are 1) high-priority (land major benefits to me or my family and should be fully completed) or 2) stretch (still important, but I’m not going to dread if their completion rate is lower). This strategy challenges me while keeping the anxiety and stress at low levels. I could be aggressive, shoot for 100%, and put in the work to get them done. However, that’s not the point. I set goals to improve my life instead of hitting a number.

How you write your goals matters

Which one would be your pick?

  1. Read 24 books per year;
  2. Read two books per month.

And what about this?

  1. Work out three times a week;
  2. Work out 12 times a month.

If you’re tracking your goals monthly, you should write them in a way that leads to success. While reaching numbers is not the point, they can boost or deplete your motivation to keep going. It should also be clear what the benefit is of completing a goal.

In the first example, reading 24 books per year is better than reading two books per month. Lengthy books can take longer than a month to read. The benefits of reading (have fun, learn, or whatever you’re looking for) aren’t time-sensitive. You should claim that you accomplished 1/12 of your goal when you finish a book instead of thinking you failed to complete 1/12 of it for not reading a book in a given month.

In the second example, you’re more likely to achieve the benefits of working out (being healthier, feeling replenished, and so on) by spreading the exercises throughout the month. Even though it’s harder to have the discipline to work out three times a week, it would be a more appropriate goal than working out 12 times a month. You could hit the target, for instance, by frontloading the workouts at the beginning of the month, but that would defeat the actual purpose of it.

Conclusion

  • Goal achievement is not linear over the year, we will have bad months, but that shouldn’t be a reason to give up.
  • Set challenging goals but don’t expect to meet all of them. Set stretch goals knowing that you most likely won’t fully achieve them.
  • Break down your goals in meaningful chunks that could be accomplished over the year. Review how you wrote them and keep in mind the reason behind pursuing them.
  • Be honest with yourself but don’t be harsh.
Categories
Program Management

What I’ve learned from changing jobs

Early November 2021, I started a new job. That moment was bursting with excitement, with people wishing me the best, and with memories of fun times with my colleagues but only I knew the rollercoaster of emotions in the months that preceded the transition. In this article, I share what I learned from it.

Be mentally and physically prepared

The decision to pursue a new endeavor usually happens months before the actual move. My case was not different, and add to it a couple of months for immigration processes. Even though I expected it to be a stressful time, I underestimated it. For instance, I drastically reduced my workout frequency with the excuse that I needed more time to prep for the interviews. Big mistake! I lost several pounds, I was stressed out, and my sleep hours were impacted. In general, my quality of life suffered a hit.

Lesson #1: do not change your habits, prioritize your health, and keep doing whatever you do to relieve your stress. Set the environment around you to go through that period while finishing it mentally and physically undamaged.

Be selective

It may be flattering to be reached out by recruiters from large companies. However, they should not decide for you if it’s time to pursue a new position. If you didn’t think or dream of yourself working for company X before a recruiter pinged you on LinkedIn, you should think twice before jumping into a selection process. It will demand you a lot of time and energy. In addition to the company, you also need to be as selective for the position. Working for a company that looks fancy on your LinkedIn profile but doing something that you don’t like will make you feel miserable.

Lesson #2: The position AND company need to get you excited from the get-go. If only one of them hits the bar, don’t waste your energy. Select the top 2-3 options and discard the other ones.

Get ready and line up your options

Preparation is crucial for any position level. Dedicating time to learn about the company, get familiar with the selection process, and brush up on some skills will pay off in the end. In the worst-case scenario, you’ll learn something useful.

If you’re considering multiple companies (and you should have a few), the order that you interview with them matters. Your top choice should not be the first one. You’ll inevitably make some mistakes or learn something new that could make the difference later between landing a job or not.

Lesson #3: Invest the time to prepare. That boosts your confidence, and interviewers notice when someone has done their due diligence. You’ll get better as you interview. So, avoid interviewing firstly with your top choice.

Limit your criteria

Congratulations! You passed the interviews leading to having a few offers on the table. You only need to pick one. Easy, right? Maybe.

If you have an offer that stands out in many aspects, that’s a no-brainer. If there isn’t a clear winner, you have to evaluate all the pros and cons before making a call. Location, company, position, growth potential, base salary, performance bonus, sign-on bonus, stocks, 401k matching, vacations, health benefits, perks, and many others. This list can go on and on, and you may get into a situation where too much info leads you to paralysis. Only a handful number of criteria should matter to you and your family, and identifying them is critical. I realized that when debating with myself if I should consider X since Y was offering a better 401k matching policy. 401k matching would not even make up my top 5 criteria to choose an offer.

Lesson #4: Pick no more than three criteria to support your decision. Do not look back once you have decided.

Be responsible

One’s reputation is built over several years, but it only takes one wrong move to ruin it. The fact that you are interviewing with other companies or that you have given your 2-week notice does not free you up from your responsibilities. Regardless of your reason to leave, you should continue performing consistently until your last day. That not only leaves a good impression, but in my case, it is in alignment with my core values, and it was the ethical thing to do.

Lesson #5: People will remember you for what you’ve done, but your last actions are more likely to stick to their minds. Maintain your job performance until you are officially out.

Be patient, humble

Here you are on the first day new at your new job! Excitement is through the roof, and you survived the selection and transition process. You were used to an environment where everybody knew you and where you had a solid reputation, but assuming that you’re not a superstar widely known in the community, you’ll have to build your reputation from scratch. Maybe only the hiring manager knows a tiny bit about you. The rest of your colleagues know nothing.

In the beginning, navigating that anxiety of causing a great initial impression and hitting the ground running can be tricky. Humbleness and patience are essential qualities during those times.

Lesson #6: What brought you here may not take you there. Be humble to understand the context and practice active listening when meeting with people. That should set the environment for a durable, successful new journey in the long run.

Summary

  1. During the hiring process, do not change your habits and prioritize your mental and physical health;
  2. Both the position and company need to be a good fit for you. Consider no more than three options;
  3. Preparation is key. Optimize the interview sequence to get better for your top choice;
  4. Pick no more than three criteria to choose the offer to accept and don’t look back once you’ve decided;
  5. Don’t burn bridges and be responsible until your last day of work;
  6. What brought you here may not take you there. Be humble and patient in your new job.

Disclaimer: The opinions stated here are my own, not those of my current or former employers.

Categories
Program Management

5 signs that processes should be revised

Photo by Dina Lydia on Unsplash

Your organization keeps things simple and runs with a minimal amount of operational processes. Then a problem happens, your team does some sort of lessons learned and, as part of the action plan, your team decides that some processes need to be created or improved to avoid that from happening again. Nothing wrong there since that’s part of a continuous improvement mindset.

After several months or years, that cycle of learning and improvement may lead to an unintentional, overwhelming amount of processes that cross the tipping point where they cause more damage than help. I present in this article a few signs of what you should watch out for to know if your organization should revisit its processes.

1) Unclear understanding of the reason behind it

As mentioned, processes usually come as responses to problems. Even though the same issues may happen again in the future, it’s unlikely that the environment and the context will be the same or even similar in a second occurrence. Processes can be very well defined and documented but still miss the motivation, the environment, and the context that led to that change. Without these critical pieces of information, one could not understand if applying a process would make sense in a given scenario. That could lead to unexpected results and additional process tweaks that would dilute even more the original reason for the initial design. 

For instance, assume that an organization had a data breach problem for the first time. It then decided to implement manual security code reviews to avoid data exposure issues in the future. The company improves its modus operandi, and after a few years, nobody can clearly articulate why they still do that. It was a process targeted to stop the bleeding in a specific situation but turned out to be the long-term solution. Changes can bring discomfort. So, it’s much easier to keep just doing it. If people are executing something without knowing the motivation behind it, you should re-assess it.

2) That’s how things are done here

How your organization responds to processes can also indicate how effective or efficient they are. While frustration can come from many different sources [1][2], process inefficiency and team frustration are correlated. As a matter of fact, in a recent study, 31% of the participants pointed inefficient processes as one of the main reasons for burnout. When people say that they follow a process because “that’s how it’s done here”, keep an eye on that. One may be saying that for lack of clarity (back to the first sign) but often, the frustration of having to execute it (lack of value, overhead, sense of waste, …) takes priority.

3) Sub-organizations have different incentives when defining processes

As a company grows, its subdivisions grow too. What started as a start-up with 10 people can become a complex matrix organization with several specialized teams like Security, QA, Engineering, PMO, Marketing, and so on. In general, process complexity is directly proportional to organizational complexity. As people are grouped in functional areas, communication channels increase, teams get more specialized, and their goals, incentives, KPIs get more and more specific to what they do. To achieve area-specific targets, teams set more rules around them to control their outcomes, but often those extra rules come at the price of impacting other organizations. For instance, if a QA org sets internal targets to report fewer false-positive bugs due to requirement misunderstandings, the Product Management and Engineering teams may be affected by the new process of having multiple rounds of reviews for the test cases. Those two teams have other internal goals that may not align with QA org’s goals leading to the perception of waste of time or lack of understanding. If your company doesn’t define processes based on strategic, company-wide goals, you may end up in a situation of multiple disjoint, niche-specific processes that would be highly ineffective and demotivational.

4) Creating processes is cheap

“What’s the cost of introducing this new process?” If that’s not a question that pops up when changes are being proposed, it may be a fairly decent indication that the direct and indirect costs are not being considered before implementing them. 

Adding a new field in an issue tracking system may seem like a harmless tweak for a small organization. Now assume that 1) it takes additional 30s to fill that field for each new issue, 2) on average 500 issues are created per day across all projects, and 3) an employee costs on average $100/hour considering all the benefits. In this scenario, that single change would cost almost $10k per month.

Unless your organization considers the overall cost of implementing, training, enforcing, and maintaining new processes and validates if the benefits will outpace the costs, adding new processes will eventually impact the effectiveness of your company.

5) Perceived slowness over time

Finally, if you plot the time to execute an activity over the years and you notice an increasing trend, take a careful look at that. Slowness doesn’t always mean ineffective processes. Moving too fast sometimes brings quality issues that can impact the reputation of your products in an unreversible way. However, for instance, if the lead time between a feature request and its production release has doubled in the last 2 years, your group may have added so much complexity on engineering or peripheral processes (quality, security, privacy, …) that it’s now jeopardizing your company’s ability to compete. Watch out for any feedback from the team about slowness, and make sure that data is collected over time to evaluate your processes.

Conclusion

I presented five signs that can help identify if you have a problem or not in hand. They are indicators, and as any indicator, they do not drive conclusions. They can only support them. You may identify a single sign and have a process problem, but you can also have all five and still have the root cause(s) outside of your processes. In summary, pay attention to the quantitative and qualitative aspects of your organization, validate process changes with multiple stakeholders, and schedule regular (semi-annual or annual) checkpoints to see if you’ve crossed that tipping point.

Categories
Program Management

Transforming data outside of JIRA

JIRA is largely used (Atlassian suite is adopted by 170k+ customers over 190 countries) and one of the reasons for that is that its platform allows for deploying new add-ons to expand its capabilities. You can find a plethora of plugins in Atlassian Marketplace, but purchasing all plugins you need can quickly add up if you have a large user base. Sometimes all you need is to transform data for reports or metrics, even if that’s done outside of JIRA in an Excel spreadsheet or command-line console. In this article, I cover two ways to extract data from JIRA and transform it while minimizing manual work: Excel Datasources and Python API calls.

Excel Datasources

JIRA allows you to export filter results in CSV. One could generate a CSV from JIRA, copy its data, and then transform the data in Excel to create custom charts or consolidated reports. While that works, if you need to do that multiple times, you’ll be wasting a lot of time with manual work. We can leverage the same CSV feature in combination with Excel import data feature to get the work done faster. The steps are pretty straightforward:

  1. Create and save a filter in JIRA
  2. In the filter result page, go to Export >> CSV (Current fields), right-click on it and copy link address
    1. It should be something like https://yourjira/sr/jira.issueviews:searchrequest-csv-current-fields/19974/SearchRequest-19974.csv where 19974 is the JIRA filter ID
  3. Open Excel and go to Data >> From Text/CSV
  1. Paste the JIRA deep-link to export the filter as CSV
  2. Excel will connect to JIRA and you’ll be asked to select the authentication method if that’s the first time you’re doing it
  3. Select Basic and type your JIRA credentials. Important: Authentication methods may vary depending on how your JIRA instance is set up and your credentials will not be shared if you send that spreadsheet to other people
  4. Excel will show you a preview of the retrieved data. You can click on 1) Load to create a new worksheet and load the data, 2) Load To… and customize where to load the data to, or 3) Transform Data to adjust which columns you want to import
  5. Once the data is loaded, you can go to Data >> Queries & Connections and click on the refresh icon to reload the query
  1. Now you can create a separate worksheet and create your custom reports or aggregations based on the raw data imported from JIRA. That’s it. Quick and dirty, right?

Python API calls

If you need to apply more complex logic to your data, an alternative way is to call JIRA APIs utilizing a programming language to parse and transform it. I’m showing a very basic Python example of how to calculate the % of closed Story Points in a filter, but you could apply a similar process using whichever language you prefer for more complex calculations.

Firstly, you need to understand how to authenticate to be able to call JIRA APIs. You can use either OAuth, Basic, or Cookie-based methods. I’m only covering the Basic one in this article, which should be used only for personal scripts. OAuth is the most secure and recommended method but it will require additional configuration in JIRA server to authorize your script to call the APIs. You can read more about the other methods here.

Prep work

  1. Make sure you have Python 3.5+ installed in your system
  2. Install jira module with pip install jira

Python Code

See below the Python code. You can also access it from github.

from jira import JIRA
import getpass

# add your JIRA instance URL here
jiraURL = 'https://myjira.com'

# update with JIRA username or replace it with
# username = input('Type your JIRA username')
# to ask for the username in the command line
username = 'myusername'

try:
    password = getpass.getpass(prompt='Type your JIRA password: ')
except Exception as error:
    print('Error when getting password', error)
else:
    jira = JIRA(jiraURL, basic_auth=(username, password))
    try:
        filterId = '27629'
        filterJQL = jira.filter(filterId).jql
    except Exception as error:
        print('JIRA filter ' + filterId + 'is not available or does not exist')
    else:
        issues = jira.search_issues(filterJQL)        
        totalPoints = closedPoints = 0
    
        for i in range(len(issues)):
            fields = issues[i].fields
            points = 0 if fields.customfield_10002 == None else fields.customfield_10002
                  
            totalPoints += points
            closedPoints += 0 if fields.status.name != 'Closed' else points
            
        percentage = 0 if (totalPoints == 0) else (closedPoints / totalPoints) * 100
        
        print('Total points: ', totalPoints)
        print('Closed points: ', closedPoints)
        print('Closed %: ', round(percentage, 2))

This code connects to the JIRA instance (line 5) using the username (line 10) and the password read via command line (line 13). It retrieves the JQL string (line 20) for the filter which id is 27629 (line 19). Then it retrieves the list of issues for that filter (line 24), iterates through it (line 27), and calculates the total story points (line 31) and closed story points (line 32) assuming that the Story Points value is saved in the customfield_10002 property (line 29). The custom field for Story Points in your JIRA server may differ but you can easily get its ID doing a JIRA query and looking at the autocomplete results. It will show something like the following:

Finally, you just need to run the python script in a command line (like py.exe .\closedPointsJIRA.py) and type your password when asked. Handy, right?

Categories
Program Management

5 traps that technical managers can fall into

Nothing in life is always a bed of roses and even seasoned technical managers make basic mistakes that impact their teams’ performance. In my previous articles (If you’re a manager, invest more time in your tech skills and For Managers: How to develop your tech skills) I covered the importance of that set of skills and how managers can develop them to help on their day-to-day work. Let’s now talk about the common pitfalls that I’ve seen experienced managers face mostly because they have (or believe they have) a solid technical background. I have to be honest and confess that I’ve caught myself making these mistakes on several occasions.

#1: Fire-fighter mode is ON

Quite often team members reach out to managers to discuss a problem, but they are not actually looking for a solution. All they want is to vent, bring awareness or have a fresh pair of eyes looking into it.

However, it’s tempting for managers – whose common traits include assertiveness and decisiveness – to think they are expected to provide solutions. If the problem is related to an area where the manager has worked in the past, it’s almost certain that a ‘suggestion’ will come up, either due to an unconscious need to show that he/she is still sharp or due to a genuine willingness to help.

The problem with this fire-fighter approach of jumping in and trying to fix the problem is that it can easily kill team ownership and empowerment if not applied in small doses. Coaching techniques [1] could be helpful to suppress that impulse to always address the problem.

#2: Directions instead of suggestions

As a manager, you need to recognize that no matter how flat, small or open your organization/team is, you’ll have power over your subordinates and they will not see you as a peer. That doesn’t mean you can’t have a fruitful and open relationship with your team members.

Once you provide technical suggestions – even in areas where you are the most experienced in the room – the team will receive them differently if they were hearing them from a peer. Some teams may be more vocal and push back if they disagree with the proposals. Other ones may feel compelled to accept them since they came from their manager.

In those cases, the best way to avoid problems is to assess and build a safe environment where people can share their thoughts. Do a quick test: measure the team participation in Sprint Retros with and without their managers in the room. If the team doesn’t feel comfortable to share certain problems because the manager is present, that’s usually a sign that there is some work to be done to make that environment more psychologically safe.

#3: Tech skills to be able to speak up

Managers can leverage their technical skills to better understand what the team is trying to communicate. Active listening [2][3] is one of the major virtues of an outstanding leader and should be practiced during technical sessions too. However, one may think that the main benefit of having those skills is to able to speak up and contribute to solutions.

As a manager, you should try to hold your natural instinct of speaking more than listening and allow the team to brainstorm before you interject them with your thoughts.

#4: Misinterpreting the level of engagement

If a manager is lucky, he/she will spend 4hs/week developing their technical capabilities. During the same period, a developer will spend at least 10x more time (40+ hours). How can a manager keep up with the technical changes in a project? He/she just can’t and, for everybody’s sanity, that’s intentional and expected.

Therefore, a manager needs to be mindful that his/her solution knowledge is at the same time outdated and at a high level. That should dictate how much technical engagement he/she could have and how his/her comments should be positioned to the team.

#5: Tech skills take precedence to interpersonal skills

Nobody will hire a manager because he/she is an outstanding Java developer or an experienced Senior Architect. One is promoted to a management position due to his/her abilities (or potential) to lead other people to get work done through them.

Technical skills can be your competitive advantage, but you should never lose sight that your job requires developing mainly other areas such as leadership, coaching, people development, and project management. Avoid spending too much time developing technical expertise, even if that seems to be more enjoyable.

Categories
Program Management

For Managers: How to develop your tech skills

In a previous post, I’ve covered the importance of investing time to keep your tech skills up-to-date. In this post, I’d like to share a few ways to achieve that. I’ve tried a few of them in the past and they’ve worked for me. A few other ones seem interesting and worthwhile to give them a chance. I’ve taken into account the time constraints for managers when curating the following list.

Hackathons

More and more companies have been using hackathons as tools to drive innovation, build teamwork, and improve internal processes. Even though the target audience is usually the Software development team, managers should leverage those opportunities to get their hands dirty and brush up those coding skills. Since those events usually last only a few days, managers have a better chance to be able to put aside some of their day-to-day tasks to focus on those hackathons.

Lunch & Learn

Knowledge sharing is continuously happening among the team members, but managers quite often are not involved in those discussions. Lunch & Learn sessions are effective methods to share knowledge across different functional areas. If you’re a manager and that’s not a common practice in your company, that’s an opportunity for you to develop your team and, as a side-effect, to get to know what the team has been working on from a technical perspective.

Meetups

Meetup.com provides an amazing and free platform to know what’s going on in your area. Since I moved to the US in 2014, I’ve been a big fan of Meetups, but I have been participating only in project management or Agile groups. Recently I’ve given a chance to DevOps meetups and they turned out to be quite handy. In addition, those Meetups can be a useful channel to share open positions, if you’re hiring people.

Local Conferences

As a manager, you may be challenged to justify why you should attend a development/DevOps/… conference that can easily costs $2-3k when including registration, flights, and hotel. In addition, if you need to travel, the amount of out-of-office time can impact your other management tasks.

As an alternative, if you find a local conference that costs only a few hundred dollars, you have a better chance to convince your organization that a couple of days per year are worthwhile and will not impact much your other duties.

Online courses

E-learning platforms like Coursera or Udemy are the go-to options for many people since they can pace their courses as they prefer. However, online course incompletion rates can be as high as 85+%. I’d recommend not to enroll in more than one course at a time to improve your chance to actually complete them.

Certifications

My opinion about certifications may seem a bit contradictory. Even though I have several certifications, I really don’t care about the actual certifications. The most important outcome of any certification is learning during the process. A certification is just a clear finish line that helps me to get organized and commit to studying. Even better if the certification exam voucher has an expiration date. 🙂

If you take major cloud providers as examples, they provide entry-level certifications (foundational or associate) that cover enough technical fundaments for a manager. Google Cloud Associate certifications are recommended for people with 6+ months of experience, while AWS certifications have foundational (~6 months of experience) and associate (~1 year of experience) paths.

Personal projects

Another approach that requires more discipline but that’s very effective is to define a personal project and implement it. It could be as simple as a to-do mobile app for you and your spouse to share chores. Addressing a personal problem can be the extra motivation you need to get that going.

As a piece of advice based on previous failed attempts to do this, keep that as simple as possible and work on incremental releases. If you can’t complete that within a week, reduce the scope until it fits in that timespan.

Contribute to existing projects

You can easily find an open-source project that’s interesting, but the most interesting ones are also likely to require a massive ramp-up time even for small contributions (bug fixes, test automation, …). If that’s a path you want to take, shoot for tiny GitHub projects (less than 2k lines of code), look at their backlogs of known issues, fork it and try to get a few bugs fixed. Here’s another neat idea to get started.

Another way is to find new projects looking for collaborators. A convenient platform for that purpose is FindCollabs. You could even bring that platform to your company as the official way to engage people interested in working on side projects.

Final tips

With such a breadth of options to develop your tech skills, the most important thing to keep in mind is that you need to be laser-focused on what you want and avoid biting off more than you can chew. Enjoy your journey and, most importantly, have fun while learning.