
Saturday, September 5, 2020

Monday, August 24, 2020

Hardening Production
Wednesday, August 5, 2020

Productive Disagreement
Building products(software) is hard. There are so many things that can go wrong. At Scale, everything becomes more laborious. More people, more coordination needed, more things that can go wrong and more pieces and more dependencies. To scale, we create team structure and software, often in the form of SOA Services. Any architecture or Design should survive a set of hard questions; otherwise, the idea or solution might not be good enough. Having people thinking into different dimensions, with varying points of view and various schools of touch, would create disagreement with could be an excellent and healthy thing. However, not always thats is the case.
When is Disagreement not Healthy?
I would say that disagreement is not healthy if create one or several of the following side-effects:
- Affects team morale(mature team) by not empowering that team
- Prevent progress by power from Comand Control Structure
- It's not logical or rational, and It is just a decision based on fear or emotion.
- Becomes a Power dispute(it will proceed via John or Petter way?)
- Promotes a toxical environment with lots of politics
Some companies have toxic and un-secure cultures and environments. Often Top-down and old school. Steve Jobs once said, "There is no sense in hiring smart people and tell them what to do." IF you can't change the culture, you should consider leaving, at the end of the day it's what happens and is what people do.
When is Disagreement Healthy?
First of all, To have a productive disagreement, you need to have a psychological safety environment. Wich requires mature people(a lot of them) and careful management. Not every company is like that, unfortunately. If you have that, the environment(be glad). Having that environment than disagreement become a valid tool to:
- Promote team ownership
- Cultivate a non-silos culture of collaboration
- Generating new ideas
- Hardening Solutions
Ownership ends up promoted because people get into conflicts, and thats okay because of this is just ideas, it's not personal, and that makes the team grows.
Non-Silos culture is promoted when you add other stakeholders from other teams to have that discussion and listen and participate equally.
However, all of this is not possible if you don't have psychological safety at the company level.
Generating new ideas is a super cool side-effect because you end up exposed to different points of view, and thats super constructive at the end of the day.
Hardening solutions is one of the best outcomes because collectively reviewing ideas, architectures, designs, and solutions is much cheaper than figuring out this issue in prod.
I always believe in a Double-check mindset. Having Productive Disagreement is like having Doudle-check at the team or company level, which is super sweet and makes the whole team and the entire company to grow.
How to Enable Productive Disagreement?
There are many things you could do to promote a better culture and, therefore, a better working environment. Such as:
- Get executive By In (Management)
- Promote Psychological Safety
- Replace Blame for Curiosity
- Have regular 101s
- Do regular retrospectives and clear out misunderstandings.
- Give and ask for Feedback.
Building a better culture is hard and takes time, commitment, vision, and continuous efforts, but it pays off in the long run.
Cheers,
Diego Pacheco

Github: PR Template + CODEOWNERS
Wednesday, May 13, 2020

How Many Hours Should I Work?
IMHO the issue is not the hours
Working a lot(+10 or +12 hours) IMHO is not a problem at all. Especially if you are doing cool stuff and get paid. For me the issue is getting stressed, there is no money in the world that can pay stress. Working on a toxic project or environment context, 1h is too much already so, of course, you dont want to do more than 6h or 8h. It's okay to go home early and have a life. Working more hours also does not prevent you to have a life.
Hard work pays off
I really believe the only way to ship and growth in your career is with hardworking. I dont think hard work can be done with few hours of practice per day. As engineers, we are knowledgeable workers but we are doing constant discovery of new tools, processes, practices, and approaches. There is lots of interruption at the office-space in sense of meetings, noise, and bad team-comunication anti-patterns in general. Few people claim they time back and often when people do it this is sawed as bad comunication or bad behavior. These factors also change this equation a lot. Several times engineers cannot be engineers. I really like to work, I dont like to get stress, I don't think anyone does.
Video
Cheers,
Diego Pacheco
Sunday, April 26, 2020

