Showing posts with label lean. Show all posts
Showing posts with label lean. Show all posts

Monday, June 1, 2020

Waterfall could be better than agile(sometimes)

Sounds crazy, right? How could that possibly be the case? Before I continue, I need to say I',m doing agile for +14 years non-stop, and I sincerely believe Lean / Agile does good things. However, like everything in software, there are trade-offs. You might be thinking(Crazy Brazillian), and Agile is about incremental, fast feedback cycles, effective learning, and practical, tactical way to avoid waste and risk by shipping code to production often. How could that be bad, after all? To understand the hidden trade-offs here, we need to understand what is behind the principles of Agile. Hold on bozo; there is no such thing as assumptions behind principles. Recently I was challenging microservices. Today is Agile, tomorrow I don't know but something else might come up. To some degree, I feel agile needs to be challenged because last time I did it was around 2015. It's healthy to disagree if it helps to harden your decisions and as the whole team/company you take better decisions. My goal here is not to make a flamewar against Agile but say that we need to think all the time and understand there is no one size fits all even for things like Agile, Lean, DevOps, etc. So without further due let's get started. 


Agile Manifesto


The agile manifesto talks about the principles, not the process, not the methods. If you analyze the declaration, we could easily group the declaration in 2 groups of interest.  


https://agilemanifesto.org/


