Common Java libraries

Lombok API: This is a very helpful library that allows reducing infrastructural code. If we use Lombok API, we don’t have to write the code for getters, setters, constructor, equals, hash code methods, and even more.

Resilience4j API: It is a library designed for functional programming. One example use case is the rate limiter functionality, to limit number of maximum requests served by an API in a defined time period. Other examples are:

  • Concurrency control using bulkhead module
  • Fault Tolerant using retry

Hystrix API: Hystrix API can help make a service fault tolerant and resilient.

Javatuples: It’s an API that allows us to work with tuples. A tuple is a sequence of unrelated objects of different types. For example, a tuple may contain an integer, a string, and an object.

Javasist, CGLib, and ASM: These are APIs to manipulate Java byte codes.

P6Spy: It is a library that allows logging of database operations in the realtime.

Java Transaction Management: A transaction is a series of actions that must be completed. Java provides multiple ways to control transactions. Java provides transactions that are based on JDBC, JPA, JMS, Global Transactions, Java Transaction API (JTA), Java Transaction Service (JTS), and other related ways.

References:

Strength app part 5: Enable https on AWS

This is the part 5 of application development series. Refer to part 4 for the previous information. On our strength application, we wanted to enable https certificate. As it is for learning purpose, we wanted to keep it low cost.

Here were our options:

  • Enable AWS provided https option.
  • Get a free https certificate via letsencrypt and enable it on AWS. For our Sprint Boot application, we needed to generate a keystore.p12 file. We decided to opt for option2: get a free https certificate via letsencrypt website.

Our next challenge is to access the generated certificate into Spring Boot application in a way that is scalable in the future and does not go away if we terminate our EC2 instance on the ECS cluster. Here are options for us:

  • Manually copy https certificate to EC2 instance. We did not opt for this option. Reason is, if we terminate our ECS instance (attached to the ECS cluster), the https certificate will be deleted with the termination of the EC2 instance.
  • Keep the certificate at Amazon S3. Then, copy it to EC2 instance manually. We did not opt this option because every time we have a need to recreate an EC2 instance, we will have to manually copy the certificate.
  • When creating an EC2 instance within ECS cluster, add commands in user data option, to copy the certificate from AWS S3. We think this is an optimum option. But we couldn’t enable it. Free version of ECS enabled EC2 instance did not allow adding user data properly. To allow running user data into EC2 instance, we had to run an EC2 agent configuration. Running these configurations were either not easily available or too complicated within the free tier EC2 instance. So, we did not opt this option.
  • Add the https certificate within the Spring Boot application via S3 copy using SSL configuration. This could have been a considerable option. Within Spring Boot code, we can add SSL configuration bean to copy the certificate from AWS S3 and recreate a certificate file within the Spring Boot application. Below is a sample code to do it:

import java.io.File;

import org.apache.catalina.Context;
import org.apache.catalina.connector.Connector;
import org.apache.tomcat.util.descriptor.web.SecurityCollection;
import org.apache.tomcat.util.descriptor.web.SecurityConstraint;
import org.springframework.boot.web.embedded.tomcat.TomcatServletWebServerFactory;
import org.springframework.boot.web.servlet.server.ServletWebServerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

//@Configuration
public class SslConfiguration {

@Bean
public ServletWebServerFactory servletContainer() {
    TomcatServletWebServerFactory tomcat = new TomcatServletWebServerFactory() {
        @Override
        protected void postProcessContext(Context context) {
            SecurityConstraint securityConstraint = new SecurityConstraint();
            securityConstraint.setUserConstraint("CONFIDENTIAL");
            SecurityCollection collection = new SecurityCollection();
            collection.addPattern("/*");
            securityConstraint.addCollection(collection);
            context.addConstraint(securityConstraint);
        }
    };
    tomcat.addAdditionalTomcatConnectors(redirectConnector());
    return tomcat;
}

private Connector redirectConnector() {

    Connector connector = new Connector("org.apache.coyote.http11.Http11NioProtocol");

    connector.setPort(8443);
    connector.setSecure(true);
    connector.setScheme("https");
    connector.setAttribute("keyAlias", "tomcat");
	connector.setAttribute("keystorePass", "<hidden>");
	connector.setAttribute("keyStoreType", "PKCS12");

    Object keystoreFile;
    File file = new File("");// ADD PATH
    String absoluteKeystoreFile = file.getAbsolutePath();

    connector.setAttribute("keystoreFile", absoluteKeystoreFile);
    connector.setAttribute("clientAuth", "false");
    connector.setAttribute("sslProtocol", "TLS");
    connector.setAttribute("SSLEnabled", true);
    return connector;

}

}


  • Add the https certificate within the Spring Boot application via S3 using properties file. To use this option, we need to read the https certificate file from application.properties. Below is a sample code to do it:

