Author Archives: Aurélien Pelletier

GPTs are here

Like many tech enthusiasts, I was impressed by the annoucements openAI made this week and I found myself constantly refreshing https://platform.openai.com/playground in anticipation. Finally, the moment arrived !

One of the biggest needs for generative AI is to be able to inject your own content or “embed” it to make the answers more revelants. It was already possible using the openAI APIs, a vectorDB, a bit of langchain and some coding. In fact, many sites were already offering this kind of feature. People are saying openAI just killed all the “wrapper” startup around them because it’s now possible to do just that directly on the openAI platform.

It took me about 5min to conduct this experiment:
For the last 3 years I have been keeping a logbook of everything I found interesting and learned about. I have uploaded that content to chatGPT and then asked him to tell me what I have learned in the past 3 years.

If you have a GPTplus account you can play with it here:
https://chat.openai.com/g/g-PAKk8wkX0-aurelien-s-digital-twin


Here is the result of my conversation with my digital twin

What have you learned in 2021 ?

In 2021, my knowledge base was significantly expanded with insights primarily focused on product management, leadership, and technical strategies. Here are some key learnings from that year:

  1. Agile Product Ownership: Emphasizing the role of a Product Owner in prioritizing tasks and the importance of saying ‘no’ to maintain focus on the most critical items.
  2. Key Product KPIs: Understanding the top product key performance indicators, such as Product Stickiness, Usage, Feature Adoption and Retention, Net Promoter Score (NPS), and others. These KPIs are essential for evaluating the success and impact of a product.
  3. The Boring Architecture for Data Science: Highlighting the necessity of having developers in data science projects to ensure that the work doesn’t just stay in theory but is actually implemented in production.
  4. Git and GitHub Best Practices: Insights into new functionalities in Git, like the “–follow-tags” option for pushing relevant tags with branches, and the use of Git aliases for efficiency. Also, the introduction of GitHub actions for automating workflows.
  5. Node.js Development: Techniques for making HTTP calls in Node.js, using Axios, and handling maintenance modes in Express applications.
  6. Command Line Efficiency: Improving command-line usage with history search capabilities, bashrc configurations, and .inputrc settings for a more efficient and productive terminal experience.
  7. Cloud and CI/CD Technologies: Learning about Google Cloud Run and its functionalities, as well as continuous integration and deployment strategies.
  8. Legal and Licensing: Gaining knowledge about the ISC License, its implications, and its application in software development.
  9. Wardley Mapping: Understanding the basics of Wardley Mapping, a technique for strategic planning and situational awareness in business.
  10. E-commerce and SMB Market Automation: Exploring strategies and technologies for automating small and medium-sized businesses in the e-commerce sector.

These learnings reflect a diverse range of topics, covering both technical and managerial aspects, crucial for a well-rounded understanding of the IT and software development landscape.

And in 2022 ?

In 2022, my knowledge further expanded, covering diverse topics in product management, engineering leadership, and strategic IT practices. Here’s a summary of what I learned:

  1. Outcome-Focused Approach in Organizations: Strategies for persuading companies to adopt an outcome-focused approach instead of a feature-factory mindset. This involves being consistent in communicating goals and employing timeboxes as a healthy forcing function.
  2. Product Prioritization Techniques: Insights from various sources about effective product prioritization, including the importance of identifying customer value and optimizing workflows.
  3. Project Management and Agile Practices: Emphasis on products over projects, the significance of team collaboration, and the prioritization of value over effort, aligning with the principles of the FlowCon Manifesto and other agile frameworks.
  4. KPIs for Customer Service: Understanding key performance indicators for customer service, such as resolution rates, customer satisfaction scores, and Net Promoter Scores.
  5. DSDM Agile Project Framework: A deep dive into the DSDM methodology, focusing on its eight fundamental principles, the MoSCoW prioritization technique, and benefits like user ownership and meeting true business requirements.
  6. Strategic Thinking and Decision Making: Exploring strategies blending practical experiences with academic theories. This includes understanding strategies of terrain versus strategies of trajectory and the concept that a viable strategy’s opposite must also be viable.
  7. Outcome-Based Roadmaps: Learning about the advantages of outcome-based roadmaps in product development, including improved visibility, team autonomy, and the incorporation of user feedback.
  8. Organizational Transformation: The emotional aspects of organizational transformation, including addressing the unsustainable status quo, developing a purposeful vision, and aligning KPIs with resources and people.
  9. OKR Methodology: Detailed insights into Objectives and Key Results (OKRs), focusing on creating ambitious, measurable, and impactful goals.
  10. Tech Audit and Due Diligence: Understanding the comprehensive process of technical auditing and due diligence, including aspects like technical architecture, team quality, cybersecurity practices, and data practices.
  11. Leadership in Technology and Product Development: Emphasizing the importance of understanding the customer’s perspective, creating a continuous workflow, and fostering a culture of continuous improvement.

