Academy Program: Week 4
Welcome to the 4th week of my path in the program Academy at Encora. I’m excited about the things I will share with you this week, without further due let’s begin.
Who is Richard Feynman?
This might be an unnecessary question, but I’m going to introduce this historic character so we can understand the context.
Feynman was a very interesting man, winner of a novel prize, and well known for his contributions to the quantum electro-dynamics field, physicist, and inventor. Feynman was also known for being one of the great explainers, reducing really complex problems, to be understood by almost anyone.
He made significant contributions to quantum computing, nanotechnology, and particle physics. Personally, I found it interesting that he was actually an extrovert, he had math as a hobby, and he was tenacious and had an endless curiosity.
Feynman wasn't afraid of failure or making mistakes, he was more concerned with the process of solving the problem, not with the outcome of his experiments. I found this attitude fascinating if more people thought this way, humanity would be able to make things different and definitely improve the lives of others. I’m very intrigued about what actually motivated Richard Feynman to push himself to share with others his knowledge and also what pushed him to explore the secrets of the world, beyond what others have been doing.
In fact, he believed that understanding the world was important to being a person, not just a scientist. Compare computational results to nature, and compare that it agrees is a fundamental part of the scientific method as Feynman stated. Feynman diagrams, pipelining, physics of computation, the limits of computation, were some of the contributions he handed to us to create a brighter future.
So, how would you change the way we think from the root? Well, I like to say: “Be the change you want to see in the world”, this begins with changing and improving yourself so you can help others do the same. High performance, how does it happen?
The way we think about success radically shapes the behaviors that we deploy in order to achieve success, talent isn’t irrelevant; talent is a real phenomenon but in a complex world, it isn’t enough. The growth mindset means to guide your intellectual and creative energy towards learning and not self-justification. Liberate your talent, don’t be afraid of creating change.
Start realizing you haven't got all the answers, start doing experiments and looking for data, be curious. Liberate you to do questions and learn.
What about computing?
How can computing be used for human purposes? I think there is still a lot of things to discover behind computers, and we are just starting this journey. What has allowed us to progress as civilization has been technology, it has already taken us far, and it seems there is so much more to come with quantum computing. This is why computation seems to be, the defining idea of our future.
Programming has allowed us to control computers, and use them as tools to solve the problems that we face. Through the years, we have discovered that every single part of what forms the world and its surroundings carries bits of information, from using electrical pulses to light pulses. It is incredible how from studying more about the universe we can keep improving technology and its capacities, and I have a lot of curiosity about what will we be able to discover once we get to the point where quantum computation is possible. Creating quantum computers is a way of understanding what is happening in the universe at its most microscopic and fundamental scales.
The bits of information of quantum computers called qubits would create an impact in all fields, by making it possible to do different computations in parallel through the superposition property and by taking advantage of the entanglement property, where if two objects are quantum mechanically entangled, they are still strongly related to each other even at large distances. Therefore, another example is that in the case of machine learning quantum computers would be able to work with larger amounts of data at unimaginable velocities due to their properties.
The problem? We still need some time to upgrade our technology to finally being able to solve the optimization problems that quantum mechanics implies.
Pretotyping vs prototyping
Have you heard about the law of failure? Well, according to data around 95 % of mobile apps don't make money and 4/5 startups lose investor money.
How can we do something about it? “Make sure you're building the right it before you build it right”.
Pretotyping is about trying a lot of ideas, translated into fast failures, increasing your probabilities to find the idea to make you succeed.
The pretotyping manifesto goes like this:
- Innovators beat ideas.
- Pretotypes beat productypes:
Pretotypes: Take hours, days. Asks would we use it? working pretotype.
Prototypes: Days, weeks. Asks can we build it? working prototype.
- Data beats opinions: Test your ideas and gather data.
- Doing beats talking.
- Simple beats complex.
- Now beats later
- Commitment beats committees.
Some good practices to follow when putting this into practice:
Papertyping: Before spending too much time programming, put in a piece of paper and see if you would actually use your actual idea.
Pretostorming: Pretotyping has a lot to do with gathering data, build a simple version of it, and see if you would actually use it.
How can we pretotype something? Build fake products just to see if people would be interested or not, build a version of it, design fake ads and check if people would actually click on it. Create MVPs (Minimum Viable Product) first. Finally, you can also create something as simple as possible and gather data from it, you could also take what already exists and add something to it.
Conslusion: Vision, Ideas, Opinions + Reality, Prototypes, Data = Innovation.
Testing, testing, and breaking things
Allow me to change the topic and begin to talk about software development practices for testing from some well-known enterprises.
Companies like Google, Netflix, Facebook, and others, have to manage services and requirements for several users, and sometimes classical testing isn't enough to approach their problems to solve them as quickly as possible. Thas why enterprises add more to their tests, giving an example and showing to the world what is actually working and what's not.
I learned about the importance of code review and the fact that it has become mandatory for ensuring quality at Google, code review is done through small incremental changes. These processes are made through two parts: automated analysis and human touch. Code should always be accompanied by tests, especially in projects that are that big where millions of people rely on the quality of the product. It is the best practice for us engineers to begin getting used to execute tests whenever possible, developing our skills to create better tests and better code. It will be always necessary to make tests, but the way of making tests may vary depending on the project.
One important concept to take into consideration is test coverage which refers to how much of the code the tests exercise. This is relevant because we have to test as much ode as possible. In Netflix, and many other places, there is a job called chaos engineer, these roles have the task of breaking things on purpose to see how the systems respond.
These processes mentioned above help improve the reliability of the websites. But it takes more to ensure all of this, for example, Netflix has something called Chaos Monkey, responsible for randomly terminating instances in production to ensure that engineers implement their services to be resilient to instance failures.
Kolton Andrus, a chaos engineer at Netflix recommends adopting the concept of being anti-fragile, which implies not only be resilient but also robust, getting better after changes occur. Anti-fragile does not apply directly to software, but to the teams that create the software, it can be understood as a culture.
According to what Netflix is doing, it can be good to know how they mainly work tests:
- Simian Army: Inject failures into the production environment to see how it reacts, instead of simulating in a test environment.
- Running code coverage in production
- Canary Army: A way of verifying new features and changes in production, push changes to a small number of instances.
This is telling us that, we have to come with new ideas when it comes to testing software, not only using the traditional techniques but also all the tools that have been proved to be effective.
The culture of testing has something that test engineers have been trying to promote among software engineers. The complexity of tests and the tools engineers share can sometimes prevent people from using those tools. That's why it is necessary to cooperate in a form of creating these practices so these best techniques won't be rejected due to complexity. Diving deep into the topic can help developers understand the relevance and implications tests have in real implementations, it is key to combine efforts in the community so everybody can have access to the best methods of testing.
I would also like to talk about the practice of continuous integration at Google. This implies providing real-time info to build monitored, identifying failures fast, and handling flaky tests (tests that pass and fail over time without making changes in code). Continuous integration also has the purpose of allowing Google to have frequent quick builds (software ready to be given to the customer). Obviously, this comes with costs proportional to the growth of the needed compute resources. Developing safely by pre-submitting changes will also avoid breaking the buildings that teams create.
One last example to show the importance of testing is that Google has 2 specific roles for doing testing:
- Software Engineer in Test: In charge of refactoring code to make it easy to test, focus on development, and develops test automation frameworks.
- Test Engineer: Focus on functional tests, and mainly in user scenario testing, focused on product and user, read and debug product code and write test code.
This gives us the insight that testing implies a good amount of work that may be divided into the last two parts that I described above: test on development and then test in product and focused on the user.
When it comes to automating tests, google has for example in the case of the design of Chrome for iOS, some tools that come in handy for them, these are the use of bots that run in their various channels, giving Google fast feedback on code quality and firsts steps for a measure of quality. They remark the use of manual testing also for tests that can’t be automated, ensure coverage, and tests new features.
Breaking things helps us build immunity
Now that we have this complete insight, I would like to bring to the table a job called Chaos Engineer. Web services as we know, have been increasing their complexity over the years due to their increasing demand and requirements, this makes failure a critical problem being that this increment in complexity also makes failures more difficult to predict.
There is actually where Chaos engineers have a relevant role to play, they focus on trying to identify failures before they happen, not an easy task to do, that's why they have developed a set of principles to help with guidance:
- Create a hypothesis about how a system should behave when something goes wrong.
- Create the smallest possible experiment to test your hypothesis.
- Measure the impact of each stage looking for signs of success or failure.
A Chaos engineer, therefore, benefits customers by improving the functioning of the services, helps businesses to prevent losses of money, and also they contribute to gathering technical knowledge.
Pretotyping example: Tested Ideas
Here I will share with you some examples of pretotyping that I worked with some of my partners. I hope it clarifies more the concepts reviewed above.
In this report, we present three ideas that were tested by using the Pretotyping technique. Pretotyping is about trying a lot of ideas, translated into fast failures, increasing probabilities to find a successful idea. In this case, we began by discussing different ideas as a group and we filtered them through the question: “Would we use it?”.
Finally, when we answered yes to the three ideas we moved one to the next stage, working on the pretotyping. In the next sections, you will be able to see our hypothesis and next if they were correct or not.
Once the ideas were decided, the next thing to do was finding our pretotyping, in our case, we decided it was a good idea to create fake ads about the ideas and gather data about how many people would voluntarily click on the ad.
Here are the ads we used:
Click here if you would like to track the price and get recommendations of courses on any platform (e. g. Coursera, edx, udemy, udacity…) in a single place without having to visit other platforms separately and be aware of the discounts in your courses: https://bit.ly/3xEvXmn
Gastracker — Gas price tracker
Are you interested to know which fuel station in your city has the better prices so you can save some money?
Click here if you’d like to know the prices of your local fuel stations in real-time: https://bit.ly/2RibyCU
Knowsher — Knowledge sharer
Would you like to use an app in which you can search for abilities that you want to learn in exchange for teaching something else? You don’t need to pay to learn, just to teach something else in return. In case you want it you can also pay a fee so you get access to it without having to teach something back: https://bit.ly/3e5jb8Y
IDEA 1: Track and recommend course prices Courselet
Track the price and receive recommendations of courses in any platform (Coursera, edX, Udacity, Udemy…) everything in just one place without needing to visit each platform independently, follow discounts, and more.
Self-paced online learning and education have become popular in the last couple of years, and with the current problems due to the pandemic, people are interested in finding the best cost-benefit courses of all platforms in one single place. Everything from the comfort of their home.
To find out what people think about this idea we put to the test fake ads through bitly URLs with a specific description of the service. This way we had the opportunity to discover if people would click on the link to find out more about the service. This is how we would have a first approximation about how feasible was our idea.
We share this link with a specific group of people so we can know how many people of the total number of integrants of the group click on the fake ad.
We selected a group of people where we thought would be interested in the ideas. We share the link just as if it was a normal ad. 73% of the total number of people click on the link we share.
We can determine that people are interested in finding the best cost-benefit courses of all platforms in one single place. We cannot say that people are going to consume the product yet, but at least we can say they have an interest in it.
From the data, we can determine that in fact, people are interested in finding their online courses in just one place and track prices to get discounts. Nevertheless, we aren’t sure yet that people would consistently consume our product. That’s why we should proceed with a new approach to gather more data, we could for example create a very simple prototype and see if we would use it. Then maybe another form could be to select a new and bigger group of people and allow them to test a version of the service.
IDEA 2: Gas price tracker app
This app will track the prices of different gas stations in the city, then give you the best recommendation according to the distance and price. This app will help you save money the next time that you put gas in your car.
The prices of the gas differ from each gas station. Searching for the best price of the gas is nowadays an interest for the people.
We shared a bitly link to find out if the idea was interesting and useful for the people. If the persons take their time to click on the link, we could know that they are interested in acquiring the service. This was our idea to test and confirm if our idea has true potential for the current market.
The link with a brief description of the service was shared with a specific group of young people, so we could know what percentage of the people were interested in clicking on it.
We select a group of target people who could be interested in our app related to the prices of the gas stations. 73% of persons of the groups showed interest in the application, clicking on the link.
According to this result, we can determine that people are interested in getting lower gas prices. We don’t know the true potential of our product, but at least the premise is enough to get the genuine interest of the people.
With this data, we know that the idea is strong enough to keep going. The next step is to prove which is the right interface and user experience to keep the attention of the people. Creating a low-budget prototype and doing the same type of experiment will help us to get the right approach to the product.
IDEA 3: Knowledge exchange app
Learning is something that all people constantly seek. To be better people and better professionals, we must be constantly learning. To get a better job we must learn new things.
During the Covid-19 pandemic, many people have been affected. Many have lost their jobs, and for those who did not have it, it has been much more difficult to find one.
The best way to keep a job, get one, or even get a better one is to constantly gain knowledge. Learning is the only thing that can assure us that at some point we can succeed.
The problem is that acquiring knowledge is not usually something accessible to all people, much less during a global crisis such as that caused by Covid-19. That is why many people during this crisis, even when they were willing to dedicate time to learn, could not do so because they did not have the way to access quality education.
But it is also true that all people have something they can teach. All people have knowledge that they can share. That is why an application that allows the exchange of knowledge could be very helpful for those people who want to learn something new and do not have the resources to do so.
The most important resources we have are our time and our knowledge, that is why we can share them with someone else, and in exchange for that other people will be able to share their knowledge and time with us.
To test whether people were interested in using an application in which they could exchange knowledge, we decided to share a link with the following description in several groups:
“Would you like to be able to use an app in which you can look for skills that you want to learn in exchange for you teaching others? You do not need to pay to learn just to teach something to others in return. If you want, you can pay to have access without needing to teach anything”.
We think that if a person clicked on the link after reading the description, they did so because they were interested in using the application or at least knowing a little more about it.
As with the rest of our experiments we sent a link to some groups with the premise of having access to the app, as what would be an example of it. The link we used was a tool that let us verify how many people clicked on it after some time. In this case, we were able to verify in a matter of hours the interest people had in our app. While our validation of the data can’t tell how it would perform in a bigger population, it gives us fast and reliable information and feedback whether people are interested in the product as to click right away in hopes of finding the mentioned app, and this simple and fast process complies with the mindset of pretotyping, getting fast and concise feedback about your product.
We verified that at least 73% of the people we worked with for this study were interested in the idea of the knowledge exchange app since that is the percentage that clicked on the link. Of course, we could complement this information or increase the resources used to verify how the app could be tested in a more public way, though in this case there were some barriers as the pandemic which unfortunately stops us from being able to do an in-person study. Still, certain tests could be applied to see how people interacted with the app, but of course, there would need to be an implementation of it already and on this occasion, we just wanted to see how interesting it would be for a certain public, so we could fail or succeed quickly, to move onto the next step.
This is everything I have to tell and share with you in today’s post, thank you once again for reading, hope you learned a lot!