Interview questions on leadership skills

Audience: anyone conducting/preparing for a technical leadership interview position.

What’s the best way to work with executives?

To work with executive, I prefer to follow the formal process per the company standards. Executive’s time is generally limited and they prefer a brief and to the point communication. Before reaching out to executives, it is important to understand if the topic worth the need of executive’s time. If it needs the time from executive, setting the expectation is important. I will determine if the topic to share with executives is to provide an information, or ask for any feedback or a decision. If it is about asking a decision, it’s helpful to prepare options. If a help is needed for an executive, it should be clear what kind of a help is needed. Executives prefer a clear communication and expectations. I will plan for it accordingly.

Is consensus always a good thing?

Consensus is not a good thing always. Depending on the situation, this strategy should be used. In my experience, there was a product that was working on a stable way but the company needed something completely innovative. To get such an environment, a leader challenged the existing environment. He did not have the consensus to proceed. But he did the right thing. In other situation, a consensus helped when I had to make a go/no-go decision on a success of failure of a User Acceptance Testing. Consensus helped as there were only few people in oppose and all such open issues could either be delayed or worked around.

What is the best way to work with customers and users?

The best way to work with customers or users is to understand their perspective and requirements. I believe the main goal of a product is to meet a customer’s or a user’s needs.

What kinds of people do you like to work with?

I like working with people who can collaborate well towards a common goal. This needs keeping individual approach secondary and thinking and planning for a common objective. This needs individuals to think beyond their individual achievements and focus on a teamwork. It is important to understand everyone’s perspective in the situations. The final decision must be that is needed for the success of the common goal.

What kind of people do you have a hard time working with?

I get hard time working with people who do not think for the success of the common goal. Instead, they may be driven from some other individual or team goals. To deal with such situation, I prefer to remind everyone about the common goal.

What would you do to get a team to stick to a schedule?

This depends on the type of the task. I will first provide a high level context of why we have a schedule and what do we want to achieve as a team within a schedule. Then, I will prepare a plan with everyone’s collaboration. Once everyone agrees with the plan and understand why we want to stick to the schedule, I suggest someone to schedule recurring meetings to check the progress status, blockers, and next steps. Ib the middle of the schedule, I prefer to remind everyone why this schedule is important , why we all agreed to it, and what are positive consequences of sticking to the schedule.

What’s the difference between leadership and management?

Leadership is about influencing, inspiring, and enabling others to make a positive impact. Management is about controlling group or entities to complete a goal on time.

Reference:

As I learn more, I will update this page. Thank you !

Behavioral interviews questions

Who should read this article: Anyone appearing in or conducting in an interview for a developer, engineering manager, project/program, or a product manager or above role.

Disclaimer: Answers to these questions below are based on my experience and I may be wrong for some answers or you may have another opinion or an answer to it. It’s advisable to come up with your own answers.

Tell me about a time when you faced a challenge and overcame it.

Nugget: Sure. I will describe a challenge of integrating with a system that provides flag of who’s eligible to contact and who’s not.

Situation: We had a migration project on marketing campaigns, to reach out to customers, to get their feedback on products. We were using a central user identification system, to know who is eligible to be contacted. I was not getting the answer to it.

Result: After more than 5 attempts to convince this group with repeatedly asking for same information in different ways, finally they were convinced. We did it in a way that provided us information.

Tell me about how you interact with customers or clients?

In my various roles, this has been done in a. different way. In my current role, I interact with my internal customers as my business partners. We discuss about customer experiences, new changes to the business, and how it can impact my owned infrastructure or business area.

Talk about how you overcame product failures/challenges or poor feedback.

There was a time when our product was not meeting the customer’s needs. We met with the group of customers periodically and explained our limitations. Unfortunately these failures increased day by day to a point that these were not manageable. Then, collectively, we took an innovative approach to come up with a next suite of products that overcame the failures for a longer time.

Tell me about a time when you had to influence a team.

Nugget: Sure, let me tell you a time when I had to convince a team to increase the scope of testing in a project.

Situation: For a customer facing campaign emails go-live, engineering team was in a hurry, to go-live with the campaign. They had a pressure of reaching an end of life of an application. I still had to convince them to increase testing coverage as it was a customer facing application.

Action: I listened to their situation/proposal. In this situation, I had to disagree with proposed testing coverage. I convinced them with past data when a problem occured, due to lack of testing. I shared my past mistake when customers experienced an issue. I also told them that I would have agreed to their proposal if it was an internal release BUT we represent the company and can’t risk the customers.

Result: Unfortunately, there were tough deadlines, due to a legacy end of life. Team agreed to increase testing coverage upto 80% of what I sugegsted. I compromised to reduce my ask a little bit. But it was a good enough testing plan that gave both the teams a win/win feeling.

Tell me about a time when you have made a mistake.

I will describe a situation of a project in that I provided I underestimated the level of efforts for the development. This situation added burden on me to finish the development task within the given timeline. When I came up with it, I didn’t know it’s a large effort task. I estimated it as a medium task. To mitigate the delay of the go-live, I had to work extra hours, to develop the component within the expected timeline. Ultimately, after working long hours, I managed to get through it and complete the task in the given timeline.

How would you handle if two executives are asking to prioritize two different features and you can plan only for

one?

I will describe a prioritization exercise for the situation. I will go through the features requested by both the executives, understand level of efforts in implementing it, and business priority of it. After going through it, to both executives together, I will explain the current bandwidth of how much we can accomplish/deliver. To do that, I will utilize the appropriate forum that is suitable for such a prioritization. Then, after the discussions, I will decide the outcome of selecting one feature to deliver it on time with the expected quality.

Tell me about a time you used data to make a decision.

I will describe a situation when we determined the priority of a fix depending on the volume of the issues. In a customer campaign, we wanted to fix an issue. But we had limited bandwidth to fix the issue. We analyzed the data to understand the criticality of the issue. It turned out that the chances of issues were less than 0.5%. We had to delay this issue fix over other higher priority issues. So, this is how data helped us making the decision.