private static void copySSLCertificateFromS3() {

try {

Properties props = readPropertiesFile("src/main/resources/application.properties");

String clientRegion = props.getProperty("clientRegion");

String bucketName = props.getProperty("bucketName");

String sslFileNameWithPath = props.getProperty("sslFileNameWithPath");

String keyStoreFileName = props.getProperty("server.ssl.key-store");

AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(clientRegion)

.withCredentials(new ProfileCredentialsProvider()).build();

S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, sslFileNameWithPath));

InputStream objectData = object.getObjectContent();

// Process the objectData stream.

File file = new File(keyStoreFileName);

try (OutputStream outputStream = new FileOutputStream(file)) {

IOUtils.copy(objectData, outputStream);

} catch (FileNotFoundException e) {

e.printStackTrace();

// handle exception here

} catch (IOException e) {

e.printStackTrace();

// handle exception here

}

objectData.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public static Properties readPropertiesFile(String fileName) throws IOException {

FileInputStream fis = null;

Properties prop = null;

try {

fis = new FileInputStream(fileName);

prop = new Properties();

prop.load(fis);

} catch (FileNotFoundException fnfe) {

fnfe.printStackTrace();

} catch (IOException ioe) {

ioe.printStackTrace();

} finally {

fis.close();

}

return prop;

}

private static void copySSLCertificateFromS3() {

try {

Properties props = readPropertiesFile("src/main/resources/application.properties");

String clientRegion = props.getProperty("clientRegion");

String bucketName = props.getProperty("bucketName");

String sslFileNameWithPath = props.getProperty("sslFileNameWithPath");

String keyStoreFileName = props.getProperty("server.ssl.key-store");

AmazonS3 s3Client = AmazonS3ClientBuilder.standard().withRegion(clientRegion)

.withCredentials(new ProfileCredentialsProvider()).build();

S3Object object = s3Client.getObject(new GetObjectRequest(bucketName, sslFileNameWithPath));

InputStream objectData = object.getObjectContent();

// Process the objectData stream.

File file = new File(keyStoreFileName);

try (OutputStream outputStream = new FileOutputStream(file)) {

IOUtils.copy(objectData, outputStream);

} catch (FileNotFoundException e) {

e.printStackTrace();

// handle exception here

} catch (IOException e) {

e.printStackTrace();

// handle exception here

}

objectData.close();

} catch (Exception e) {

e.printStackTrace();

}

}

public static Properties readPropertiesFile(String fileName) throws IOException {

FileInputStream fis = null;

Properties prop = null;

try {

fis = new FileInputStream(fileName);

prop = new Properties();

prop.load(fis);

} catch (FileNotFoundException fnfe) {

fnfe.printStackTrace();

} catch (IOException ioe) {

ioe.printStackTrace();

} finally {

fis.close();

}

return prop;

}

  • Use a docker container to copy https certificate form S3 to EC2 instance. Every time we have a new EC2 instance, we can copy the https certificate file from S3 to EC2 instance using a very light weight docker container task. So far, this seems to be the best possible approach within the free tier EC2 instance of ECS type. We’re exploring this option.

If anyone has suggestions to us for a better approach, feel free to share your comments.

Strengths app part 4

This article is a part of application development series. We are providing details of creating the strength application. In part 3, we discussed about REST and other backend APIs for the application, In this part, we will discuss user interface details of the web application.

  • User login functionality: We have finalized a basic login page to authenticate a user. If a user is not authenticated and attempts to view the home page of the application, we redirect the user back to the user login page.
  • Home page: Home page provides these details:
    • User information: Name of the logged in user.
    • Number of total votes: Total votes for the user.
    • Strengths details: We show strengths of the user in a tabular form. Each row of the table has these details:
      • Strength title
      • Total votes on the strength
      • Created by
      • Buttons to view strength details, update a strength, and delete a strength