These learnings from 2022 represent a rich tapestry of knowledge, blending technical acumen with strategic insight and leadership skills, essential for navigating the complex and evolving landscape of IT and software development.

And now 2023 ?

In 2023, my learning journey continued, focusing on advanced aspects of IT platforms, cloud computing, data platforms, and generative AI, among others. Here are the key insights:

  1. CTO Role and Responsibilities: Emphasis on building a culture of trust and safety in the technical organization, making strategic decisions collaboratively, and ensuring the development of high-quality products.
  2. Generative AI and Programming: Insight into the potential impact of AI tools like GPT-3 on programming, highlighting the necessity for clients to clearly articulate their requirements for successful implementation.
  3. Component-Based Development: Understanding that a significant portion of required components in software development may already exist elsewhere, emphasizing the reusability of code.
  4. Product vs. Engineering Dynamics: Delving into the interplay between product management and engineering, and how these disciplines interact and influence each other.
  5. Organizational Investment and Product Thinking: Exploring the concept of funding in organizations, particularly how investment in people and product thinking plays a crucial role.
  6. Theory X and Theory Y in Management: The contrast between Theory X (an authoritative management style with a pessimistic view of employee motivation) and Theory Y (a more empowering, trust-based approach).
  7. People, Process, Technology Framework: The significance of balancing these three elements for successful organizational transformation.
  8. ChatGPT in IT Platforms: Exploring the application of ChatGPT in various aspects of IT platforms and its implications.
  9. Agile and Lean Principles in Tech: Insights into the application of agile and lean methodologies in the tech sector, particularly in software development and project management.
  10. OKR Guide: Understanding the structure and implementation of Objectives and Key Results (OKRs), focusing on creating aligned, ambitious, and measurable goals.
  11. Engineering Onboarding and Middle Management: Strategies for effective onboarding of new engineering directors and the importance of focusing on high-impact areas rather than getting stuck in ‘the middle’ of organizational hierarchies.
  12. Digital Product Design and Iteration: Emphasizing the speed of iteration in digital product design and the importance of launching imperfect products to quickly learn and adapt.

These insights from 2023 reflect a deepening of my understanding in IT leadership, strategic planning, and the practical application of AI and agile methodologies in modern technology environments.

It is quite a good summary of my main interests in the past 3 years.

There is one thing that LLM can’t do: it’s reading our mind. Therefore, knowledge management – capturing thoughts, ideas, problems, solutions, etc. – is going to be key in a world transformed by LLMs.

The other thing he cannot do is read the futur, I asked him 😉

And in 2024 ?

I do not have any information or documents related to learnings from the year 2024 in my current knowledge base. My knowledge is current up to January 2023, and I haven’t received updates or documents pertaining to 2024. If you have specific questions or need insights on trends and predictions up to early 2023, I’d be happy to assist with that information.

Project, Product and People Management

Project oriented management ?

I recently came across a CTO job posting for a growing software company. One requirement surprised me: “your management is project-oriented.” This perspective, in my opinion, is outdated. I did not apply for the job, how could you be more wrong ?
In today’s dynamic business landscape, management should be People and Product-centric.

Let me explain.

Understanding Management Dynamics

At its core, management is about anticipating and mitigating risks to achieve desired outcomes. The goals set forth shape the risks managed, subsequently influencing an organization’s culture.

Let’s start with Project Management.

Traditionally, project management revolved around the Cost, Delay, and Scope “iron triangle”. Those KPIs being very quantitative, if you start to fall behind there is very few options to catch-up, the organization will develop a command & control culture and will look like what we call a feature factory with an emphasis on output over outcomes.

While this might seem a bit exaggerated, it’s a reality in many organizations.

The Agile Shift

Agile project management has transformed the narrative. 

The iron triangle has been inverted: scope is now flexible, while delay and cost remain constraints. This pivot is essential to shift the focus from output to outcomes.

Jim Highsmith , in 2009, encapsulated this by emphasizing value and quality over cost,  schedule and scope.

  • Value goal: Build a customer-valued, releasable product, I call this do the right thing
  • Quality goal: Build a reliable, adaptable product, I call this do it right