As I learn more, I will update this page. Thank you !

Java programming notes

Who should read it: anyone looking for a quick overview of Java programming basic concepts.

Below are some common concepts about Java programming language:

Volatile: Volatile is a keyword that can be used only with variables. It can not be used within a method or a class.

We can use volatile when we want to read and write long/double variables. It can be used to achieve synchronization. Volatile guarantees that the value will be read from the main memory.

Synchronized block: There are two versions: a synchronized method and a synchronized statement. Synchronization helps to avoid multiple threads accessing the same code at the same time. For more on it, read here.

Static keyword: Static keyword indicates that the method or field that it declared static, belongs to the class. In other words, there’s the same copy of the field or method across all instances.

Class: A class is a blueprint that can define behavior using methods.

Object: An object is an in-memory instance that is created using the blueprint called, class.

Exception Handling: When a program is interrupted due to an unexpected event, that captured event may be called an exception. Use try/catch to catch an exception. If an exception is not caught, throw the exception to the other program so that another program handles it. In Java, there are three kinds of exceptions:

  • Checked exceptions: these are subject to try and catch.
  • Errors: These are generally exceptions that occur due to external situations.
  • Runtime exception: These are exceptions internal to application and these are generally occur due to unanticipated scenarios.

JDBC drivers: Java Database Connectivity (JDBC) is an API in Java that helps to connect a Java program with a database. JDBC API supports a wide range of databases. JDBC provides four types of drivers:

  • Type 1 JDBC-ODBC Bridge: Type 1 JDBC driver provides the connectivity to database via Open Database Connectivity (ODBC) drivers. It is limited to some options and the performance of type 1 driver is not great as it needs the translation of code from JDBC to ODBC format.
  • Type 2 Partial Java Driver: It is a partially Java enabled driver. It needs the binary code into client’s machines. The performance of it is slower than type 3 and type 4.
  • Type 3 Driver: It is a fully Java enabled driver that converts the net-protocol to the DMBS specific protocol. The limitation is that it needs separate JDBC middle-ware server to translate native specific connection interface.
  • Type 4 Driver: This allows direct connections to databases by using network protocol that sends the data to DBMS into the DBMS specific format. This is a very popular driver type.

Java collections:

Java has these collections:

  • Collection: It is a root of collection hierarchy.
    • List: List is an ordered collection.
      • Arraylist is an implementation of List.
    • Set: A collection that has no duplicates.
      • SortedSet: It is a sorted version of Set.
    • Queue: This holds multiple elements prior to execution. Queue typically has elements in FIFO (First In First Out) order.
    • Deque: This collection also holds multiple elements prior to execution. Deque can be both FIFO and LIFO (Last In First Out).
  • Map: Map object holds key and values. Maps can not contain any duplicate keys.
    • SortedMap: It is a sorted version of Map.

Note: I will further elaborate collections in the upcoming updates.

Comparator versus Comparable:

  • Comparable compares objects. We can override compareTo() method.
  • Comparator is external to the element we are comparing.
  • When we need to compare objects with the natural order, we should use Comparable. When we need to compare objects with their attributes, we should use Comparator.

Equals and Hashcode methods:

Equals compares two objects. Hashcode() method helps to get a hash code integer number of an object. Hashcode() method is used to compare two objects. To compare two objects, first we can compare their hash codes. If hash codes are same, next we can compare attributes of two objects.

Serializable and externalizable: Serializable serializes the object via JVM. It stores the object in a way that later it can be recreated. Externalizable allows us to store selected features of an object. Externalizable extends Serializable and add two methods: readExternal() and writeExternal(). To use externalizable, ensure that default constructor of the object’s class is public. Otherwise, it will not serialize the object and throw an error.

String intern() and deduplication: Java strings use heap memory, to store each string literals, even if it is the same string. String intern() can help avoid the storage of same string literals repeatedly. intern() avoid duplication of string strings. intern() uses string pool, to avoid storing more than one same string values in the heap memory. String intern() is a non-static method.

Multi-threading in Java: A thread is a smallest unit of processing. To achieve multi tasking, we use multi-threading and multi-processing. Multi threading does not allocate separate memory. It takes less time for threads to switch the context. We can can multiple processes running on a computer. Each process takes separate memory address space. Each process can have one or more threads in it. Threads share same address space.

Other Thread related topics:

  • Thread states:
    • New: a new thread, not started yet
    • Runnable: a thread running in JVM (Java Virtual Machine)
    • Blocked: a thread that is blocked, waiting for a monitor lock
    • Waiting: a thread waiting for another thread to perform
    • Time_waiting: a thread waiting for another thread for a time period
    • Terminated: a thread that is exited
  • ThreadLocal: ThreadLocal allows to create and read variables within the same thread. If we have two threads executing same code, these two threads can not see each other’s variables.
  • InterruptedException: InterruptedException is thrown when a thread is interrupted while waiting, sleeping, or otherwise occupied. For details, refer to this article.
  • Livelock, Deadlock, and Starvation:
    • Deadlock is a situation in that the processes block each other.
    • Livelock is a situation in which the states of the processes constantly change. This situation does not allow any process to finish the task.
    • Starvation: it is a situation in that all processes do not get the allocation of CPU time to complete a task.
    • For more, refer to this article.

Concurrent utilities: java.util.concurrent package has utilities to create concurrent applications.

Java NIO: Java NIO is an alternative to Java IO. Java NIO allows non blocking IO.

Java thread dump analysis: A thread dump provides a snapshot of currently running processes. If there is a performance problem or a deadlock problem, analyzing thread dump can help to understand/trouble shoot it. jStack is a simple utility to generate thread dumps. This is a simple article describing thread dump analysis.

Memory leaks: Memory leaks is a situation of having unused memory that is not garbage collected. If an application has severe performance issues or crashing suddenly or throwing Java Out Of Memory Error, these are symptoms of memory leaks. Minimizing static variables and using singleton pattern with lazy loads are useful techniques to minimize or avoid memory leaks.