As we add more features to the application, we will update this page. Stay tuned for the updates and new articles on it.

Strengths app part 3

In the application development series part 2, we learned the use cases of this application. In this part, we’ll go through high level technical details of Spring Boot APIs and search integration of the application.

Below are REST APIs an search functionality for this application:

  • User API: It is a REST API for a user profile. It will allow to authenticate a user to view determined functionalities of the application. For example, only an authenticated user can vote on the strengths of a friend.
  • Strengths API: This API provides a feature to add, view, update, and delete a strength of a user.
  • Vote API: This API provide a feature to vote on a strength of a user. Only a friend can vote another friend’s strength.
  • Search functionality: To search a strength of a user, we’ve integrated AWS’s open search functionality. It is equivalent to Elastic Search. Strength API is integrated with open search via SNS configuration. When a strength is created, Strength API publishes a message to Elastic Search. In other words, we add a new strength entry into Open Search via SNS messaging which is integrated via Strength’s Add API method.

Later, we have a plan to add more features. We will update this page as we make more progress. Stay tuned.

In the next part, we will discuss the Desktop version User Interface part of the application.

Strengths app part 2

For the overview of the app, refer to part 1: here. In this part, we will describe the technology stack of this application.

This application is created to users who wants to learn SpringBoot, React JS, and other Java and react JS related technologies. Our approach of selecting the technologies stack is a bottom-up. That means, as we progress further, we will select teh right technology for the right module.

Technology decisions so far:

  • Rest API: We’ll build a REST API for strengths, users, and other functionalities using SpringBoot framework.
  • Web application: We’ll build a web application using react JS framework.
  • Database: We’ll use Amazon RDS based PostgreSQL database.
  • Hosting platform: This application will be deployed on AWS ECS infrastructure.
  • Search functionality: For an effective search functionality, this application will implement Elastic Search.
  • Search data feed integration: Data feed to Elastic search will be done using Amazon SNS service.
  • Cache mechanism: This is yet to be determined.

A high level architecture of the application: We’re yet to come up with a diagram for it.

This is a work in-progress page. We will update it as we make further progress with the application.

How to manage work when dealing with personal hardship

Sometimes, we’re in a difficult situation in the life. This article is to discuss some options on how to ensure we’re able to work while dealing through a difficult personal circumstances.

In my article about life principles, I mentioned the need of having a clarity of the work priorities. Many of us go through difficulties in personal life. For example, you might have an ill family member to take care of, or going through a marriage arrangement, or a divorce situation. In such difficult situations, managing work and life balance could be tough. It could be difficult to deal with the emotions at work. If you have difficulty in managing work/life balance, contact a trustworthy psychologist and other local resources to help you.

Here are few personal tips how I will deal with such a situation while not letting the work impact:

  • I will let my manager know what personal challenge I am going through. It seems simple and obvious but sometimes we miss the value of it. Even if it’s a simple personal situation that might impact the work, it helps to let the manager know about it.
  • When interacting with stakeholders (like peers, project members, or a client), it’s okay to let them honestly know, that I am going through some rough time that might impact some work. I’ll just share about the mood, not the actual problem. Also I will let them know that my intention is to do the best possible work. We all are human and we understand that anyone could be in such a situation.
  • At any situation, knowing the priority of your work deliverables is always very important. I always attempt to know the answers to these questions:
    • What’s the first, second, and third most important work deliverables expected from me?
    • What’s my first priority work deliverable today, this week, and this month?
    • If you have only 4 hours in the day, can I take care of my most important work deliverables?
  • I will work with my manager to help him/her understand what work deliverables I can realistically deliver given the personal situation. I will try to not overcommit. In fact, I will plan for 75% of the tasks that I am confident I can take care of. Reason is, we all have a tendency to overcommit.
  • At work, I will go in a transactional and a mission mode to complete the important work deliverables within the least possible time limit.
  • I will go in a bare minimum work survival mode. That could mean I will have no time to network more than required, no time to join meetings where I am not required, and no time to say Yes when I can only say No.
  • At work, I will ensure to speak only required and speak only about work.
  • I will wrap up the work in no more than planned hours. I will create a hard boundary of work and personal life. That means, I will not be able to work after the work hours. Remember. It’s a personal hardship that needs my attention after the work. So, after work, do take care of the personal situation.
  • During the work, I maybe distracted with emotions related to personal situation. I will learn to delay the decision to go back/think about the personal situation just after the work. If needed, I will schedule a meeting with myself after the work, to think through the personal situation. If I am disciplined to respect the work and personal time boundaries, I will be able to delay the personal tasks after the work.
  • I’ll definitely contact a trustworthy counselor, psychologist, or a related help, to help me deal with my situation.
  • I’ll also look for people who are in a similar situation. I will learn from them to deal with such a personal hardship and how they managed or managing their work/life balance.
  • If I am not able to work without distractions, I will work with my manager to work either part time or take time off, to take care of the situation.