Assumptions behind the Principles


  1. Are you going to change? Belives and Org-Structures? 
  2. Incremental work as value (It's about coupling, Can you decouple?)


Before I elaborate more, let's define what I mean by Increment. The Increment is a piece of software, module, service, component. It does not matter. You chose to release the Increment by steps, let's say, every one, two, four weeks, or during two years on quarters release, it doesn't matter. 


#1 it's already a big issue. People in companies often don't want to change. Because they often want to do Empire building, and there is HIPPO dictating all product decisions. Agile will only work if you're going to change your beliefs system and your organization charter. So basically should we change or surrender? I always think we should change and improve things, in other words never surrender but maybe some changes won't happen right now so why bother? Maybe save the energy to a future battle? 


#2 Here is the catch. Most of the time, incremental work makes sense; however, not always. Sometimes we are making work incremental just for the sake of having the work incremental not because we are getting benefits from it. Quickly, we could architect things both in Business/Product and Tech the wrong way, which would explain why breaking into increments is a wrong move. So let's understand the properties of proper Increments: 

  • Real incremental benefit(value on each increment release) 
  • Ability to discard future increments(some increments might be optional)
  • Ability to change future increments direction

So not all increments are created equally so that a Bad increase would look like this:

  • There is no real benefit on each Increment (only when you have all things there, it can be used or will have value). 
  • Therefore there is high coupling on the product/system. 
  • No ability to drop anything or change direction. 


Agile works better with loosely coupling.


Most of the time, we can architect products and software in a way that can have benefits working on incremental ways. For those cases, which I believe is the majority of cases, there is a massive benefit by doing Agile. 


It's possible that some companies/people don't have enough talent and expertise in the house or don't want to let them HIPPO go away. Therefore they can do proper agile, but don't be mistaken. It's often very possible to break problems into small increments and have benefits but not always. Agile works best with loosely coupling. If you can decouple your business problems and use them independently, there is tremendous value there. 


Waterfall works better with coupling


Such problems like building a boat, it's very waterfall by nature. These are problems or systems where the coupling is so high that either you do it or you don't. There is no middle ground, and there is no adaptation. You won't see proper increments benefits here, so breaking problems in increments is fake. How can you be agile in those cases? When you could make a waterfall discovery / UX / Software Design before the project and experiment and have feedback before you build. Once you decide to build or start building, there is no turning back. Either you get the whole thing done, or there is nothing done. For these cases, you could either be fast or be slow, but at the end of the day, you need to have all or nothing. By nature, we are talking about high coupling which could be manifested by a series of lack and caused-by like:

Business Debt

  1. Lack: Lack of exploring other markets/options
  2. Caused-by: High Tech debt witch killed flexibility over many years(forcing migrations now).

Nature of the problem / Tech Debt

  1. Lack: High Coupling. Lack of Module product/problem proper increments. 
  2. Caused-by: Historical bad Decisions or Natural coupling. 


For that case, the waterfall will be better because agile would be fake anyway. Because making incremental software just for the sake of making incremental software without real benefits is like taking agile as a silver bullet with no drawbacks. I',m not saying Agile is terrible; I' m saying there is a small number of cases where it is better to be waterfall for more crazy as it sounds. When I say waterfall will be better in some cases and it seems complete non-sense might make me think we see Agile as religion and therefore agile is perfect, and there are no drawbacks, no side effects, no issues just good things, it's no true. Agile is excellent, you do it, but we should think because not all problems are the same. Agile, Lean it does not matter; we should be suspicious if something doesn't have issues. Denying could quickly making us bling and definitely would be bad for us in the long term. 


Cheers,

Diego Pacheco

Wednesday, May 13, 2020

How Many Hours Should I Work?

So this is a hot-button issue for many people. I',m by any means not trying to be preachy and say what's right or what's wrong, this is just some of my perspectives on the matter.  Many people don't like to work more than 6h and thats fine. Given the level of execution I like to play I really think I need more hours. Working as a consultant you really do not have holidays or day offs, you work you get to pay, do not work dont get paid. Even as you get raises and progress in your career as consultant hours will always be a thing. I have that. You easily could call me a workaholic, a victim of the system, or simply someone who gets things done. I'm not saying that people who work fewer hours get fewer things done. Every one was a different moment and whatever works best for you it might not work for me at all or vice-versa. So do not see this as a workaholic-apology. At the end of the day what matters is: (A) Are you getting things done?, (B) Are you healthy or sustainable?, (C) Are you happy in the long run?.  So for today's post, I want to share mo opinions on this matter and also a short video I made. So Let's get started.

 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


Saturday, May 9, 2020

Interview Questions



A couple of days ago I was blogging about hiring. Today I want to continually expand this subject but focus on interview questions. So this could help you in 2 ways. First, as you will need to interview people, it can help to build you interview script or even that preparation is hard and every company is different and has different cultural FIT I would say there some questions which are common or even make sense to be ready to answer. So I have a video to go throught the Interview Questions towards soft-skills / people questions. So Let's go!


Video



Video Script

Solutions: Architecture and Design
  • Explain Previous project Architecture - what improve and why?
  • Given a problem and ask people how to fix it (i.g Twitter)
People Questions
  • What were the last three books you read? Papers?
    • Books: 
      • Outcomes over Outputs
      • Project Myopia
      • NO Estimates
    • Papers:
      • Google Autoscaling
      • Choosing a cloud DBMS - Redshift
      • Serverless, One step Forward and 2 Backward
  • Three strengths you have
    • Hardworking 
      • Working beyond 8h
      • Care about things beyond my scope - other projects
      • Share Links with everybody (useful for other problems)
    • Communication
      • Convey ideas and sell projects/endeavors i.g Slide Decks
      • Write summary emails (issues, incidents, lessons learned)
      • Ping people in Private to see if they are okay.
    • Result Oriented
      • Proactively think about corner cases.
      • Proactively do code review - outside of PR flow.
      • Make sure we have a balance between features x tech and value. Work on waves.  
  • Three attitudes you are working to improve - focus on behavior
    • Fewer Details
      • I've often give Too many details in emails and chats.
      • Even speaking, I would give long answers easily. 
    • Less Energy
      • I've got a passion for what I do - So I need to slow down sometimes. Speak too much. 
    • Improve Cost awareness
      • Prioritize interviews over tech/engineering activities
  • 1 Situation where did you fail

How to Evaluate Agile / Lean Skills?
  1.  What does Agile / Lean mean to you?
    1. Effective Learning
    2. Principles
    3. See and Avoid Waste
    4. It's about the whole system
    5. It's about the customer/user
    6. How do you things matter - tech excellence
  2.  How do you perform facilitations? 
    1. Day-by-day work, meetings, retros, working with software (tech facilitation). 
  3.  What're the principles behind some ceremonies like DEMO and Retro? 
    1. DEMO - Show / Understand
    2. RETRO - Reflect and Improve
  4. What are the main differences between Kanban and Scrum? 
    1. Dates
    2. Level of Details
    3. Timeboxes 
    4. Approach to change version easy to adopt
  5. How to handle a painful or lousy product owner?
    1. Education
    2. Patience and Experiments



Cheers,
Diego Pacheco

Monday, April 13, 2020

Thoughts on Estimates

Estimates and a very huge concern for pretty much company doing business now a day. Especially during COVID-19 times I dont belive the questions like when something will be done will be out of the table soon.  However, is very hard to get estimates right but is possible to take action to reduce the blast radius of estimates and try to get something reasonable.  Today I want to share a short video I recorded some thoughts on estimates. If you are following up muy blog you will see these ideas were published in previous posts if you did not read my latest posts on similar matters you can read it here: 1,2,3,4,5,6,7 and 8. In this video, you will see why estimates often go south and what we can do to improve and deal with estimates in a reasonable way.



VIDEO


Estimates from Diego Pacheco on Vimeo.

Reference Books

The Mythical Man-Month
https://www.amazon.com/Mythical-Man-Month-Anniversary-Software-Engineering-ebook/dp/B00B8USS14/ref=sr_1_1?dchild=1&keywords=mythical+man+month&qid=1586822083&s=books&sr=1-1

Software Estimation: Demystifying the Black Art
https://www.amazon.com/Software-Estimation-Demystifying-Developer-Practices-ebook/dp/B00JDMPOVQ/ref=tmm_kin_swatch_0?_encoding=UTF8&qid=&sr=

NoEstimates
https://www.amazon.com/NoEstimates-Measure-Project-Progress-Estimating-ebook/dp/B01FWMSBBK

Cheers,
Diego Pacheco

Wednesday, March 18, 2020

Agile value delivery with Outcomes

Agile is +20 years old. Most of the companies did not get it. I'm glad to see the several new UX movements are getting it and are producing some amazing books, not limited to UX but in the helm of digital products and discovery like: Sense & Respond, Outcomes Over Output, The Hard Things about Hard Things and Traction. I read all these books and really recommend you read it too. So the big fight that agile started and Digital Products / Discovery carry on is, stop focusing in Features make sure you understand your customer and deliver real value. Deliver value is not easy and still something everybody talks but feel know how to do it. The difference between a successful startup and a failed one is the ability to execute well knowing their customer and making products they love. I made some previous posts in regards to other forms of value I recommend you check it out here and here. In order to deliver the value, we need to focus on outcomes and stop focusing on output(features). There is a good relationship between OKRs and Outcomes. Output has a strong relation with project culture and Management 1.0 which does not make sense in the digital world any longer.

What Matters?

Tasks dont matter. Users don't care about tasks. However, management still plans and thinks just in sense of outputs(tasks).  At the end of the day, there are few things that matter but we could consider for the business that what matter most is: 

1. Increase in Revenue
2. Decrease Cost
3. Increase new Businesses 
4. Increase Market Share
5. Increase Revenue from the existing customer base

Easily you could see like 2 things. Increase revenue and reduce costs. Focus only on reducing costs could easily create the wrong culture and deliver poor results. So ideally we should focus on increasing revenue with means Impact. Outcomes lead to impact. So the business impact is what matters most.  

Outcome and why they matter? 

Outcomes matter because it unlocks ways to RE-INVENT the business and deliver better and more innovative results. Even if you team is agile, most organizations are not agile and are super hierarchical. So it's super important that things start the right way.

So what are Outcomes? Outcome is a change in human behavior(final user or employee) that drives business results. Outcomes are things that people do that are observable and measurable. Why focus on outcomes now? Like I said before agile is saying a similar message for +20 years, building features does not work anymore. Look Lean Startup movement. Let's see a sample:

Impact: Reduce Costs

Outcome: Reduce the number of support calls

Output: Improve user usability on complicated features.

Using this Outcome formula we can do much better discovery planning sessions and roadmaps. Using outcomes make us focus and think on ideas and experiments to improve user experience. So Outcomes have a perfect marriage with Lean UX and Product Discovery discipline.

Relationship with OKRs

When working with OKR you want your objective to be Inspirational. However, a great practice is to use Outcomes as Key Results in OKRs. You can achieve better key results by asking the question: "What user behavior has this initiative created that drives business results?". This question is so so important because it moves us away from features(output) and makes us close to value delivery questions and experimentation.

One of the biggest OKR issues is that you can cheat! Easily you could shape your OLD KPI goals and tasks in an OKR language and format. OKR is not only about comunication dont be fooled by OKR nice communication what matters is drive business initiatives that create impact.

OKR's main goal is to make you THINK about your goals and have goals in an agile fashion. If you are not thinking hard about your goals and think in a set of experiments to improve things be careful OKRs might not drive the results you want.

Outcomes enhance OKRs and help OKRs happens in the right way. How that happens? Consider OKRs Key results and Outcomes, in other words, what user behavior change or employee behavior change that needs to happens to drive business results.

Outcome-based Roadmaps

Finally, when doing discovery we need to get away from features and tasks. We need to avoid the Management 1.0 trap.  One way to do it so is focusing on Outcome-based roadmaps instead of feature-based roadmaps. Feature-based roadmaps result in fixed price/scope projects, waste, low tech solutions, and poor user experience. In other words, Fiction, guess, Lies and other incidents.

It's important to plan a roadmap based on user journey using methods like *impact-mapping* or *outcomes-mapping*. Planning based on outputs limits team agility. In order to-do, outcome-based roadmaps you need to have a list of questions, possible will become discovery experiments, themes, and outcomes instead of a feature list. Outcome-based thinking is one of the keys to true digital transformation. You need to think that everything is an experiment and your colleagues and customers are outcomes as well.

Cheers,
Diego Pacheco



Tuesday, February 11, 2020

Modern Digital Products & #NoProjects

#NoProjects is an interesting movement driven by Allan Kelly. I follow Allan since 2015, I really like books. As humans, we tend just to add things up and we forget to remove, re-visit, re-cycle and re-think our values and mindsets. Effective Learning is also about unlearning. Project Myopia is a very interesting book on the matter. Projects are in the center of our universe, however, our universe should be customer-centric, product first and innovation-driven. It took me some time to realize how projects can be incompatible with digital products. Software is hard, products are even harder. Agile is all about Value, however, the IT Industry and digital product companies often have issues to define, measure and understand the value. Understanding and Seeking for value is really key to deliver better products and avoid waste(Lean).

Dead or Alive Products

One of the very first things that Allan points out in his book(Project Myopia) is that there is a correlation between downloads and changes. Downloads are less critical than organic growth and customer satisfaction; however, there is an exciting connection. Dead software often has no downloads. Dead software means what? This usually means ZERO maintainers or ZERO changes. As an Architect, the first thing I look at an open-source library to use in any language like (Java, Scala, Go, or Rust) is to check is the library/framework is ALIVE. All these ideas bring us to two central questions, whats DEAD product means, what ALIVE product means?

DEAD SOFTWARE

* Done: Project is delivered, and no future projects are going on.
* No More Updates: Software stop changing, so no improvements, no new features.
* No More Maintainers: People stop working on the software since there is no project.
* No More PRs: Since people dont use it, no one wants to contribute.
* No More Investment: Since there are no users, there is no money to invest.
* No More Changes: ZERO changes, is the DEATH of the product.
* No More Downloads: No Download means no new users.
* No More Users: No more users means losing users until complete DEATH.

ALIVE SOFTWARE

* Never Done: Always changing. No End.
* Always has updated: Never DONE.
* Has several maintainers / several companies/people involved: Since the product is alive, people want to be part of it.
* Has several PRs per week/month
* Has the constant investment
* Has changes in production every day
* Has Downloads everyday
* Has new users and retains user base

I think you get the picture. DEAD means-end othe line, no want wants DEAD. People won't relate to LIVE things. So products need to ALIVE and chaching all the time.  So, in other words, even if you use PROJECTS, you dont want to projects END; you want one project that leads to another project and so on and on... This is so true, and it's completely wrong on the project mindset because projects have an END, and we dont want and END. Estimations have a relation on this matter, I recommend you read my latest post on #NoEstimates.

Project Lies and other incidents

It could be a Guns 'n Roses Album :D

So Projects need to have an END. Projects also require setup, project setup is super expensive, we need to do the following activities(not limited by and a super simple view):


* Marketing - Make sure people know your brand and what work with you. Product Branding and Engineering branding are completely different things.
* Hiring: Hiring is not cheap and not easy. You need to evaluate candidates in the sense of Cultural FIT, Attitudes, Skills, Apply Tech test, Review Tech knowledge, and is at least a 2-week long process per person.
* Train the team: not only in Agile, Lean, Devops principles but also in tech like Cloud, Languages, Frameworks, Databases, etc...
* Tune your team up: Make your teamwork well and deliver value constantly

When you managed to get all these parts done and working well, what you do? Well, you kill this project and start over. This makes sense for you? Projects also consider a success when you deliver on SCOPE, TIME, and BUDGET. First of all, this is very old, bridge-based, PMI concepts that dont apply to our current world anymore. I recommend you also read this post. Multiple projects also limit our pursuit of value. Because we are limited to think we need to finish one project before starting another, and if we consider the backlog flat, we could actually get all high priority items and work on the first and if we fail but do not use all money? Did we fail, or did we succeed? We fail considering traditional project definitions. Due to modern product discovery concepts, we actually succeed because we avoid wasting way more money on software that would not work for the customers.

Projects do not accept FAILURE. Projects assume you will deliver all the backlog you had. This definition is completed flawed within our modern product culture since Lean Startup said and done well - we dont know the product, the market, and the customer, and we need to DISCOVER. IF we need accept we dont know, how can we FIX the backlog? How can we tell we need these 10 exact features or user stories?

Debt as a Liability

Another killer insight Allan introduces on hos book is the issue with *Tech Debt* Term. I personally never liked the term tech debt; since we are building digital products, I prefer the term *Debt* since we can have product debt, UX debt, BA debt, etc...

However, Allan points out a much better concept. Liability. No one wants to have liability, thats non-negotiable. I wish this was the term, and every manager and product professional know this. Debt is often seen and a good thing in the business space, since every company has debt. However, liability is the view as no desired thing at all.

Liability VS DEBT is not only a different word. What matters most is change your mindset. I really recommend you read this post. Changing the mindset means, dont think only about feature and Output. Acknowledge that digital building products are hard, and we can't just pile up liabilities.

Inflate Expectations

This is another big issue most companies face today. Projects create false expectations. On paper, you might say a project cost U$ 500K year but, in reality, might cost 1M. Creating Gant charts and long projects and estimates only make us feel better but do not guarantee user adoption or drive better value. I believe it is the other way around, actually drives the worst performance and less value since we are focused and constrained about the things that do not matter.

Estimations are worst them expectations. Estimations are a kind of expectation. Once you set it up, it will be hard to change. Working with no expectations is hard. I deeply believe we need to Think BIG and have BOLD and audacious Dreams. However, I believe we need to Execute SMALL and very carefully.

Agile won't work for you if you dont change your expectations. Agile does not work if you don't ant accept true and hard things. Agile is like a mirror, you might not like what you will see. Expectations need to be managed and focused on making REAL customer impact not make a scheduled impact on a giant chart or 3-5 year roadmap.

Value Pursuit

Value Pursuit is what matters most. Know whats value is hard and tricky. Customer obsession, UX hard work are the only way we can get there. Experiment culture means: Allow failure to happen; with no failure, there is no innovation; with no innovation, there is no impressive customer impact. We need to acknowledge that building products is HARD and won't happen just because we build it.

If you dont DISCARD any user story making a discovery, it means that you are not making the discovery. Discovery means to play with ideas and experiment with what's the best and right impact on the customers. It's our view on the customer DEAD or ALIVE? Like I said before, software needs to be alive in order for us to have a great product. So how can the product be alive if our view on the customer is STATIC(dead)?

IF We know all the answers, why do we need UX? Could we just build and they will come? Well, the product industry and lean startup already showed us things do not work this way. Persuing value means accepting we dont know all the answers, and we will experiment and discover it. Following deadlines, blindly does not leave much space for discovery.

Continuous Improvement VS Crystalized Values

Continuous Improvement means:

* Listen to the customer(User - not only your business team)
* Listen to your engineering team
* Run regular Process/Team retrospectives
* Have 101 Sessions with everybody in your team
* Do RCAs(Root cause Analysis) and improve what is not working well
* Understand why bugs happen and avoid the happen for the same reason
* Understand the Variation and dependencies and try to manage it
* Do not kill all variation, or you will kill innovation
* Learn to see and eliminate waste(Lean)
* Improve and manage your flow, have limits (Kanban)
* Give visibility of all the improvements you are working all

All that does not work if you do not change your mindset. If you still are waiting for X features in the Y date given Z cost, no improvement will work for you. Because you are not focused on the value, you are focused on OUTPUT. Value cannot be crystallized, it needs to be ALIVE. So it's is in constant change.

Culture: The Elefant in the Room

Why it is so hard. Because your company is BIG and has lots of people who think in the same way. They reinforce themselves. So you are not facing one individual, you are facing something much stronger: Culture.


As an XP practitioner, I always believe in R2 Loops. The ide is old and comes older than XP actually in the 70s to be more precise. But Companies do not learn. R2 Loops means to change your strategy by changing your mental models and values. Otherwise, you are not really changing. Saying "I'm Agile" or "I',m Lean" do not make you Agile or Lean. Using practices without changing your thought process and beyond anything else, you "Expectations" means nothing.

This is the Way | A way Forward...

Like Yoda once said:


The only way is taught education. Education takes time, and it's not only done via training but via day by day hard work. Are your changing agents(agile Coachs, Managers, Leaders) promoting change day by day?

Are we measure the things that matter? Agile is all about the retrospective, but how many *Product Retrospectives* did you performed? How many product discussions you had after production? How many times did you talk with customer support? A product retrospective is different than a Team retrospective. We need to involve Customer Support, Sales, Product People(Discovery) and see numbers on USAGE and understand what is working and what is not working.  Otherwise, we are just pilling features and hope our user base grows. Like Google SRE folks like to say: "Hope is not a Strategy".

Cheers,
Diego Pacheco

Chuyên mục văn hoá giải trí của VnExpress

.

© 2017 www.blogthuthuatwin10.com

Tầng 5, Tòa nhà FPT Cầu Giấy, phố Duy Tân, Phường Dịch Vọng Hậu, Quận Cầu Giấy, Hà Nội
Email: nguyenanhtuan2401@gmail.com
Điện thoại: 0908 562 750 ext 4548; Liên hệ quảng cáo: 4567.