Hello, Startup - Book Review
Tags: startup, product, programming, people
Published: 2021-04-21 14:47:00

# Overview 

[Hello, startup](https://www.hello-startup.net) is a book that will teach you from a technical perspective: how to build and design products, select your tech stack and coding practices, and nurture teams and culture in a startup environment.

# Key Ideas
- Startups are about people
- Speed wins
- Great companies are the result of evolution

# Notes

## Part 1: Products

### 1.Why Startups

A Startup is an organization with the following characteristics:
1. **Product**: Technology
2. **Environment**: Extremely uncertain
3. **Goal**: Massive growth
4. **Mode of operation**: Search

Why you should work in a startup: the most important drive for me is **more fun**, you get more autonomy, ownership, and a lot of new challenges, you are out of your comfort zone almost all the time, and this is where all the magic happens!

### 2.Startup ideas

The best ideas are a remix, if you want to create something big, you need to copy -> transform -> combine.

It's important to read and practice a lot and get curious, all the **knowledge is compound**, the more you get in the early stages, the better the return.

You need an environment that encourages creativity: the most important characteristic for me is **to have plenty of time**, keep an idea journal, work on the problem, add constraints and let your mind work in the background,  and finally talk to others to receive feedback.

In **validation**: keep in mind that speed wins, you have to test with real users, measure, and iterate. Finally, feasibility: the problem can be solved? the problem can be solved by you?

### 3.Product Design

We as software engineers don't pay enough attention to this kind of detail, but the product is what the users see, and may be the entry point for all good stuff behind. 

The most important thing in design is the **Copywriting** and simplicity. but you have to combine various elements to get an amazing interface, like, layout, typography, contrast, repetition, and colors. 

Finally and not less important you should design for **personas** -imagine the real users-.

Simplicity and Emotional design are also too important, your software as a person has to be considerate, responsive, and forgiving.

#### MVP

The key idea is to make small experiments and iterate or pivot

1. Identify your riskiest, the most central assumption
2. Phrase the assumption as a testable hypothesis 
3. Build an experiment (MVP) that tests your hypothesis
4. Analyze the results

### 4.Data and Distribution

Metrics to track:

- **Acquisition**: how users find your product
- **Activation**: how many users engage with your product 
- **Retention**: how many users use the product again
- **Referral**: existing users of your product helping you acquire new users
- **Revenue**: how much money you’re making and what channels it’s coming through
- **The magic number**: some metric that, when the user crosses it, they have an “a-ha” moment and finally “get” the product.

## Part 2: Technologies

### 5.Picking a Tech Stack

The single and most important piece of advice is: **Go with what you and your team know**. First of all, you need to test the hypothesis, and then you can change and evolve the stack.

You should choose:
- Programming Language: Community, Productivity, performance
- Database: NoSQL, SQL
- Server-side framework: Testing, Security, Maturity

In the early stages, I prefer languages like Python to prototype, remember *speed wins*.

### 6.Clean code

As a programmer, you spend more time reading code than writing. I  love the book [Clean Code](https://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882) and the most important takeaways are revealing intent and keeping your code simple. To have a simple code you have to remove duplication, have tests, and focus on good naming.

**Naming** is for me one of the trickiest parts of software development, you have to name everything, repositories, variables, values, components, and queues, if you don't pay attention to this, you can increase the accidental complexity.

Another important practice in software development is -DRY- **Don't Repeat Yourself**. I have a rule of three to generate an abstraction.

Functional programming languages are more expressive.[Clojure](https://clojure.org) in my opinion, has the perfect combination of simplicity and immutability. 

Finally and one of my most loved topics <3, **Refactoring**. Design can and should be improved iteratively. In On Writing Well, William Zinsser wrote that “rewriting is the essence of writing well”, which is almost the same for software development. Book to take a look at this topic [Refactoring](https://martinfowler.com/books/refactoring.html)


### 7.Scalability

To scale your Startup you have to implement these 4 basic practices:

- **Automated tests**: Improve your feedback loop
- **Split up the code**: Think in modules, components, and services, and allow the software team, to tackle specific tasks and amounts of complexity from time to time. 
- **Code reviews**: Implement Pair programming practices, static analysis
- **Documentation**: You are what you document, is important to have documentation to ramp up new hires and evaluate the design, writing is a good form of thinking.

**Performance** is an iterative two-step process:
- Measure
- Optimize

### 8.Software Delivery

I like the **Done is Delivered**, one of the most important things in this industry, and all the DevOps revolution, have one premise in mind, ship the product to the users, to accomplish this goal is important to **build, deploy and monitor** effectively.

- **Infrastructure as Code**: [Terraform Up & Running](https://www.amazon.com/Terraform-Running-Writing-Infrastructure-Code/dp/1491977086) from the same author. 
- **Build tools**: automate the compilation and common tasks
- **Trunk-based development**: avoid long-lived branches
- **Monitoring**: Logging, Traces, Metrics.
- **Containers**: Immutable components
- **Rollback capabilities**: Backward compatibility, Blue-Green deployment
- **Cloud computing**: Agility, Scalability, Cost-Saving, Globally in minutes

If you make the right decisions, you can implement Continuous Delivery, **deployment and release should be a business decision, not a technical one**.

## Part 3: Teams

### 9.Startup Culture

Culture beats strategy, remember that Startups are about people. People's actions based on beliefs, assumptions, and principles constitute your culture, with great people you can fix a product, generate new ideas, plans, or even other products.

**Mission**: Articulate your purpose, start with the Why!

The organization design could be either flat or hierarchical, I prefer **autonomy, mastery, and purpose** over control and bureaucracy. 

Another important topics are whether you can have a remote company or offices, I prefer the remote one because it frees you from the commute and gives people: **time**, time to think, to read, work, make exercise or one of the most human traits, family and quality time. But it comes with a cost, you need to improve asynchronous communication and be aware of the country's regulations. 

### 10.Getting a Job at a Startup

Find industries that you are **interested** in, technologies that you are **passionate** about, the role that you want, and the business model that interests you the most like SaaS.

Look for a good **salary and benefits** [How to negotiate your salary -Spanish-](https://open.spotify.com/episode/2p7XFajeGIYMUvsBAogw1s)

The most important thing here is, to use your network, try to work with smart people, and be aware of the risk and benefits of Startup stocks, it can be life-changing.

### 11.Hiring for your Startup

One of the most important things in a Startup is the co-Founders, try to join forces with **one or two co-workers**, friends that fill your weakness, for example, I really love cloud computing and programming, so I probably need people with more emphasis on design or products. 

Try to find 10x Developers, the **early hires are the most important ones**, the kind of people that prioritize high leverage activities, automation, good estimation skills, etc. they become the role model of your organization. Look for smart and get things done people.

Find people with **good communication skills**, programming is a social activity, you need to share ideas, and scale with practices and ideas, not only people.

**Referrals** are good candidates because it gives you more information about the performance, and the odds of turnover are minor compared with people that you find on LinkedIn or other hob platforms.  

### 12.Learning

Is an essential skill in the era of information, you have to choose your skills wisely, dedicate time to learning, and make learning a part of your job.

to prioritize what topics to study I find the [Technology Radar](https://www.thoughtworks.com/radar) amazing. It keeps me humble and hungry.

To get a better result in your Study you have to:
- **Study**
- **Build**
- **Share**

Share is what motivates me to write my notes in [DEV.to](https://dev.to) about this amazing book. I find this book and almost all [Yevgeniy](https://www.ybrikman.com) blog posts insightful with a lot of good ideas and takeaways. Now I can appreciate design, metrics, and culture from another perspective.

Lastly, Reading books is part of the process to get better when you are a *maker*, like almost all Software Developers, writing and taking notes helps you to organize your thoughts.

# Conclusion

Hello, Startup is a book full of good topics, that encouraged me to learn more about design, teams, and products. Most chapters have nice quotes from famous developers and entrepreneurs. In summary, **I strongly recommend reading this book to anyone that works in a Startup or thinking about creating one like me**.