As I learn more, I’ll share more.

Application development series

Strengths app part 1

This is a series of articles about developing a simple web application.

Audience: Anyone looking for basic knowledge in building a web application.

Application summary: This is a strength analyzer application. This application allows a user to add his/her strengths. It also supports additional features.

Application use cases:

  1. Maintain a user profile: A user should be able to login to view his/her information.
  2. Maintain strengths of a user: Provide a way to add/view/update/delete a strength of the user. Provide a pagination of the strengths, for a better display. The user should also be able to search strengths.
  3. Maintain a friends list: a user should be able to add other users as his/her friends.
  4. Vote and comment on a strength of the user: Friends of a user should be able to vote a strength of a user. Friends of the user should also be able to comment (post) about user’s strength.
  5. Ability to search: A user should be able to search other users by the name and on a strength.
  6. Other yet to be determined features: to be determined as we progress on the development.

Intended users (actors) of the application:

  1. A user who wants to create his/her profile to publish his/her strengths. A user could be an IT engineer, a product manager, a home maker, a business man, or anyone.
  2. A user who wants to analyze his/her strengths, to find out his/her as-is and to-be goals. For example, consider a user who is looking for a job as a UI developer. He/she is experienced in Javascript, HTML, and CSS. To get a job as a UI developer, he/she analyzes the need of learning react JS.
  3. A user who wants to feel good about his/her strengths, by gaining popularity, support, and visibility within his/her friends list.

As we learn and add more use cases, I’ll update this page. In the next part, we’ll go over implementation details.

A simple approach to solve a problem

At work and outside work, we have many situations for that we need to find a solution to a problem. Here are some example problems to find a solution for:

  • Decide the success criteria of a project.
  • Determine a career track for you.
  • Determine the decision from a data table.
  • Decide which holiday location is right for you, which is in budget and time.

Here are few techniques that I use, to decide the next steps:

  • I attempt to create a simple spreadsheet.
  • I write the desired outcome in a column or in a row, whichever you prefer.
  • I write the next possible outcome/step.
  • I continue the process until you find all your answers.
  • I revisit this process as needed.

Below is an example of a person looking for a job change as a UI developer. This person worked as a UI developer long time ago. She is interested in upgrading her skills, to get a desired job. Let’s look at the decision steps below:

ItemDetail
Desired outcomeGet a job as a UI developer
What is the first step?Analyze the current skills set
What is your current skills setI know Javascript, JQuery, CSS, and HTML
Is my current skills set sufficient to get a job at my current desired location?No
If no to previous column, what skills set needs to be added?One of these Javascript frameworks: React, Vue, or Angular
Which framework I want to learn?Not sure
How to decide which framework to learn?Do the market analysis. Understand which one is easier and attractive to learn
How to do the market analysis?Look at jobs on linkedin.com for last 30 days to analyze which one is most and least popular
What is the outcome of the analysis?React is the most popular in my area
How can I learn React JS?1. Find a tutor or an online course
2. Get a book
3. Plan for a dummy project
4. Find time to learn
How much time I need to learn this skill realistically?I will need to read a book. I will need to get an online course too. I will need to create a dummy project also. Reading a 300 page book will take at least 6 hours for me. An online course will need 6 weeks, with 4-6 hours commitment every week. To create a dummy project, I need at least 40 hours. In total, I am looking for roughly 70 hours. Let’s plan for 80 hours. In a week, I can spend no more than 5 hours. With that calculation, I need 16 weeks. It is roughly around 4 months.
Note: I may need time to refer to online resources. I should also plan for at least two weeks unplanned. With this speed of learning plan, I need around 5 months to learn react JS. To learn it quicker than 5 months, I need to increase learning hours per week or reduce the scope of learning.