Java app profiling and profiling tools: Java profilers can help to estimate how memory will be allocated for the program. It can help to improve the code. Some example of profiling tools are JProfiler and JavaVisualVM.

Synthetic class, method, and field: Synthetic class, method, and field are elements introduced by Java compiler. These are for Java’s runtime internal purposes. Java Synthetic items can be useful in debugging code. To know if a method is exposed to synthetic, we can use Java’s reflection API.

Java Bridge methods: These are intermediate methods created between source and target. Type eraser is a process of ensuring type constraints at the compile time.

Garbage Collection: Garbage collection tracks objects on heap memory and removes memory of unused objects.

Marker interface: A marker interface is an interface that has no field and no method.

Functional interface: It has a single abstract method.

Method reference: Method reference is a type of a lambda expression. There are four kinds of method references:

  • Static methods
  • Instance methods of particular objects
  • Instance methods of an arbitrary object of a particular type
  • Constructor

Class loaders: Class loaders load classes at runtime, on a need basis. There are different types of class loaders:

  • Bootstrap Class loader: Bootstrap Class loader is a part of JVM and written in native code.
  • Extension Class loader: It is a child of Bootstrap Class loader and loads extension of standard Java Classes.
  • System Class loader: A system Class loader loads application specific Classes into the JVM.
  • Custom Class loader: To load Classes outside local hard drive or network, we may need to use a customer Class loader.
  • Context Class loader: Context Class loader provides an alternative method to the class-loading delegation.

JVM shutdown hooks: JVM shutdown hooks are functions that JVM allows to run before shutting the JVM down. We can use these functions to release resources, before a JVM shuts down. A Caveat to these hooks is that JVM can run these hooks only in a normal termination. If a JVM is forced killed, it won’t get a chance to run these hooks.

Java Optional class: Java Optional class is introduced in Java 8. It is used to deal with NullPointerException.

References:

System Design Basics

Why and who should read this article: This article is for readers who are looking for a brief summary of system design concepts, as a reference for interviews, project needs, or a general curiosity.

What are key features of distributed systems:

  • Scalability: Scalability helps to meet the increased demand.
    • Horizontal scaling: it can be achieved by adding more servers to the existing infrastructure. Examples are MongoDB and Cassandra DB that are horizontally scalable by adding more servers.
    • Vertical scaling: it can be achieved by adding more resources (like CPU, RAM, etc.) to the same servers. An example is MySQL that can be scaled by switching it from smaller to a larger capacity machine.
  • Reliability: If I can be confident that the system will always succeed to serve the needs at all the time, I will call it a reliable system. For example, I can rely on my email system that it will always be available. Even if some of the services might fail, it is still reliable.
  • Availability: Availability means a system is operational in the time period. If a system has no downtime, it could be 100% available. Note: A system may be available but may not be reliable. For example, my email is available to use but what if it has a security issue? If it has a security issue, I will not rely on it to keep my emails secured.
  • Efficiency: Being efficient means the system works in a right way.
  • Effectiveness: Being effective means the systems provides output within the accepted quality and quantity.
  • Manageability: A system is manageable or serviceable if it can be repaired within the defined criteria.

What is a Load Balancer and how it distributes the traffic:

  • A Load Balancer helps in managing the traffic on servers. If a server is busy or if a server is not responding, the load balancer can route the traffic to another server. There are many ways to design the architecture using load balancers at the right place. For example, we can have load balancer before web servers, we can have it between middle layer/application servers or before the databases.
  • Load Balancing algorithms: Load Balancers have algorithm options to decide how to choose a server to send a requests to serve. Below are some of the options:
    • Least connection method
    • Least response time
    • Least bandwidth method
    • Round robin
    • Weighted round robin
    • IP hash

What are Redundancy and Replication concepts:

  • Redundancy is a way to avoid fault tolerance. In simpler terms, let’s say we have two web servers serving the traffic. What if we keep a third web server on a stand by mode? If by any chance one out of two web application servers fails to serve the traffic, we can utilize the third web application server with the failed web server. This third web server is a redundant server. I can recall my personal experience when one of two web servers failed. It was easy to utilize the standby/redundant server within an hour. It’s possible to plan for it without waiting for an hour.
  • Replication is a way to ensure the redundant servers are in sync. In the above example. what if a server fails but the redundant server is not up-to-date with the data/files on main traffic serving web servers? To avoid such a situation, it’s advisable to ensure such a redundant server has same information as other servers. Another common example is a database replication from a primary to a secondary database. In my experience, a server failed but the redundant server was not ready. It happened because the script responsible for the replication failed. To prevent such a failure of a replication, an automated period health and data check of replicated servers is important. Periodic dry-run of such a change process is recommended. As Benjamin Franklin said, “Failing to prepare is preparing to fail.”

What is Caching: and how it works:

Cache is a way to store data in memory for a defined period. This helps to access data faster. One simple example is HTTP session. In a web application architecture, we can keep the commonly asked data into cache. Other related information:

  • Cache helps in reducing latency and increasing throughput.
  • Content Delivery Network (CDN) systems use static media files. Generally, web applications use CDNs to store static media files. A CDN could be using a light weight HTTP server using NGINX. CDN is a network of servers that distributes the content from original server to multiple locations by caching the content closest to the users’ locations.
  • Cache invalidation: It’s important to plan for cache invalidation when theta is changed at the source (like a database). There are different ways to do it:
    • Write-through cache: this technique suggest to write the data in the cache at the same time when the data is written to the database. This prevents any data sync issue. But this increases latency of write operation as it has to write data twice.
    • Write-around cache: this technique suggests to just write the data to the storage (like a database) and not to write to the cache. When the data is accessed, it will take time.
    • Write-back cache: this technique suggests to write the data only in cache, not in the storage. After the end of a time period or conditions, data is saved into the storage. This has the side effect of missing the data from cache, if there is a crash in the servers string the cache data.

What is data partitioning:

Definition: It is a process of splitting the data into multiple small parts. After a certain point, it is better to scale horizontally, by adding more machines. Below are some ways to partition the data:

  • Horizontal partitioning: It is also known as data sharing. We put different rows into different tables. It could be done based on a range.
  • Vertical partitioning: In this type of partition, data table is divided vertically. For example, data can be stored in one DB server and images can be stored in another DB server.
  • Directory based partitioning: In this approach, partitioning plan can be stored in a look up service.

What are Partitioning criteria:

For more about partitioning, refer here. Below are brief notes:

  • Range based partitioning: This approach assigns rows to partitions as per a range. For example, I partitioned a MySQL DB table by months so that the database performance is optimized.
  • Key or hash based partitioning: this approach partitions the data with hash code on a key field. But hash based can be problematic to further expand in the future. So, using consistent hashing is recommended.
  • List partitioning: This is similar to range. In this approach, we partition the data based on a list. For example, we can partition based on region or based on a language preference.
  • Round-robin partitioning: In this approach, new rows are assigned to a partition on a round robin basis.
  • Composite partitioning: It combines more than one partitioning approaches. For example, we can first apply list partitioning and the hash partitioning.

What are the problems with data partitioning:

  • Joining database tables can be performance inefficient. To avoid it, try to denormalize data in a way that avoids data cross-joins.
  • Data partitioning can cause referential integrity. To avoid it, store the referential integrity logic in application code.
  • Schema changes are difficult with data partitioning. To avoid it, use directory based partitioning or consistent hashing.

When to use data partitioning:

We should use it when it is not possible to manage the data within a single node or a performance improvement is necessary.

What is a proxy server:

When a client sends a request, the first server that receives the request could be a limited, light-weight server. This light-weight server can further pass the request to the actual backend server. Such a first server is called a proxy server. It could be a hardware or a software. A proxy server acts as a firewall.

Advantages/usages of proxy servers:

  • Logging the requests.
  • It can also help in caching the responses.
  • Serving a downtime message when required.
  • Proxy server helps to add the security to the backend server.
  • Blocking some websites for the users within a company. Proxy server can also be used to bypass the restriction of a website for a company users.

Here are some types of proxy servers:

  • Open proxy: An open proxy is accessible by any user on internet. It can be anonymous (that hides the identify of the originated machine) or a transparent (show the identity of the originated machine).
  • Reverse proxy: A reverse proxy is for the server to get the response from other servers and send the response to the client. A Load Balancer is a use case of a reverse proxy.

What is a Heartbeat for systems:

In a distributed systems architecture, we need to know if other servers are working. To achieve it, we can have a centralized monitoring system that can get the uptime status of each server. We can decide the steps if a server is not working as expected.

What is a checksum:

Checksum is a way to ensure the data transferred from one system to another system is as expected. Checksum is calculated and stored with the data. To calculate the checksum, a hash function like MD5 can be used. Source and destination servers can match the checksum to ensure data is transferred from the genuine source.

What is quorum:

In a distributed system, a quorum is a process to ensure all required systems have the same information and it only completes a transaction complete when all systems have the needed information. For example, if we have three database servers. If we want to ensure that a transaction is only considered complete when all three databases instances get the same information and agree to the transaction. Quorum can help to ensure such an operation.

What is the Bloom filter:

Bloom filter is a data structure approach to quickly find an element in a set. Bloom filter structure informs if an element MAYBE in a set or DEFINITELY not.