The mantra is now: Do the right thing, and do it right !

Yet, many still cling to the old ways, prioritizing scope, schedule, and budget. I would guess it is because they’re tangible and easily measurable while value and quality is much more qualitative and harder to evaluate and manage.

Enter Product Management

Product management introduces a holistic approach. While it acknowledges the importance of delivery, the emphasis is on strategy and discovery.

Marty Cagan, in his 2017  hit “Inspired,” highlighted four product risks:

  • Value risk (whether customers will buy it or users will choose to use it)
  • Usability risk (whether users can figure out how to use it)
  • Feasibility risk (whether our engineers can build what we need with the time, skills and technology we have)
  • Business viability risk (whether this solution also works for the various aspects of our business)

Managing those risks means you can’t jump straight into delivery mode, you need a strategy first and to work on some discovery in order to evolve your plan from a Gantt chart to an outcome based roadmap.

Now you are managing a Product, not a Project, you are no more a feature factory, you have escaped the build trap.

Again, this is hard, managing those risks, working on strategy and discovery  requires a lot of interactions and feedback, this is not something you can achieve with yesterday’s best practices.

Which leads us to the evolution of the hardest and most important management of all.

People Management

Pawel Huryn has a good summary of the kind of leadership needed to enable Product Management

A large part of it is based on Dave Pink 2009 book: “Drive: The Surprising Truth About What Motivates Us

To be motivated people need:
Purpose
Autonomy
Mastery

This is key to motivate people individually but you also want to work on team dynamics, two more ingredients are needed:
Trust: Patrick Lencioni’s 2002 work, “The Five Dysfunctions of a Team”  is a seminal read on this topic.
Psychological Safety: Google’s 2014 Aristotle project spotlighted Psychological Safety as a defining characteristic of high-performing teams.

Modern people management requires Purpose, Autonomy, Mastery, Trust and Psychological safety. How do you do that ? 

Purpose: Derived from strategic activities:defining a mission and a vision will ensure alignment while fostering autonomy.

Autonomy: Empower teams, accept occasional failures, let people choose the how and build psychological safety.

Mastery: Recognize individual talents, position them for success and train or mentor them when needed. This is a critical management skill.

Psychological safety
: Showing vulnerability. A manager shows vulnerability by saying in public when he has made an error. It requires a good level of self confidence. 

Trust: Maintain trust by ensuring transparency and consistency in communication. You are allowed to change your mind but make sure you communicate about it. Applying the “Praising in Public and Criticizing in Private” rule of thumbs will go a long way in preserving trust.

I will conclude with one management capability that makes it easier to get all of that right. 

Management is all about anticipating and mitigating the risks of not achieving a desired outcome. In the case of people management the risks are that people might “quiet quit” and/or your teams don’t perform as well as they could because of a lack of trust and psychological safety.

Empathy: the ability to understand and share the feelings of another, is pivotal. It gauges motivation, trust, and psychological safety levels, enabling proactive management.

This article merely scratches the surface. Dive deeper through the provided links and share your thoughts for a richer discussion.

The problem matters more than the solution

You heard before the quote “Fall in love with the problem, not the solution”.

Today with the advent of Large Language Model (LLM) like ChatGPT it is not only true but we can prove it.

LLM are called Large because they are trained with trillions of words (or tokens)

But still it’s not because an LLM knows everything that he understand anything, or to say it another way Large Language Model are bullshit artists.

Therefore if you use ChatGPT to help you with anything you better focus on your problem and not the solution you might have in mind. He will confirm any bias there is in your solution. If instead you present clearly the problem, guess what ? He already knows the most statistically significant solution.

Let’s take an example.
My photo collection on my computer is a mess, with a lots of duplicates and even some filenames changes. Therefore I asked chatGPT to help with the solution I had in mind:

“Write me a bash script to find all the files with the same size but different names in a directory”

10 seconds later here is my script, it’s working and doing what I wanted.