This is just a basic example of one of an example problem. Depending on the situation, it’s ok to create a flowchart, a decision tree, or a more detailed spreadsheet format. Some possible steps could be to consult a friend or an expert. Add all such steps and update the status of it.

Thank you. As I learn more, I will update this article.

Create your own life principles

Who should read it: Applicable to everyone.

In the life, it’s important to decide your own principles and philosophies that you want to follow. I encourage everyone to think and plan for your own life principles.

Why to create your own life principles:

  • As Stephen Covey suggested in his book “The 7 Habits of Highly Effective People“, that principle based life is a true fulfilling life as compared to single centered life (like money centered, spouse centered, or similar).
  • To take a decision on a situation, having your own set of principles help.

An example of list of principles:

  • My core values: Service and Perseverance. Out of all, service is the first priority.
  • Decide your focus areas in the life. Then, make the progress in those areas first. Leave the rest. Mine are: Spiritualism, Fitness, Finance, and Folks.
  • Creating an Ignore List is equally important as creating your focus area list. For example, one of my items in the ignore list is to avoid watching TV after 10 PM.
  • This world needs service. And, we all are born to serve self and others. You are a parent because you want to serve. You are a friend because you want to serve. You work because you want to serve. You do business because you want to serve. You do X because you want to serve.
  • If you have time to make only one friend, it should be your writing journal. Journey of finding purpose can begin from it and end at it. Journey of achieving anything can begin and end with planning. Writing is a great process of achieving it.
  • At your work, always do the bare minimum required tasks first. Reason is, many times, we miss the minimum required work. This also helps to navigate what’s most important to be done for the day. The second is to do more than required. Sometimes, in the process of figuring it out how to do more, we may lose the focus on doing the minimum required first.
  • Try to enjoy each and every moment of your life: at work and outside work.
  • Humor is important. If you focus on it, you could see the humor in every situation. This is the best remedy to stay healthy mentally.
  • Enjoying the journey is as equally important as achieving a goal.
  • When working with people, always separate people from the situation.
  • Planning and creating a vision is important. In the famous business book, “The 7 Habits of Highly Effective People,” Stephen R. Covey stated that “all things are created twice. There’s a mental or first creation, and a physical or second creation to all things.”
  • As we are temporary on this earth, how can our problems be permanent? That means, there is a solution to everything.
  • If you have time to do only one thing today, focus on servicing others. If you have time for one another thing in the day, practice a gratitude habit. Before going to bed, simply review who and what are you thankful to and for.
  • If you want something, dare to ask for it. Many times, people don’t get what they want because they don’t ask for it.
  • If anything a human can do, you can. Because you are a human.
  • Persistence is the key to success. Failure is just a step before the success. Make progress towards your goals with a steady approach, one step at a time on a day. Consistent efforts are more important than a one-time effort.

As I learn more, I will update it. Thank you !

Product Manager Behavioral Questions and Answers

Audience: This is helpful to anyone who is conducting or appearing in an interview on the product management.

I used questions from this website and other websites, to collection questions. Answers are mine. These answers are not verified by anyone to be correct. These are based on my knowledge on the subject.

What do you see as a Product Manager’s main role within product development?

A product manager’s role is to plan and execute a product from start to end. Different responsibilities include:

  • Requirements gathering
  • Defining product vision
  • Working with design, engineering, and marketing

As a product manager, how do you stay user-focused?

A product should be user focused, to ensure users are getting what they need. To stay user focused, a product manager should view the product from user’s point of view understand personas, and use cases.

What main changes would you make to a product?

Depending on the situation, I’d like to review the approach. In my situation, I found out that the older system was not working as expected. We found out issues and changed the processes of the product.

How do you see your career developing in the next 5 years?

In five years from now, I see myself taking more leadership responsibilities to contribute in a company.

Tell us about a time you used data to influence an important stakeholder.

There was a migration project on a system. Engineering team was not in favor of implementing a change in a way my team was interested. I reached out to engineering lead with the data of last ten years. That data pattern helped him to learn why the request of the change is in a way. I empathized with him for the approach he suggested and at the same time, convinced him for a change. Finally, data patterns helped to make a right decision.

Tell us about a time you faced failure and how you bounced back.