Tools Beyond Meetings
Async chat like Slack
IMHO in theory slack could kill 90% of your meetings. There are kinds of meetings that are super important like 1:1, retrospectives, planning with often does not make sense to kill. There are several meetings on-demand that could easily be a slack chat. So getting the mindset is hard because we are so used to it but once you get it is hard to come back. Having meetings it also could be a form of command and control since old school mgmt does not trust chats and old dogs do not learn new tricks. However, there is value in some meetings especially if we are talking about something highly complex, however, get into a meeting without a virtual whiteboard or google docs to draw something it could be super challenging.
Blogging & Wiki
IMHO Blogs and Wikis are amazing tools and people dont give enough credit for it because people often just see as "documentation". When you are in a small company it's easy to repeat things a couple of times but when you are in a big one this becomes unbarable. Blogs / Wikis are your ultimate tool to kill meetings because they make you scale. In order to work you need 2 hard things. First is that they need to be up-to-date and people need to read it. That's could be a hard one, often people do not like to read and asking for a meeting is much more comfortable. There are techniques you can apply in order to make your wiki blogs to live longer and be more up-to-date like:
* Have pictures and drawings about architecture and design (which you can't find in code).
* Do not write things too soon, as things might change it would be deprecated soon.
* Write down: Goals/Objectives, principles, and high-level details.
* Avoid document class-by-class, function-by-function in the wiki blog. Use Javadocs for it.
* Clean things time to time, IF you do kanban it could be a Queue Policy.
You need to start seeing that Blogs and Wikis are a powerful tool to remove repetition and gain your time again so you can be productive and get things done.
Talent
Talent is what matters most, smart people can figure out things more quickly and make better calls. That's what you need most. It does not work out and has just 1 super architecture, you need to heave a team with great engineers. So you do not get talent go away, retaining talent is your number #1 goal, process and talent are opposite forces according to Netflix if you have more talent, less process you need and therefore fewer meetings you need. So IMHO lots of meetings could be a proof or smell that you few talents in your team or company.
Poorly Run Ceremonies
The question is why are we having a meeting?
* Because the manager needs to know whats going on? (Status)
* Because some engineer does not know what to do? (Planning)
* Questions about a user story? (Grooming)
* Because we disagree with something and there is a conflict to resolve? (Retrospective)
* Because we dont know the best solution? (Design Session)
So often there is a ceremony for these things why are we talking afterward, well there are stories that are complex and make sense talk more. But my point here is we dont take enough value from ceremonies and guess what? we need to have meetings. So one efficient way to reduce meetings is to run ceremonies well. The number #1 reason why these ceremonies get poorly executed IMHO is lack of preparation. So if you do your homework we can run better ceremonies and therefore reduce meetings afterward.
Better Tooling Awareness
So I would not write "better tooling" because we often have the tools but do we need how to use it? There are amazing tools like GitHub, Eclipse/IntelliJ/Vscode, Linux bash/zsh, do we know how to use these tools properly and effectively, or do we book meetings to ask people stuff we could answer ourselves with a simple script or search?
IMHO doing lighting talks about tools that make engineers more efficient is often a good idea and people tend not to think about these things because they are "too basic". Sometimes the small little things can do great impact so you need to consider it.
Meetings often are a better thing because in the IT industry they are used for all the problems all the time. Using Slack chat, Blogging/Wiki, Having a great talent pool, running the ceremonies well and knowing your tools could help you to reduce the number of meetings and be more productivity and the cool thing about it is you can do by your self you dont need to convince your team or somebody else.
Cheers,
Diego Pacheco
Thursday, April 16, 2020

Thoughts on Estimates 2
Video
Thoughts On Estimate 2 from Diego Pacheco on Vimeo.
References
Github Flow Branching Model
Inner Sourcing
Team Topologies
Cheers,
Diego Pacheco
Wednesday, March 18, 2020

Lessons Learned with Remote Work
Invest in your Gear
It's super important to have a good gear in-home or whatever you are. The second monitor is important, a good and comfortable chair, great mouse pad are a must-have. Will I'm traveling it's very hard for me to have a second monitor but I always prioritize good internet. Having a high tech, the high performant notebook is a must to have. You need to have the best notebook you can get because you deserve it and is your main work tool. Another important gear is the headsets because you will need to listen to music on Spotify and do conference calls.
Sofa or Not Sofa? Some people do not recommend you work from Sofa. I like to change spots, I do 2-3 times per day. I often work from the table + sofa for meetings. You will find your optimal spot for sure but keep in mind it's fine to switch places. I find the sofa sucks for coding but for meetings is the best place I go.
Collaboration tools
Working remote is all about collaboration tools like GitHub, Trello, Slack , Evernote, Pocket. For hanging out with friends and have fun there is this great and new tool called Kosmi. Kosmi allows you to play Super Nintendo, Nintendo 8bits, Pocker, Open Arena(Quake), See videos on YouTube with chat and video conference. Kosmi is a great way to decompress at the end of the day and has fun.
Slack is the main comunication tool for me. I love slack, it's the mix with old IRC and new webchat. I use the electron based desktop app for slack and it's super great. It's also important to tune up your console, for this task I recommend you to read these posts 1, 2, 3 and 4.
There are tools you can use to help you to keep focus like GTD(Getting Things Done) and Pomodoro Technique. I have used these tools for a while, I end up developing my own discipline. So I dont need them anymore but it is not a shame to use these tools they can be super helpful.
Visibility and sharing
Visibility is important no matter if you are working remotely or in an office. I think you should avoid oversharing status but smart comunication is always a good idea like, I will be OFF for the next 1h hour or I'm taking a break for lunch good and useful comunication. It's a nice practice to share what you have done by the end of the day as a final slack message.
I always believe sharing is caring. I have this blog for +14 years, I share links like crazy in all my slack channels. I believe information need to flow and people should get access to the good stuff. One awesome effect on working remotely is that you force yourself to read more. Reading books is the oldest trick in the book and still is something people dont do it enough. Working remotely is an opportunity not only to get more things done but also to make time to do exercises and read books. Visibility works together with double-check, it's super important to make sure people clarify assumptions and are at the top of what they are doing. Since you are working remote your communication shifts from speak to TEXT is easy to make things getaway so even remote this is not an excuse.
Advice: How to Stop
That's the hard part. It's easy for us to be WIRED. Loose track of the time and end up working much more remote than in the office. There are multiple ways you can deal with that. One is to set up timers. I book on my agenda time to stop often called HARD STOP. I create a mindset to always stop before the HARD STOP period finished. We are mindset animals and we need to create a mindset to stop, otherwise, we will work too much and end up not doing fair work-life balance.
Stop working is important but a full digital stop is even more important. I book 2 times per week to learn and study during the week. Sometimes I get 1 extra period on the weekend. I use this time to learn books, make videos, see videos, do blog posts, code. But It's important to LIMIT that otherwise easily you could be just another workaholic.
Working remotely is not for everybody. That's fine. Now we are leaving different times because of the COVID-19. So everybody needs to adapt and learn. Right now it is important for everybody to be safe and stay at home.
Cheers,
Diego Pacheco
Friday, February 14, 2020

Double Down on Double Check
The 5 Dysfunctions of a Team: Disagreement on the Spot!
Fear of Conflict creates a lack of commitment which will lead to low accountability and BAD Outcomes for your business. You need to be able to "disagree and challenge" all decisions, dependencies, and actions your team does. We need to PAY ATTENTION to everything, on every single detail, we need to BE ON TOP of everything. It might sound a bit paranoic but this can save you from several issues.
Let me give you some examples of how you can apply it, in your, day-by-day job:
1. The Framework / Library I pick it up, does it work? Did I test all use cases? Did I check all corner cases? Did I perform the right POC? (assume no).
2. The APIs I need to use is really done? Would they really work? Did I test with every single request I will need to make? (Assume it does not work)
3. Would the team really deliver the US today? Are we really on track? Are we with ZERO blocks, ZERO Delays, ZERO issues? (Assume it won't happen, assume there are delays, issues, and blockers).
4. I have a dependency on an API or Service is not done, Would I really get them on time? Could I mock and work in parallel somehow? (Assume your dependency will not work and will not be delivered on time)
5. Is the discovery work done? Are the US with the proper acceptance criteria? The UX prototype was really checked by the business? (Assume nothing is done, assume business will change).
6. It's my POC correct? Did I cover all the engineers will need it? It's your architect correct? (No, your architect is wrong, the POC is too simple - assume they are all wrong).
Assuming the BAD output is good. It makes us PAY ATTENTION to details and DEMAND for Evidence that things are really RELIABLE and work. Having this mindset will save you from lots of trouble and will make your teamwork much better. Stop seeing disagreement and challenge questions and personal attacks and start seeing and unit tests and opportunities to validate you are not messing up. Double-check it won't kill anyone. You need to double it down on it, Trust does not mean BLIND TRUST, it means we should maximize our collective intelligence and get most out of our teams.
Boiling Pastel
In Brazil, we have a fast-food named: Pastel. You dont need to overthink to make pastel, they ask you chicken or meat flavor and you boil it right away. How is your team working? Is your team CRITICAL THINKERS who challenge each other and maximize their Outcome or it's a group of Pastel Orders who just repeat top-down orders?
Cheers,
Diego Pacheco
Wednesday, January 1, 2020

Getting Things Done
Meetings are only one kind of interruption, social network, small talking is other kinds of interruptions. Engineering requires focus and silence, BAD managers have difficulties to understand is almost impossible to deliver engineer work(architecture, design, coding, testing) with interruptions happening at all times.
You really should shield your team against interruptions, limiting meetings and add then to a regular calendar is a good practice. Often too many interruptions and meetings could mean(smells):
* Lack of proper roles and structure
* Lack of consistent and strong leadership
* Lack of understanding from management how real software engineering works
* Heavy Workload - working with fewer people than you should have.
* Lack of context - having a partial view could introduce resistance
* Schedule meetings easily
* Limit Meetings
* Get more things done
By managing and reducing interruptions you will get more focus and get more things done. There are several ways you could manage your agenda, first of all, you could book 1h every morning for meetings(meeting slot) so this way if someone asks you a meeting you can do every day and if 3 people ask meetings on the same day, well you overflow to other days. This limit mechanism forces you to have a better and clear priority since you will limit your work. I worked with multiple layouts, having meetings only in the morning, having meetings all the time, currently what works best for me is condense my meetings in 2(first 2 days of the week) therefore having 3 days without interruptions and meetings. I realize I get much more work done and my work-life-balance works much, much much better. There will be exceptions, which are okay, however, overall is important to save this layout otherwise the structure falls apart and loses its value.
Often times people are lazy to write/read and are more comfortable to have a meeting, however, a meeting has a higher price. Overall is fine to have meetings for critical matters however as a long-tern goal you should focus on improving you communication skills over chat. There are multiple tools you could use to easily communicate batter remotely like Design / Diagram Tools, Blogging, Video Recording. All these tools have lots of benefits like:
* They scale and you dont need to have meetings
* As you add more people you can send links and dont need to explain twice
* They dont block your whole team and people can read/watch in different times
* Videos + Images are great for people because visual tools make understanding easier
Here is a video I recorded talking more about the subject with a companion slide deck.