How HTTP works: A user hits a URL on the browser. We use either http or https protocol. Second is a domain (like http://www.abc.com). We use a DNS (Domain Name Service) lookup to look for an IP for a domain. DNS information is generally cached. To look for a DNS, we have DNS servers. Finally a browser has the IP address of the server. Next, the browser get a TCP connection with the server. Browser sends a request to the server. Server sends an http response to the browser. Browser parses the responds and shows the response to the user on the browser.

Bare metal infrastructure: this is a term used for legacy physical server infrastructure. When an application needs the highest level of security, bare metals could be the most appropriate solution.

Virtual machines: This uses a hardware that is shared for multiple virtual servers. We use a hypervisor underneath guest OSs. The downside is that these could be vulnerable by noisy neighbor problems.

Containers: it’s a light weight stand alone package. We use a hardware and host OS. On top of it, a container engine is installed. On top of container engine, multiple containers are deployed. Containers are scalable and portable. Containers are less secured. They are vulnerable to security issues at OS level. To avoid security issues, we can run containers inside virtual machines.

Thank you for reading it. As I learn more, I will revise it.

References:

Product Management Overview: Part 3 of 3

This is a Part 3 of three series:

  • Part 1: Product Management (PM) role, Becoming a PM, Product life cycle, and understanding the company.
  • Part 2: creating an opportunity hypothesis, validating a hypothesis, and taking an idea into action.
  • Part 3: Working with design, engineering, and marketing. Finally, completing the product lifecycle.

Working with Design:

  • User experience (UX) design: it is about how a user interacts with a product. A customer should use the product and use it in the right way. A user-centered design is an approach from a user’s standpoint in using a product.
  • The design process has these phases: User research, information architecture, interaction design, prototyping, visual design, and content strategy.
  • The design process starts before writing the PRD.
  • Design relationship skills: A product manager focuses on an ideal customer and a design lead focuses on an idea user.

Note: I will revise the design details in the upcoming articles.

Working with Engineering:

  • Relationship with engineering: it is important to build a respectful relationship with engineering. They are hard working professionals who do many more things in addition to writing the complex code.
  • Software development methodologies: two famous mythologies are waterfall and agile. Waterfall is a lengthy and iterative process in that each iteration may take time. Whereas, agile is a short duration iteration process. Waterfall approach does not allow changes in between the process. Whereas, agile is a flexible approach. Scrum is an approach for agile development. Scrum uses time-boxed sprints.
  • Kanban: Kanban is a process that controls the work in-process items and focuses on moving to the next steps. In a simpler form, Kanban board process suggests to-do, doing, and done steps.

Marketing of the product:

  • Marketing a product: Marketing is important to launch a product successfully. Some companies have product Marketing Manager (PMM) roles that are external customer and partners facing.
  • Product Messaging: Product messaging is important to let customers know why they should use your product.
  • Launching the product: identifying a launch owner is a great way to launch a product. Going To Market ( GTM) can be divided into three steps: prelaunch, launch, and post launch. Prelaunch focuses on planning the launch by taking multiple steps. Launch focuses on mainly executing on the plan. Post-launch focuses on post launch analysis, marketing, and sales.

Completing the product life cycle:

It is important to celebrate the completion. it is also important to discuss how things went from start to end, to assess how the process an be improved for the future iterations.

Reference:

  • The Product Book: How to Become a Great Product Manager by Product School, Carlos Gonzalez de Villaumbrosia, et al.

Product Management Overview: Part 2 of 3

The articles on product management has three parts:

  • Part 1: Product Management (PM) role, Becoming a PM, Product life cycle, and understanding the company.
  • Part 2: Creating an opportunity hypothesis, validating a hypothesis, and taking an idea into action.
  • Part 3: Working with design, engineering, and marketing. Finally, completing the product lifecycle.

In the first part, we went through PM role, PM life cycle, and strategically understanding the company. In this part we will go through creating opportunity hypothesis, validating hypothesis, and taking an idea into action.

Creating an opportunity hypothesis:

There are ways like iterative progress or a big change step. Depending on the situation, a PM should decide if an incremental change is appropriate or if building a new product from scratch is appropriate.

  • Goals: It is important to establish the goal for the product. A product can be built in a iterative way or as a one big release, depending on the goal.
  • Quantitatively finding an opportunity hypothesis: Quantitative reasoning involves data analysis, to find the next approach. Qualitative reasoning involves understanding the vision of the product or the intuition based approach to determine the best step for the customers.
  • Metrics and analysis: metrics and analysis is important to determine the next steps for the product.
    • AAARR metrics: it is an acronym developed by McClure for the products. It stands for:
      • Acquisition: how users visit your product
      • Activation: a users’ first experience with your product
      • Retention: a user’s liking to use the product again
      • Referral: a user’s liking of the product to refer it to other person
      • Revenue: a user finds the product useful enough to pay for it
  • Surveys and customer interviews are helpful to assess the need and current situation of the product.
  • Intuition: intuitions are good but it is important to understand from personas’ point of view. Will this idea help a user? If yes, how?
  • Vision for the product is important and is developed by the team.
  • Team ideas: A PM should be a team player who listens to all the ideas and helps making the right decision for the product.
  • R&D: it is important to research an idea and plan to build it with the assessment of engineering and other feasibilities.
  • The competition: understanding the competition is important, to decide the approach for the product. For example, for a technical blog, there is competition with many companies and bloggers. Should a new technical blog be one of many of offer something different that others are not offering? Or should the quality be high? How will a new technical blog make the position in the market?
  • Business model and value proposition: Analyze how a product fits into the business and how the product provides the value to the customers. Here are key points about business model:
    • Key partners: outside the company, who are the key partners who make the business model work.
    • Key activities: what are the key activities. For example, a blog company’s key activity maybe content writing and website publishing.
    • Key resources: key resources could be human, physical (hardware), and intellectual properties.
    • Value propositions: what value a product provide to a persona, is the value proposition.
    • Customer relationships: this is about managing the relationships with the customers.
    • Channels: Channels are the ways a company reaches out to their customers. For example, for a blog company, Facebook, direct emailing, twitter, and other means could be channels to reach out to customers.
    • Customer segments: these are categories of the personas that the product will serve.
    • Costs structure: this is about finding the cost to maintain the product.
    • Revenue streams: this is about ways how the product will get the revenues. For example, technical books could be useful to generate revenues.
  • External affairs: sometimes, there are external affairs as well. For example, what if a client offers a multi-year maintenance contract, if certain features are added per a client’s needs?
  • Using Kano model to find opportunities: Per Kano model, a product needs three things, to be successful over time: 1. Value, 2. Quality, and 3. Innovation. As per this principle, there are three features:
    • Basic features: these are features expected from a product.
    • Performance features (satisfiers): these are features like how the app performs.
    • Excitement features (delighters): these are surprising, unexpected, wow features.

Over the period of time, each feature moves down. Excitement features becomes performance feature. Performance features become basic features.

Validating your hypothesis:

The next thing is to decide if it is the right thing to do. Every idea has an opportunity cost. Below are options s to validate a hypothesis:

  • Customer development: it is a process of reaching out to existing or new customers, to know their pain points, goals.
  • MVP or A/B testing: There maybe a decision to build an MVP. Or, maybe use an A/B testing. A/B testing is an approach to compare two sets of something. If idea is validated to be a good idea, next step is to plan for building it.
  • SWOT analysis: SWOT stands for Strength, Weakness, Opportunity, and Threats. It helps to identify what’s important to focus on. To do a SWOT analysis, identify goals and success criteria.
  • Internal validation: it is about asking key questions to understand if a product’s vision is aligned with the company’s vision.
  • External validation: it is helpful to perform external validation. It means seeking feedback from customers about the product.
  • Other ways: Interviews, Surveys, Analyzing data, Experiments, and A/B tests.

From idea to action:

Blow are key points to take a product from the idea to actions:

  • Why new ideas struggle: there may be chances that customers no longer need the new feature in the product that you planned for. It is very helpful to anticipate next steps and avoid assumptions, as much as possible. Suppose my product is a eBook on work skills for IT professionals. If it takes six months for me to write the book, what if there are better options available in the market in the next six months? In this example, I should list out assumptions and address those.
  • Working backwards for the future feature. Imagine your product is released and you are writing product reviews, product release, and product FAQ sections. These future preparation will help to assess the product. For example, if a writer is planning to write a book, what if he/she writes why and who should read the book, how this book is helpful to readers, and how it is different from other books.
  • Plan for an MVP: Minimum Viable Product (MVP) does not mean an incomplete product. It is a great exercise to prioritize what minimum features will help the customers. Then, over the period of time, iterating and adding more prioritized feature helps. For example, if I am writing a book, identify minimum required areas to address first in the book. I can create a second book later, with additional details.
  • MVPs and Plussing: MVP concept forces us to prioritize to the most important items. Plussing is a concept of adding a surprising element to it. This plussing concept has to be completely in-line with the core model. For example, if I am writing a book on technical product manager interviews, my MVP would be to cover the topics that the readers expect. The core idea of the book is to prepare candidates to clear an interviews. A plussing on it could be to share general tips on resume writing and networking.
  • Communicating via a Product Requirements Document (PRD): A PRD covers the features of the products to be built. This should be helpful to all stakeholders. A PRD should include what’s covered and not covered in it. It should include. In a waterfall approach, a PRD is a detailed document. In a lead development approach, it is a lighter weight document that will be iterated frequently. In any case, a PRD is a live document. For a project scope items, a PRD should be written. For bug fixes or an enhancement, a PRD may not be needed and such item can be covered via a ticket or a similar system. Some other points: we humans are wired to learn in stories. So, writing the requirements in the form of stories is helpful.

Next, we will go through part 3: Working with design, engineering, and marketing. Finally, completing the product lifecycle.

Reference:

  • The Product Book: How to Become a Great Product Manager by Product School, Carlos Gonzalez de Villaumbrosia, et al.

Product Management Overview: Part 1 of 3

Why and who should read this article: read this article if you want to know the basics of a product management role.

This is a Part 1 of three series:

  • Part 1: Product Management (PM) role, Becoming a PM, Product life cycle, and Understanding the company.
  • Part 2: Creating an opportunity hypothesis, validating a hypothesis, and taking an idea into action.
  • Part 3: Working with design, engineering, and marketing. Finally, completing the product lifecycle.

What is the product management role:

A product manager is someone who represents customers. A product manager is a person responsible for a product. He/she has multiple skills. On a day to day, a PM understands the business and execution strategy of a product. They know how to set the vision of the product.

How to become a product manager:

A product manager should be knowledgeable in product design, engineering, and marketing. PMs come to this role from various stream like development, designing, marketing, business, quality assurance, business analysis, and other such related areas. It’s always an added advantage for PMs to know programing.

Below are some skills that a product manager should know:

  • A fundamental understanding of product design, engineering, and marketing.
  • Understand who are the customers.
  • Business strategy: A product manager should know the business strategy of the company. They should understand who all are players, how a company makes money, and understand the revenue vs. profit.
  • Execution: a product manager should know the execution.
  • Vision: they must know how to set the vision, see the right opportunities by using data and metrics.
  • Defining the success: they must know how to define the success criteria of a product.
  • Marketing: they must know how to work with marketing, to market the product.
  • People skills: they must know how to work, appreciate, motivate, and lead people.
  • Prioritization: PMs must know how to say “no”. A product manager understands what the customers want and prioritize to build limited features in the product.

Types of product managers:

  • Technical product managers: A technical product manager is someone who is managing a technical product, like an API for a system. They focus on how products are built. They are not involved in coding.
  • Strategic product managers: someone who has a business background and a compliment to a technical product manager.
  • Other: like growth product manager, mobile product manager, etc.

Product management development approaches:

There are ways like lean development, waterfall development. Sometimes, companies prefer a hybrid of lean and waterfall approach.

Product development lifecycle:

  1. Find/plan the opportunity: a product manager finds the right opportunity and plan for it. Product managers write PRDs (Product Requirement Documents) in collaboration with all stakeholders from business, engineering, design, analytics, and other teams. A Product manager also decides if the product will be built using lean or waterfall approach. There could be a plan to build a Minimum Viable Product (MVP) using the lean approach.
  2. Design the solution: PMs work with design team to design a solution. The engagement from engineering is important to assess the technical feasibility of the design.
  3. Build the solution: Once a product is defined and design is agreed, then the next step is to build the solution. There would be a need for a PM to negotiate releasing a quick solution or a long term solution.
  4. Share the solution: This step is about sharing the product to the world. In this phase, if the set-up supports, there maybe a need of a Product Marketing Manager (PMM) who focuses on marketing. A PM will focus on the internal details of a product. Releasing a product maybe done in phases: a pilot, small release, and other subsequent releases. There may be a need to run marketing campaigns, ad, etc. to market the product and get the customer’s feedback about the product, to improve it for the customer’s needs.
  5. Assess the solution: In this phase, PMs should evaluate the team’s situation like are they happy working on a next project and anything to be done differently. After the release, real data is available to assess the product. The after launch analysis of the product can help improve the further steps in the product development.

Strategically understand the company:

A PM should think of these things below:

  • Understand why does the company exist: It is critical to understand why the company exists, what are core beliefs, and mission statement of the company. This should be the guiding principle in planning for a product. Understand customers and personas. In a simpler way, a persona is a customer profile type using the product. Let’s say, the product is a web browser,. An example a persona is a web developer. For the product web browser, it is critical to understand how this persona will use the product, web browser. Understanding use cases are important. A use case is a function of a product used by a persona. Understand if a product is build for an enterprise or for a customer.
  • How do we know if a product is good: Key Performance Indicators (KPIs) metrics can help determine if a product is good. Vanity versus actionable metrics: vanity metrics are those that are not directly related to product’s performance. These can be for some secondary or other benefits. Actionable metrics are the metrics that are directly related to the performance of the product. Analytics, surveys, and interviews can help to collect the right metrics about a product. Net Promoter Score (NPS) is a metrics to assess an overall customer satisfaction of the product. It measures how like it is that a user would suggest the product to others. NPS is a % of promoters minus the % of detractors out of all replies. Scale is 1 to 10. Detractors score from 0 to 6. Promoters score 9 or 10.
  • What products are we building: It focuses on the company’s current products.
  • Other things to consider: Plan for the roadmap of the product for the short term and a long term strategy. Understanding the competition & climate is also important to understand if the product we are building is competitive and fit to the market. A great analysis is called 5C analysis, to assess the opportunity for a product. The five Cs are: Company, Customer, Collaborators, Competitors, and Climate.

In the next part, we will go through creating an opportunity hypothesis, validating a hypothesis, and taking an idea into action.

Reference:

  • The Product Book: How to Become a Great Product Manager by Product School, Carlos Gonzalez de Villaumbrosia, et al.

How to learn 1-hour every weekday

In any career track, it is important to keep learning. For example, technologies are changing with a rapid speed. It’s important to keep learning if you are in a technology career. Everyone talks about learning continuously and everyone understands the importance of it. How to really keep yourself updated? I went through a very informative article about a 5-hour rule of learning every week. As per this rule, learning one hour every week day is required to stay up-to-date in your field. If we are convinced to follow the 5-hr rule, here are few ideas on how to make it happen:

  1. Accountability:

How to make yourself accountable for it to make it happen? These are few ideas:

  • If you like writing (as I do), what if you commit yourself to come up with one article of the week that you share with your audience what you learned this week? It could be a simple article about one single technical topic or anything you learned. Can you commit your audience to know by Friday evening or Saturday morning what you learned in the week? If you like writing, what if you start your auto-biography in that you write about each week’s learning?
  • If you like speaking, can you create an audio clip about what you learned in the week?
  • If you like painting, can you draw a picture about what you learned in the week?

Some other ideas for accountability: Imagine you are an IT consultant who has to fill-up a weekly timesheet that has a section of 1-hour learning every day. Imagine that the timesheet will be approved only if the 1-hr learning section is filled up.

2. Fix the learning hour for every weekday:

If we can set a fixed time in the day every week for the learning, it has more chances that we will not miss it. By chance, if you missed it, ensure to cover it up before sleeping. In the worst case, one cheat day in a week is ok. Here are some ideas on how to fix the hour for the learning:

  • Morning time: What if we get-up one hour earlier and use that hour for learning? It needs determination and assumption. Assume we had to get up one hour earlier. What if we start reaching work one hour earlier and use that hour for learning? Avoid the temptation of checking emails or other distractions.
  • Lunch time: What if we convert the lunch hour as a learning hour? We will not get a complete hour but 20 minutes quality time is a possibility. 
  • In between the work hours:  What if we block one hour every day at work for learning? The difficulty is to avoid the temptation of replacing it with an urgent meeting or task. One cheat day is ok. What if we go home one hour late?
  • Before sleeping: What if we plan to sleep one hour late?

3. Be realistic with your goal:

An example of an unrealistic goal would be to complete a 500-page book in a week. An example of a realistic goal would be to understand one topic of the book every day. Here is another key to plan. If you think we can finish three topics in the day, then, what if we reduce it to one third of the goal?

4. Temptation to skip it today:

There are high chances you may be tempted to skip it just today because today is a busy day. It will happen many times. Remember. Everyday is a fresh day for new opportunities.

Decide today the topic for tomorrow:

If we don’t know what the topic is for tomorrow, we have a high chance to skip it tomorrow. So, it’s critical to be specific about the learning goal for tomorrow. A better idea is to plan for a week in advance. If at the moment we feel like learning something else, we should note it. Delay the next topic to another hour, if we get it in the day. Consider it as a work meeting on the decided topic that has the deadline today.

5. Other difficulties:

  • We may face a difficulty of breaking the topic in small units. So, to challenge it, consider it as a project with a go-live date. Break the work down into a small unit of work that takes about 20 minutes to finish.
  • What if you are not in the mood to learn today? This task is not for today and it can not be dependent on the mood today. It is a task for the future that has to happen today. If you are upset or angry about a situation at work, consider this task as an activity to change this situation in the future. It is anyway a good idea to let the day go in a flow, write down such moments, and review those at the end of the day.
  • What if you had some emergency situations at work or at home? Use it as a cheat day or try to adjust other things on the plate.

I would like to know your views about 5-hr learning rule and your ideas about how to stick to this rule.

How to move back from a Project Manager to a Developer Role

There are different reasons why a developer transitions to a Project/Program manager role. After some time, there could be a moment in your career when you want to move back to a developer role. If you think moving to a PM role was a right choice, ignore reading this further. If you think you miss technical hands-on development in that you excelled, it’s never late to switch back. Here are some tips to get back on a hands-on development track and take your career to the next level:

1. Find out why you want to be a developer again: 

It’s important to assess your whys clearly. Let’s look at some common whys:

  • Self-realization: Switching from a developer to a PM may not be easier for everyone. Some developers will find the ecstasy in a PM role. A PM who was an excellent developer, may have two possible thoughts on two extremes: 
  1. Oh, I wish, I was born as a PM. I like leading people towards a goal. I love meeting people. I love high level integration, without going in deep of the code (then again, you don’t need to read it further).
  2. Oh, did I really work today? Am I really delivering any value? I heard I led that meeting well, but I didn’t do anything at all. I just presented what others did. Am I going to get any credit for any of the work? If yes, is it fair to get the credit for something I didn’t do? Does anyone really appreciate scheduling a meeting and asking people to work towards a goal? Don’t they already know why, how, and what to work towards their goals? I don’t think I did anything. Did I have to pull up my sleeve to get into anything deep technical, to solve a problem? Why are people thanking me as if I did all the magic to make the project successful? Is it a fake thank you and they really meant to say: you were not needed, you wasted our time with many useless meetings.
  • A step to be a technical manager: Many times, a belief is that to be a development manager, you must excel in technical skills, leadership skills, and operational/business skills. Getting into a PM role may provide you a right combination of leadership and operational/business skills.

2. Acknowledge what you learned as a PM:

The years you worked as a PM were a great investment. You learned these skills:

  • How to lead and communicate: This is a great skill to have. As a developer, the tendency is to know all the details about a system. PM skills are great in understanding and leading the integration of systems as a black box (not knowing what’s inside).
  • Influencing stakeholders: As a developer, your job generally is to complete the assigned tasks. There may be opportunities to influence technical teams for a technical solution. But, as a PM, you get more assigned tasks to influence users. How many developers will be motivated to read a book on influencing stakeholders? If we ask the same question to a PM community, the question should be opposite: can you be a PM without reading the book on influencing stakeholders?
  • Respect what PMs do: To appreciate a skill, it’s the best to be in that role yourself. As a PM, do you recall your scariest moment when you were not sure to get a buy-in from your stakeholders? If you were wrong (they showed up to your meeting and respected your engagement) and you got their buy-in, will you ever forget that moment of joy? You clearly remember the number of stakeholders you invited who showed up to your meeting. And yes, majority of them agreed to your point of view.

3. Finally, how to be a developer again:

  • You’re here with the real interest: Congratulations. You clarified your whys and made a decision. You’re learning the development with your true interest. This is a critical step. 
  • Don’t give up and don’t lean back: As it’s your interest and your strong desire, you’ll succeed if you don’t give up. So, first thing first: don’t give up in your uncomfortable journey ahead, of becoming a developer again. Here are some common feelings you’ll encounter as your daemons and you must not deviate from your goal:
  • Are you too old to be a developer ? Will people laugh and will you feel bad at your moderate and old technical skills?
  • Did you fail as a PM? Many people may ask you, why are you transitioning back to a developer role? Did you not perform well as a PM? Is it a demotion? You may hear people saying: the grass is greener on the other side.
  • Will you excel as a developer again? There’re many smart developers in the market who’re young, probably with less family responsibilities. Will you be able to spend that much time again? Are you still that sharp to learn new technical skills quickly?
  • What if you become an average developer who’s not able to cope up with newer technologies? There are many intelligent new age developers. You quickly recalled an incidence. That day, a developer was cursing himself to be a developer. He was feeling overwhelmed with so many new technologies to learn.
  • Work/life balance. Development tasks are very time consuming. It feels like two 40 hours a week sets are needed (at the same time). But will you be paid for 80 hours a week? You may feel it was nice to be a PM. As a PM, you guided many people how to manage their time within 40 hours a week.
  • Decide a skills set: List out what skills you acquired earlier that are still in demand. If not the same, at least, do you find equivalent skills set in the market? Once you find your strengths, it’s important to decide a new technical skills set that you want to master. Stay with the planned skills set.
  • Join forums and communities: Find opportunities inside and outside your company, to learn new technical development skills.
  • Show your curiosity of technical skills: Show your curiosity of technical development skills within your network. You know how to communicate, make relationships, and it’s the time to ask for the help of others to help you learn technical skills.
  • Find the development opportunities: Find a development opportunity in your area. Here are key ideas:
  • Do you see a gap of technical resources in your project? If yes and if you can do the task, dive into it, work beyond your comfort zone, and own the technical task.
  • Work on a prototype code that’s not mission critical.
  • Develop your side project you have been dreaming for years. There are no limits to the possibilities. It could be your pet project to organize your family members list, your investments, your documents, or a simple utility that your family & friends would like to use.
  • Review your progress: Review your development skills progress after six months. Then, follow a quarterly review routine. Rome wasn’t built in a day.
  • Will you be an excellent developer again: You are skilled in communication skills, operational/business skills, and you’re progressing in your development skills. It’s not fair to assess yourself in one dimension. Do what you love to. A better question would be: am I an all-rounder professional who loves development as the core skill set?
  • By now, you failed many times: But. You already made a decision. Don’t look back. Stay on the journey. You’ll succeed if you don’t give up.

How to help a new employee to the success

Overview: Helping a new employee to the success is important for the growth of the company and the growth of the employee. Here are few basic steps to set a new employee to the success:

Begin with the end in mind: “Begin with the end in mind”, as said by Stephen Covey. The process of setting the goal begins before the hiring process. List out why the company wants to hire a new employee.

Employee’s goals: Before employee joins, set-up the goals for him/her. When writing goals, remember the steps of SMART goals. Means, goals must be:

  • Specific
  • Measurable
  • Achievable
  • Relevant
  • Time-bound

Let’s take a simple example. If your goal is to exercise daily, how you can write the SMART goal for yourself. Below are steps:

  • Specific: My goal is specific. I have decided the exercise types for every day.
  • Measurable: I will use my smart watch to measure the duration of exercise (30 minutes) and the intensity of it to qualify it as an exercise.
  • Achievable: I want to ensure my goal is achievable. It’s reasonable for me to plan for 30 minutes of exercise in the morning. I do want to make it an hour but I am not sure if I can achieve it. Also, if I skip in the morning, for me, it’s difficult to plan for it in the evening. So, morning 30 minutes exercise duration is achievable for me.
  • Relevant: I want to ensure my goal is relevant. As per the CDC, it’s important for adults to exercise. CDC has recommended guidelines and the weekly limits for the exercise routines. So, my goal of 30 minutes exercise daily is relevant.
  • Time-bound: My goal is to exercise 30 minutes daily between 7 AM and 8 AM. This goal is time-bound.

Training plan: Employee must be clear about the training plan. It should be well written with the success criteria of the first day, first week, and further. It should be clear who will provide the training, what is the expectation from the trainer, and what’s the expectation from the employee. The key to success is to avoid assumptions and document the success criteria.

Cultural understanding: Helping a new employee to learn the company culture is equally important. Plan how you can help a new employee to learn the company’s culture. There are different ways to do it. Some common options are: company specific documentation, cultural training plans, mentoring plan, or a colleague to help the employee. It’s equally important to check-in with the employee about his/her collaboration with the colleagues.

Many other areas: there are many other aspects that are not covered here. For example, employee’s well-being plan, initial set-ups, etc. Help new employee to check-in on all these steps.

Periodic sync-ups: Let the employee know the frequency of sync-up meetings and the expectations of these meetings. Do you want him/her to prepare any details before the meeting? Does he/she know the next step?

Stay flexible: What if the goal change? Stay flexible to make the necessary adjustments to it.

Conclusion: Helping a new employee to the success is important to the company’s success and the success of the employee for his/her own career growth. We all are human and we all want to do the best of our abilities. These shared steps are very basic. Depending on the company size and company culture, these steps might vary. Planning and executing the defined steps will lead an employee to the success for himself/herself and to the company. I am eager to know your thoughts about it.