It was about a beginning of my career as a developer. I had a task to complete. I had serious a bug in that utility. I prepared a utility to search all database functions in a project. My utility didn’t count all tasks correctly. It was a failure of writing the utility correctly. I failed to write it well. I learned that I must have thought about all corner cases and must have tested it with good data set. I fixed the approach by adding all corner cases. That fixed the issue.

How would you improve your favorite product?

I am always looking for ways to improve the current product. I’d continually monitor customer expectations, product analysis/monitoring trends, and the future growth. So, a continuous forward looking 360 degree process is important to improve any product.

What’s your approach to prioritizing tasks?

To prioritize tasks, I assess the business impact and the efforts to complete a task. I answered it here in my post of engineering manager interview questions.

Why do you want to work at [our company]?

I am really impressed with your services offerings. This is an area of my interest. I believe, I can contribute in this company because <fill in as per the company’s offerings and the candidates’ interest>.

Why do you want to be/what do you love about being a Product Manager?

I love the role of a Product Manager because a product manager has the ownership on the product. This allows me to think of past, present, and future roadmap of a product or its offerings. It is the area where I can apply my diversified experience and interest on engineering, design, and marketing.

How would you prioritize resources when you have two important things to do but can’t do them both?

I use a prioritization exercise to understand the business impact and the efforts on completing a task. I’ll prefer a one that has higher business impact and needs low efforts. If both tasks need same efforts, I will pick the task that has higher business impact.

Describe a scenario which required you to say no to an idea or project.

Saying no is important for a product manager. There was a situation when two stakeholder groups reached out for some new features. The product was in a migration stage. I already published the schedule of a freeze on both new and legacy products. I had to say no to both the new ideas.

How do you decide what and what not to build?

This is based on the prioritization exercise. I use a prioritization exercise to understand the business impact and the efforts on completing a task.

What is a product you currently use every day, why and how would you improve it?

Everyday, I use my online notebook, to take notes. I really love the way it is built. It solves many problems to me because by writing my problems and analyzing solutions to it, I feel in the control of the situation. I like this notebook because it is available everywhere as long as I find the internet. One big limitation on it is that it does not really support handwriting in a way I’d prefer. If I can, I’d like to enable handwriting on it.

There is a data point that indicates that there are more Uber drop-offs at the airport than pick-ups from the airport. Why is this the case and what would you do within the product to change that?

I’d like to understand the data points: how many customers are requesting for a drop-off, what are their pick and drop-off points, what are the charges, etc. For the pick-up, I’d like to understand what are the difficulties for the customers. Is it the location of the pick-up, are charges high for the pick-ups, and other related difficulties. If possible to send the surveys to the pick-up customers, it would be very helpful to understand their survey data about their feedback with the ride. Depending on the survey and non-survey analysis, I’d suggest changes into the product. After the changes, I’d monitor the pick-up counts, to assess the next steps.

How would you improve the functionality 10x of what it is now?

First, understand the as-is situation. Then, understand what does to-be scenario of 10X functionality means. To move from as-is to to-be, plan the steps, resources needs, and draft the timeline. After the plan is finalized, move into the execution.

How would you increase adoption of Google’s Fiber to the Home product?

First, we need to understand the current situation of the adoption. Google Fiber will need to compete with Comcast or similar internet providers. It will be helpful to find out unique features of Good Fibers that are not include in the competitors. We should plan for marketing of it, including special offers to the customers.

What is the key to a good user interface?

The key to a good user interface is simplicity. Other important features are:

  • Consistent UI behavior
  • Strategic use of colors and layouts
  • Use appropriate typography

Reference: https://www.usability.gov/what-and-why/user-interface-design.html

While we make X product for the general public, we also have a B2B division. What is your experience with juggling both markets?

In both the markets, main thing is to solve the problems of the customers. Personas may also be similar. Marketing strategies for both will be different.

Reference: https://www.productplan.com/learn/b2b-versus-b2c-product-management/

How do you know if a product is well designed?

Dieter Rams has created principles for a good design. refer to this page. As per Rams, these are principles of a good design is: innovative, makes product useful, aesthetic, makes a product understandable, unobtrusive, honest, long lasting, thorough down to last detail, environmentally friendly, and minimal.

How would you redesign a product?

To redesign a product, find out the pain points, as-is, and to-be scenario. Start documenting the as-is situation and to-be situation. Do not take anything for granted. Understand the pain points in the current product and the needs to revamp it to a new product. After understand the details, plan for a to-be scenario and its roadmap.