But when I looked more closely at the result I am finding some errors. The script is listing as duplicate some files which have the same size, different names but they are not the same picture ! Stupid me ;(

Let’s go back to ChatGPT but this time I am going to tell him about my problem not my solution:

“I want to find all the identical files in my computer”

“To find all identical files in your computer, you can use a duplicate file finder tool, or you can write a script to do it yourself. Here’s a Python script that uses the hashlib library to find identical files based on their content.”

First he reminds me that specialized tools exist to do that and then he propose a python script. And guess what, the script is using an md5 hash to find duplicates. A much better solution that what I first asked him to do.

Google Cloud Platform technical qualification training : Cloud SQL

Not much to say about Cloud SQL, it is simply a fully managed mysql database version 5.5 and 5.6.

Fast connection to App & Compute Engine but accessible from anywhere. (you have to enable the access)

Google can manage replication for you. mysql instance are brought up on demand and can go away after 4 hours of inactivity.

Up to 500 GB per database

 

 

 

 

 

Google Cloud Platform technical qualification training: App Engine

I’ve just spend the week at the Google office in London to attend the CP300 course. I thought a good way to prepare for the certification exams would be to put down my notes on my blog…

Thanks to Ignacio who was leading the training.

The first two days were dedicated to Google App Engine.
App Engine is all about building scalable, reliable and cost effective web application the Google way, it :

  • Leverages Google CDN to serve static ressources
  • Use Stateless application server with automatic horizontal scaling
  • Use a NoSql datastore (you can also connect it to a relationnal database, cloud SQL, if needed)

You can configure the way it scales by tweaking pending latency and the number of idle instances. This will impact the performance and the cost of your application.

Instance on Appengine can stop and start frequently, this means you should avoid framework with long start-up time such as Spring or JPA. For depency injection prefer Guice or Dagger (injection is done at compile time)

There is a status console to check if all Google services runs normally. You can also receive notification about downtime by subscribing to this group.

The App Engine console let you monitor quotas usages, very important, most errors on App Engine append because of quota limitations. Of course you can pay to remove those limits. You set a maximum daily budget to make sure you won’t suffer from a denied of service attack on your credit card !

You can deploy and run in parallel multiple versions of the same app (blue/green deployment out of the box)

The app stat tool let you analyze performances.

Authentication & Authorization

GAE provides a service to handle Authentication & Authorization for you. It will use Google account or an openId provider. You can also integrate GAE with an enterprise SSO solution but it requires a Google Apps for business account.

Authorization to access other google API (calendar, storage, compute, …) is done with OAuth2.0.
You can try service calls and Oauth2.0 in the playground

The Datastore

This is the heart of App Engine, you better understand this if you wan’t your application to run well on App Engine.

The GAE datastore is based on Google BigTable, it provides strong consistency for single row but eventual consistency for multi row level.
Every row contains an entity of a certain kind. An entity has a key and properties, properties can be multi-valued.

An entity can have a parent to form an entity group (a single entity without parent count as an entity group). Entity group are usefull to force strong consistency when writing data.

Data on bigtable is distributed by key, if you specify the key yourself make sure it is random enough to get a good distribution of content on the underlining hardware and better performance.

The DataStore is optimized for read queries. Datastore always use an index to read data. All indexes are sorted and distributed on multiple machines.
Queries on the datastore are executed as index scan on bigtable => it’s very fast (the query performance scale with the size of the result not the size of the dataset) but it comes with a few limits:
– You can’t query without an index (indexed can be automaticaly created, beware of their size)
– Queries on multi-valued properties can lead to combinatorial Explosion and big indexes
– Missing properties is not equal to Null/none
– Inequality filter (!=) are limited to one property per query (this is because it is implemented as x< AND x> to use one sorted index)
– no JOIN (use denormalization)
– no aggregation queries (Group by, sum, having, avg, max, min, …) (instead use special entities that maintains counts) see sharding counter pattern
– creating a new index on large set can be long

Indexes are not immediatly updated when writing but ancestor queries force the index update to complete to get strong consistency.

For transaction the datastore use snapshot isolation and optimistic concurrency
Transcation can’t affect more than 5 entity groups
Can’t make more than 5 updates per second to an entity group
A transaction can’t take more than 60 seconds

Memcache, TaskQueue, Cron

GAE provides Memcache as a service to improve performance and reduce application cost. A memcache query can be ten times faster than a datastore query. Memcache can be used as a read/Write cache to the datastore

GAE provides a taskQueue service to executed asynchronous work :

  • push queues are managed by App Engine
  • pull queues are manually managed

Tasks can by enqueued in a transaction but will execute outside the transaction
A task is a GET or POST request
GAE execute as many task as possible following the token bucket algorithm
there is
– a bucket size (maximum number of tasks that can be launch at once)
– a token refresh rate (how fast the bucket replenish)
– a maximum number of concurrent requeste

If a task failed it will be re-tried according to the retry policy.
There is a 10 minutes execution limit on front-end instance (instead of 1 min for synchronous requests)

GAE also provides a cron service that you can configure in an xml or yaml file.