What is one improvement you would implement for our product in the next 6 months?

This depends on the product’s situation. If I am a new join, I’d first spend time in learning details about the product. If there is any feature that I found missing or good to be added, I’d like to request for the assessment of it. If I am already in the team, I’d like to assess the situation as Perth roadmap of the product, to decide what should be added in the next six months.

What is a major challenge our company will face in the next 12-24 months?

yet to answer it

How would you describe our product to someone?

I will begin with a problem that someone can related to the product. Then, I will describe how the product solves the problem.

Suggest a new feature for Amazon. What metrics would you use to measure its success?

I will suggest adding a book library feature to Amazon. It would be different than kindle as it would not be for audio only. To measure the success, I will prepare a roadmap of a launch model and a revenue model. I will track key metrics about revenue /profit tracking. For example, how many users are members, how many members are expected for the profitable model, and related metrics. I will also ensure we track the quality, uptime, and other similar metrics. Some key metrics to measure should be: daily active users, monthly active users, traffic, bounce rate, and Customer Satisfaction (CSAT) score.

TECHNICAL QUESTIONS:

Our engineering teams are pretty used to employing x methodologies. What is your opinion of them? Have you used them in the past?

I am familiar with agile, waterfall, and kanban methodologies. Depending on the situation, these all methodologies make sense. For example, for any operational continuous kind of an activity, using kanban would make sense. For the rapid releases, agile methodologies will be a good solution. If we know the roadmap of a larger product needs more time to build, waterfall methodology may be used.

What is the importance of engineers and technical teams as stakeholders? How do you integrate them into the overall product vision?

Engineering team is an integral part of the product vision. I prefer engaging them at the time of ideation. Sometimes, engineering team may have a great insight of a feature’s implementation and the alternate solutions to it. If there is a plan to build a product, it’s not possible to come up with a roadmap without involving engineering into it. So, engineering stakeholders are the integral part of the product vision.

PRODUCT MANAGEMENT QUESTIONS

What aspects of Product Management do you find the most exciting?

The most exciting part to me is convincing stakeholders towards a common goal. There are many cross-functional stakeholder teams like business, engineering, design, project management, security, compliance, and other teams. To plan and agree to deliver a product with a common goal to serve the customers is exciting and everyone generally is motivated to meet the needs of the customers.

Tell me about a time when you had to build or motivate a team.

There was a situation when I had build a cost-effective and a highly available team at offshore. To build the team at offshore, I inquired the options at multiple countries. It took time to figure out the right place and a right vendor. After that, the next challenge was to train the team on the expected deliverables. It took time to build the team, train the team, and helping team to perform per KPIs. At the end, we built a highly available and a cost-effective team at offshore.

What do you think a day to day would be like for a Product Manager?

Depending on the stage of the product roadmap, there would be different activities. On a daily basis, I typically start my day by monitoring metrics of the customers activities, driving the product roadmap, and strategy discussions for any upcoming changes.

How do you think Product Managers interact with engineers?

I have noticed that Product Managers and engineers discuss the features, changes, issues on a functionality level. A common interaction includes discussions about the priorities of changes, level of efforts on the changes, and clarifying requirements, as needed. I generally have noticed a deep respect between a product manager and a team of engineers.

How would you explain Product Management to a 6-year-old?

I’d describe the process of publishing a book. I’d say image I am ensuring a book is published that kids would like. I’d explain the process of publishing a book, starting from ideation, planned steps (like writing, taking pictures of the book, book editing, printing the book, pricing the book, selling the book, and delivering the book from store to the kid’s hand).

What aspects of product management do you find the least interesting?

I like the activities that are well planned. Working on left over low priority changes are least interesting to me. To manage these left over low priority changes well, I like releasing these in a planned release, instead of an adhoc plan.

Tell me about your role on your team, who else you work with, and how you work with them.

My role in the team is to manage the existing infrastructure of business applications/products. I work with business partners, legal, compliance, security, engineering, design, production support, capital planning teams, data analysts, and other related teams.

Tell me about how you interact with customers/users?

Reference:

Interview questions from https://productschool.com/blog/product-management-2/the-ultimate-list-product-manager-interview-questions/

https://www.altexsoft.com/blog/business/15-key-product-management-metrics-and-kpis/