Rationale
Tech Study
I have this repository since 2017. I always had this collections of resources to give “tips” and “directions” to people I was mentoring/coaching. This book it’s a Recipies book. It’s has a colection of resources to help people to get better. It’s a cookbook of self-improvement for tech professionals.
Tech Support Guidance and tips - Since 2017. Online Book

Disclaimer
I have had this repository since 2017. There are no proprietary materials from past or future employers. I have been doing coaching/mentorship with tech professionals for decades. Here you will find links to coding problems, books, tech, what to learn, and my take on several things, alongside links to my books and my blogs.
About the Author
👨💻 Diego Pacheco Bio Diego Pacheco is a seasoned, experienced 🇧🇷 Brazilian software architect, author, speaker, technology mentor, and DevOps practitioner with more than 20 years of solid experience. I have been building teams and mentoring people for more than a decade, teaching soft skills and technology daily. Selling projects, hiring, building solutions, running coding dojos, long retrospectives, weekly 1:1s, design sessions, code reviews, and my favorite debate club: architects community of practices and development groups for more than a decade. Living, breathing, and practicing real Agile since 2005, coaching teams, and helping many companies discover better ways to work using Lean and Kanban, Agile principles, and methods like XP and DTA/TTA. I have led complex architecture teams and engineering teams at scale guided by SOA principles, using a variety of open-source languages like Java, Scala, Rust, Go, Python, Groovy, JavaScript, and TypeScript, cloud providers like AWS Cloud and Google GCP, amazing solutions like Akka, ActiveMQ, Netty, Tomcat, and Gatling, NoSQL databases like Cassandra, Redis, Elasticache Redis, Elasticsearch, Opensearch, RabbitMQ, libraries like Spring, Hibernate, and Spring Boot, and also the NetflixOSS Stack: Simian Army, RxJava, Karyon, Dynomite, Eureka, and Ribbon. I have implemented complex security solutions at scale using AWS KMS, S3, Containers (ECS and EKS), Terraform, and Jenkins. Over a decade of experience as a consultant, coding, designing, and training people at big customers in Brazil, London, Barcelona, India, and the USA (Silicon Valley and Midwest). I have a passion for functional programming and distributed systems, NoSQL Databases, a mindset for Observability, and always learning new programming languages.
🌱Currently: Working as a principal Software Architect with AWS public cloud, Kubernetes/EKS, performing complex cloud migrations, library migrations, server and persistence migrations, and security at scale with multi-level envelope encryption solutions using KMS and S3. While still hiring, teaching, mentoring, and growing engineers and architects. During my free time, I love playing with my daughter, playing guitar, gaming, coding POCs, and blogging. Active blogger at http://diego-pacheco.blogspot.com.br/
💻 Core skills and expertise: Architecture Design and architecture coding for highly scalable systems Delivering distributed systems using SOA and Microservices principles, tools, and techniques Driving and executing complex cloud migrations, library and server migrations at scale Performance tuning, troubleshooting & DevOps engineering Functional Programming and Scala Technology Mentor, agile coach & leader for architecture and engineering teams Consultant on development practices with XP / Kanban Hire, develop, retain, and truly grow talent at scale
🌐 Resources
📝 Tiny Essays:
🥇 Tiny Side Projects
- 🧝🏾♂️ Tupi lang: programming language written in Java 23
- 🥫 Jello: vanilla JS, web-apis, trello-like
- 📑 Zim: vim-like written in Zig 0.13
- 💻 Gorminator: simple and dumb Linux terminal written in Go
- 😸 kit: Git-like written in Kotlin
- 🦀 Shrust: Compress/Decompress tool written in Rust
- 🕵🏽 Smith: It’s a security Agent Written with Scala 3.x
- 📟 ZOS: A very tiny OS written in Zig
- 🎮 Tiny Games: Collection of JS games
Diego Pacheco’s Books
Here is a curated list of books that will help you become a better version of you.
- The Art of Sense: A Philosophy of Modern AI
- Diego Pacheco’s Software Architecture Library
- Principles of Software Architecture Modernization
- Continuous Modernization
- Tech Resources
- Building Applications with Scala
Want to help me?
Consider buying one of my payed booked:
- Principles of Software Architecture Modernization
- Continuous Modernization
- Building Applications with Scala
I also have FREE books:
- The Art of Sense: A Philosophy of Modern AI
- Diego Pacheco’s Software Architecture Library
- Tech Resources
How to use this gist?
This gist contains lists of resources about JS, Mobile, Architecture/DevOps and Cloud Native. Each gist has a list
of technologies that you can do POC and CODE practice, also with a list of useful books and links.
Method
- Create a github repository called sandbox-
- Code every week some POC or feature impl of each technology on the lsit.
- You should be reading one book at the time. You need make notes from your readings.
- Reading 10 pages per week is progress, you should push your self to read some pages everyweek.
- After reading and coding for some time about a specific subject lets say Automation/Ansible consider doing a LT.
- You need to understand what you are coding, ask for code review.
- You need make sure you got concepts right, validate with more experienced engineers.
- Progress is best tracked in Weekly Coaching Sessions.
- Balance is always welcome. You might use the Breath/Deepth method where 90% time invested on main topic and 10% on random.
- No matter your specific field like JS or CN you should read all this book: Agile Dev Resources
JS
Mobile
Cloud Native
Software Architecture | DevOps Engineering
GCP
POC Ideas
- Get all language/framework/lib features and do some simple code.
- Most of technical books have sample codes and excercis you can use for POC.
- Look for a problem in your project or company or something you could improve.
- 99 Problems
- Dojo Puzzle
- Create a simple version(smaller scale) of:
-
-
-
- Netflix
-
- Flickr
-
- Slack
-
- GitHub
Cheers,
Diego Pacheco
How greatness looks like?
Mindsets
- Hacker Mindset: Always want to hack, to do the impossible, to raise the bar, why not? Do Prs, change frameworks, create frameworks.
- Growth Mindset: Improve the code, improve the product, growths with soft and hard skills.
- Extreme Ownership: Full empowerment, all is it ours, even when no ones says anything. Never “Fires and forget”, always on top of every-single thing.
- Go Deep: Read source code of everything, debug, troubleshoot, profile, test. Pay attention in warnings.
- Curiosity to learn, ask questions, always google new terms, always read papers, always experiment with POCs.
- Relentless: Never give up, always find a way, always modernize, always improve.
Skills
- Delivers high quality code with frequent PRs
- Analysis and design before jumping to conclusions, tradeoffs always in mind
- Engineering: Tested, high quality, maintainable code and performant code
- Testing: All forms of testing, high coverage, error, negative and chaos scenatios, things about failure and non-obvious tests like queeus, batchs, webhooks, etc.
- Be able to run Green Migrations: Smooth, with observability, no critical bugs, no surprises.
- Drive Amazing Observability with great error handling: Logs, metrics, alerts, dashboards, etc. Errors are not normal, they are exceptions.
Never
- Gives excuses: Focus in improving, not in explaining.
- Blames others: Do what can control, forget others.
- Takes feedback personal, you are not your code, tomorrow you will be better than today.
- Delay, always deliver, now is always the best time to start
- Be afraid of change, embrace it, always, embrace the chaos, the unknown, the new.
Daily
- Read books
- Read papers
- Read code
- Write code
- Write POCs
- Write Tests
Diego Pacheco’s Way of Working
This is not for you IF
- You have no comitmment
- You will not invest the time to read, do POCs, homeworks
- You do not have maturity to recive direct feedback in public
- You dont have english or is not willing to learn in 3 months
- You don’t want to change, you dont belive in your coaches/mentors
- Want complain for sake of complaing, not solution oriented
Do not expect to be easy
- I promisse ZERO COMFORT ZONE.
- You will need to lern a lot and deliver a lot
- High performance teams are not for everyone, they have high pressure.
- You will need to be very proactive, take ownership and be autonomous, organized, disciplined on top of things.
- Feedback will be constant and direct, you will need to be mature to handle it.
- You will need to be very good on comunication, fast response on slack, calls, emails.
- We expect the best solutions, the best code, the best design, best tests, best automation, nothing but the best.
Culture
High performant team. Lot’s of amazing people, high demanding, high expectations, high standards. Manifested as:
- Callout all the time, no matter how many people on the call/room
- Open, Honest and constant feedback
- Expectation on constant deliver: PRs Weekly
- Expectation on constant learning: daily/weekly reading, POCs and Homeworks
- Demand of great comunication on slack, instant response
- High level of autonomy and Maturity
- Extreme ownership
At the same time you can count on:
- A lot of learning
- A lot of support/help
- NO delay to get feedback and course correction
- As long as you are delivering and listening to feedback, we will have patience
Important Reasurance
- High performance sport teams like NBA, European Football leagues, they have families and lives.
- You will learn how to operate in a another level.
- IF the best team motivate you, want chanlenges, you will grow.
- Feel empowered to give push backs.
- We care!
Mandatory Readings
- Values and Skills
- Training like Pros
- Shallow vs Deep Mindset
- Exceptations
- The Cost of Silence
- Ignoring Culture
- Doing better on AI Era
- The Issue with Feedbacks
- Quality Needs to be Managed
- Lean & Agile Videos
Diego Pacheco’s QA Manifesto
Summary
1. QA is a engineer
2. Automation is a MUST
3. Pass rate matters the most
4. Test Coverage needs to increase every release
5. Do not ignore errors, Errors are not normal
6. Leverage Open Source
7. Observability is a MUST
8. QA Read Code and Debug Code
9. QA Leverage SOA
10. QA is good writter
1. QA is a engineer
There is no QA without engineering. QAs needs to learn algorithims, data structures, porper engineering. QA MUST do POCs, read books, debug code, read code, write code, and always improve everyday.
2. Automation is a MUST
All tests MUST be automated. Manual tests should not be performed to validate and sign releases. IF manual tests are being done, we have a big unaceptable performance problem.
3. Pass rate matters the most
The tests need to be passing all times. No test should be ignored or commented out. We either FIX the tests or we DELETE them.
4. Test Coverage needs to increase every release
All releases, we need to add more coverage. QA must add testing diversitry(unit tests, integration tests, E2E, Chaos Testing, Performance Testing, Security Testing, Snapsohot Testing, PropertyBased Testing, Fuzzy, Mutation Tests, smoke and Stress Testing. etc…). Releases should be tracked in a excel to managed how many automation tests we have, the number should be growing.
5. Do not ignore errors, Errors are not normal
In a centralized log solution like ELK, Splunk, SumoLogic, etc… Errors and Exceptions MUST be monitored. Do not use not cluases to ignore errors, total number of errors/exceptions must be reducing every single release. The number of Exceptions and Errors must be ZERO.
6. Leverage Open Source
QA must use open source, it should be away from proprietary/closed source solutions.QA MUST use the same open source tools as engineers, for instance JUnit for testing in Java.
7. Observability is a MUST
QA also knows how things are working in production. QA need to have proper dashboards, help engineers to intrument the systems. QA does pair programing with engineers, help improve metrics and understanding of the system in production. We should use metrics not only logs.
8. QA Read Code and Debug Code
QA is a hacker, reads and understand what the code does. QA does not ping engineers with “Quick Call”. QA demands more quality helping others to setup high bar standards and make sure code is testable. QA default strategy is push for Testing Interfaces(creates testing endpoints in all services).
9. QA Leverage SOA
QA works with engineers to have proper contract definitions, up to front, so test can happen in parallel. QA works with engineers to have proper feature flags and leverage CI/CD. QA Does not deploy his branches on shared env. QA demands engineers have isolation, and helps engineers to create proper tests with high levels of isolation.
10. QA is good writter
QA writes detailed bug reports, with lots of context(screen shoots, centralized log links, how to proper reproduce bugs). QA does not blame engineers, QA write proper and detailed wiki documentation, and explain how things works and create diagrams with images, steps and explanations. QA focus on automation with documentation.
How to ask better questions
Asking questions matter a lot. However asking good questions it’s a skill which leads to discovery and imporvement and utimately to learning. However there good and bad questions. Not all questions are good. You need to be more concious about your comunications.
Also your question say a lot about yourself. It show how much you know and how much you care or how much you want to know. Not asking questions is worst than asking bad questions.
IF you have homework todo or a task in your name, it’s expected that your are responsable for doing that. Do not transfer that resposability to others.
Bad Questions
IF you just “ask a question” could be read as:
- Lack of respect for the time and effort of others
- Lack of effort on your part to solve the problem yourself
- Lack of clarity about what you want to know
When asking questions - DO NOT:
- Give a link to a paper and say read for me and explain
- Give a link to a video and say watch and explain
- Give a link to a book and say read and explain
- Give a ChatGPT or Similar AI output and ask someone to read and tell what they tink (this is a huge red flag and disrespectful)
- Transfer your responsability to others
Bad questions are “signals” that you know very little about the topic.
Before asking a question
- Use google and search for what companies are doing
- Go see multiple videos in youtube
- Read papers
- Read parts of books
- Try to do something by yourself
Asking questions
- Be specific and clear about what you want to know
- Provide context and background information
- Show your own efforts and what you have tried
Anatomy of a good question
A good question looks like code review IMHO. If you stop to think about it would be crazy if someone ask you to review code and them you click on the PR and there is nothing there, no code, nothing. So there is nothing for you to review.
I need to say the obious when, we review code, someone must do the code in the first place and put in front of you. When we do Architecture/Design is the same deal. In order to review some architecture or design you need a wikipage with some text and diagrams so you can review it.
Pretty sure you understand that and it’s obvious. However when we are considering questions that does not happen. People ask questions without understandign anything about the subject, that is the same as asking for a code review without writting any code.
Go do some research, read some papers, watch some videos, read some books, try to do something by yourself. Them show all you did and propose something, for instance if:
- It’s a presentation - show some slides and ask for review
- It’s a design - write down a wikipage with some diagrams and ask for review
- It’s a paper - write down a draft and ask for review
- It’s a project - write down a proposal and ask for review
- It’s a task - write down what you did and what you want to do and ask for review
- It’s a question - write down what you know and what you want to know and ask for review
Better questions look like code review.
Getting Better
- Always spend time doing research before asking questions.
- Write down what you know and what you want to know.
- Propose something based on your research.
- The questions could also be reviewed and classified if they are good or bad. For sake of improvement.
- Think about corner cases / edge cases as as way to generate better questions.
- Repeat and Pratice, to get better.
Simple Engineering Problems
Simple Engineering Problems
Rationale
- A list of engineering problems that are worth solving.
- Helps engineers to understand what they are doing.
- Helps to build confidence.
- Helps to build up coding skills.
- Helps to build up debugging skills.
How to use
- Can be done with any language.
- Do it 2h per day, every day no matter what. Could be any time but do it.
- It needs to be 2h per day, this part is very important, needs to be daily.
- You need to understand the code line by line.
- The idea is to always do 4 simple things:
- Do table test (“In portuguese teste de mesa”) where you similate the code execution in text block file.
- Debug the code to understand.
- Ask questions
- Make sure you understand every single line of the code.
- Each problem should be done 10 times before moving to the next one.
- It’s okay yo copy on the first time
- But in all other times it needs to be done without looking the solution
- If you get stuck you can look the solution but, do not do that more than 3 times.
- When you deliver the solution you should have something like this on the file system:
- src/DPK01_impl_1.js
- src/DPK01_impl_2.js
- src/DPK01_impl_3.js
- src/DPK01_impl_4.js
- src/DPK01_impl_5.js
- src/DPK01_impl_6.js
- src/DPK01_impl_7.js
- src/DPK01_impl_8.js
- src/DPK01_impl_9.js
- src/DPK01_impl_10.js
- But all files might have the same code?
- sure - if that is the case no problem, what matter is to pratice.
- however you might find better ways of doing it - if you dont - is also fine.
- Any issues? Ask for help.
How should be presented?
- Explain the problem.
- Explain the solution line by line of the code.
- Share the parts that was hard to understand - ask for advice.
- Ask for refactoring tips - how could we make the code better.
- Ask for feedback
Problems
DPK01 Revert String
Create a function that can revert a string.
revert("Hello") -> "olleH"
DPK02 Revert a List
Create a function that can revert a list.
revert([1,2,3,4,5]) -> [5,4,3,2,1]
DPK03 Lookup
Create a function that perform a lookup in a map for a given key you hould have id, name.
lookup(1) -> "John"
Refactor the code so you can lookup for email as well and ge the name and vice versa.
lookup("John") -> "john@john.jhon.com"
lookup("john@john.jhon.com") -> "John"
DPK04 Simple Pattern Matcher
Given the following countries and languages:
Usa -> English
Brazil -> Portuguese
Spain -> Spanish
Italy -> Italian
France -> French
Germany -> German
Create a function that can return the language for a given country. You cannot use a hashmap or dictionary.
pattern_matcher("Usa") -> "English"
Refactor the code, can you do that without using IF statements?
pattern_matcher("Usa") -> "English"
DPK05 Pointers
Considering the following hash map:
power = {
"John": 100,
"Paul": 90,
"George": 80,
"Ringo": 70
}
Create three functions.
- Function one should return the power of a given person.
- Function two should recive 2 names and the with one is the most powerful(should use function one).
- Function three should recive 2 names and update the leaderboard.
Now the thrid function that will update the leaderboard after all the matches. i.e Leaderboard should be:
leaderboard = {
"John": 0,
"Paul": 0,
"George": 0,
"Ringo": 0
}
Every time a play wins, he scores +10 points, if there is a draw, both players score +5 points. IF one player loses, he scores -5 points.
play("John", "Paul") -> "John"
leaderboard -> {
"John": 10,
"Paul": -5,
"George": 0,
"Ringo": 0
}
lets do another round:
play("John", "Ringo") -> "John"
leaderboard -> {
"John": 20,
"Paul": -5,
"George": 0,
"Ringo": -5
}
Now can you refactor your code and do less ifs? Maybe introduce pointers?
DPK06 Tokenizer
Create a function that can tokenize a string based on a token.
tokenize("Hello,World,How,Are,You", ",") -> ["Hello", "World", "How", "Are", "You"]
tokenize("Hello World How Are You", " ") -> ["Hello", "World", "How", "Are", "You"]
tokenize("Hello-World-How-Are-You", "-") -> ["Hello", "World", "How", "Are", "You"]
Can you refactor your code and do that without using any prebuild function like split?
DPK07 Group By
Create a function that can group a list of numbers by a given number.
group_by([1,2,3,4,5,6,7,8,9,10], 3) -> [[1,2,3], [4,5,6], [7,8,9], [10]]
Please make sure the same function works with strings as well.
group_by(["a","b","c","d","e","f","g","h","i","j"], 3) -> [["a","b","c"], ["d","e","f"], ["g","h","i"], ["j"]]
Can you refactor the code and create your own group by function, do not use any prebuild function.
DPK08 Map
Create a function that can map a function execution to each element of a list, return a new list.
map([1,2,3,4,5], (x) => x * 2) -> [2,4,6,8,10]
The map function should recive a collection(list or array) and a function that will be apply to each element of the collection.
Now refactor the code and do not use any prebuild function.
DPK09 Filter
Create a function that can filter a list based on a given condition.
filter([1,2,3,4,5,6,7,8,9,10], (x) => x % 2 == 0) -> [2,4,6,8,10]
The filter function should recive a collection(list or array) and a function that will be apply to each element of the collection.
Now refactor the code and do not use any prebuild function.
DPK10 Reduce
Create a function that can reduce a list to a single value.
reduce([1,2,3,4,5], (acc, x) => acc + x, 0) -> 15
The reduce function should recive a collection(list or array), a function that will be apply to each element of the collection and an initial value.
Now refactor the code and do not use any prebuild function.
DPK11 Replace
Create a function that can replace a given token in a string.
replace("Hello,World,How,Are,You", ",", "-") -> "Hello-World-How-Are-You"
The replace function should recive a string, a token to be replaced and a new token. Refactor the code to not only replace one token but a string that you can recive by parameter.
replace("Hello,World,How,Are,You", ",World,", "-") -> "Hello-How-Are-You"
Now refactor the code and do not use any prebuild function.
DPK12 Sort
Create a function that can sort a list of numbers. The implementation should be a Bubble Sort(good to learn but terrible to use in production).
bubble_sort([5,4,3,2,1]) -> [1,2,3,4,5]
The sort function should recive a collection(list or array) and return a new sorted list.
DPK13 FizzBuzz
Create a function that can return a list of numbers from 1 to 100. For multiples of three return “Fizz” instead of the number and for the multiples of five return “Buzz”. For numbers which are multiples of both three and five return “FizzBuzz”.
fizzbuzz() -> [1,2,"Fizz",4,"Buzz","Fizz",7,8,"Fizz","Buzz",11,"Fizz",13,14,"FizzBuzz",16,17,"Fizz",19,"Buzz","Fizz",22,23,"Fizz","Buzz",26,"Fizz",28,29,"FizzBuzz",31,32,"Fizz",34,"Buzz","Fizz",37,38,"Fizz","Buzz",41,"Fizz",43,44,"FizzBuzz",46,47,"Fizz",49,"Buzz","Fizz",52,53,"Fizz","Buzz",56,"Fizz",58,59,"FizzBuzz",61,62,"Fizz",64,"Buzz","Fizz",67,68,"Fizz","Buzz",71,"Fizz",73,74,"FizzBuzz",76,77,"Fizz",79,"Buzz","Fizz",82,83,"Fizz","Buzz",86,"Fizz",88,89,"FizzBuzz",91,92,"Fizz",94,"Buzz","Fizz",97,98,"Fizz","Buzz"]
Refactor the code to recive by parameter how many numbers you want to generate.
fizzbuzz(10) -> [1,2,"Fizz",4,"Buzz","Fizz",7,8,"Fizz","Buzz"]
DPK14 2D Walk
Create a function that can move a fighter in a 2D grid. The grid should be a 2D array.
grid = [
["Ryu", "E.Honda", "Blanka", "Guile", "Balrog", "Vega"],
["Ken", "Chun Li", "Zangief", "Dhalsim", "Sagat", "M.Bison"]
]
The moves should be:
- up
- down
- left
- right
The function should recive the grid, the initial position of the fighter and a list of moves.
move(grid, [0,0], ["up", "left", "down", "right"])
Every time a player move to a new position, the old position should be empty.
move(grid, [0,0], ["up"]) ->
["", "E.Honda", "Blanka", "Guile", "Balrog", "Vega",
"Ryu", "Chun Li", "Zangief", "Dhalsim", "Sagat", "M.Bison"]
What the function needs to return is a list with the name of all players was beaten, therefore removed from the grid.
move(grid, [0,0], ["up", "left", "down", "right"]) -> ["ken", "M.Bison", "Vega"]
DPK15 OOP with Classes
Create a class that can represent a person. The person should have a name, age and a list of friends.
person = new Person("John", 30)
person.addFriend("Paul")
person.addFriend("George")
person.addFriend("Ringo")
The person should have a method that can return the name of the person and the list of friends.
person.getFriends() -> ["Paul", "George", "Ringo"]
The person should have a method that can return the age.
person.getAge() -> 30
The person should have a method that can return the name of the person.
person.getName() -> "John"
Refactoring time:
- Now could you refactor the code and move the list of friends to a separate class?
- Refactor the code so you dont allow the same friend to be added twice.
- Refactor the code so you can remove a friend from the list.
More Refactoring:
- In one of your classes, could you create a method that tell who is the person with more friends?
- In one of your classes, could you create a method that tell who is the person with less friends?
- In one of your classes, could you create a method that tell who is the person with the oldest friend?
DPK16 Mosquito Game
Create the following classes:
- Exterminator
- Mosquito
- Game
The game should start with 10 mosquitos, 1 exterminator.
The game should have a internal matrix of 100x100.
Every 1s the mosquito should move to a random position.
Every 1s the exterminator should move to a spesific position.
If the mosquito and the exterminator are in the same position, the mosquito should die.
If the mosquito moves 5 times without being killed, it should reproduce if there is a mosquito nearby.
The game should have a method that can return the number of mosquitos killed.
The game should have a method that can return the number of mosquitos alive.
The mosquito can walk in any direction (up, down, left, right, diagonals).
The exterminator can walk in one direction, it should swap the metrixs.
The exterminator can walk from the bottown left corner to the top right corner them from the botton to the top them return on the same route.
The game does not needa UI, you can be print the matrix in the console.
Doing Better in AI Era
Doing better in AI Era
Like it or not… AI is here and is creating disruption. Does not matter how good or bad AI it is, the fact is that is changing people perceptions and behaviors. Some CEOs are already pushing companies to use AI very hard(like Shopify, Microsoft, Google, and X). AI(Gen-AI) is good but there is a some concerning stuff happening, like:
- There is a overal reduction in the number of jobs available (TrueUp job trends).
- There is a posibility that will reduce wages/salaries (Amazon offshoring playbook).

- Print screen from TrueUp job trends on 2025-JUL-21.

- Print screen from Amazon offshoring playbook on tweet of JUL 6, 2025.
Some of this movements are not enterily to AI credit, for instance, the pandemic(COVID/2019) was a big factor in slowing down the economy and TECH was in a bubble(free money in USA is over). Companies always like to optimize and reduce costs, and people are very exmpensive. So some of this movements have nothing todo with AI but combined we are in a complex situation where things are a bit harder and more uncertain and way more competitive than before.
I’m mostely optimistic about AI and do belive in Jevons paradox. I dont think AI is magic and will replace all engineering but if you suck, if you performance is very poor you are at high risk. So we must be doing better.
Producing Code
Considering Generative AI, producing code(even a lot of it) is nothing now a days. Anyone can produce a lot of code(look tools like Claude Code, OpenAI codex CLI, Gemini CLI, Google Jules, GitHub Copilot, Cursor). So do not think producing code is the most impressive thing. However producing good code still matters, knows proper design, testing, and architecture are very important skills. How do you know what is good code? Think about that! Why I’m talking about this? Because you must change your mind and mindset and delivery, delivery matters the most but just deliverying is not good enought never was and never will be. You must deliver good code, that is maintainable, testable, and scalable.
Throwing AI generated code at someone is like searching something in google, get the first anwser and just present that as your university thesis, how that went in the past? (Pretty bad and pretty wrong thing to do). So you must review more and do more homework.
Review Pressure
Since producing code is trivial and it can be done in large quantities all the presure is on the reviewers. So you must not throw code(or AI generated code) in others without reviwing and understanding it deeply, you must do you homework, meaning:
- Before submiting code to others, review and understand it deeply.
- You must know everything all the time.
- If you are touching the code, you must know.
- If you are presenting something you must know all of it.
- It cannot have a string you don’t understand and dont know how it works - know it all.
- Is there a language feature or token? you must kwnow it.
- There is a text taling about algorithims or some technique like Cache Locality or Greedy Algorithms? You must know it.
- IF you don’t know you:
- Must learn it.
- Must do a POC.
- Must see videos on the web.
- Must read papers and the official documentation.
Be a Killer when the matter is delivery
- Always meet people expectations and deadlines.
- Always do more than people asked of you.
- Always do a lot of tests.
- Always understand everything you are doing.
- Always be proactive and take the lead, ask questions and be on TOP of everything.
- Always research, read papers, and check information, double check, LLM still halucinates.
- Always compare with other solutions, do benchmarks and different implementations.
- Always have great documentation and do great UI/presentations.
- Ask for feedback, often and frequent, are you presenting? do many dry runs.
Aplied Learning
All learning must be applied in day-by-day work otherwise is not useful for you and you are loosing opportunidies to do better and have better performance. Performance always matter and you must think about this, when people talk about your name, what they think?
- A) YES Mr X is a killer, I want him badly.
- B) OH No MR Z sucks, pls I pass dont need him.
Everyboddy is being watched and measured all the time, you track record matters a lot, so keep in mind, what performance do you want associated with your name? The great one or a bad one? Performance is key for future improvements and opportunities, so you must be doing better all the time. You are RESPONSIBLE for your performance, excuses and blaming others will make you not good. Dont look for excuses, look for oportunities to grow and feedfack, there are always opportunitites to do better, so be proactive and look for them.
Continnous Improvement
AI is being trained and improved all the time, so you must be doing the same. You must be improving all the time, you must be learning and applying this learning in your day-by-day work. You must be proactive and look for ways to improve your performance, your code, your design, your architecture, your tests, your documentation, and your presentations.
Why AI is getting better? Because is being measured. Every single new model, they always disaplay benchmarks they beat up. We can learn something from that. You must know your numbers, would know your performance by heart, so tell me?:
- How many PRs you did last month?
- How many Tests you wrote?
- How many bugs you fixed?
- How many features you delivered?
- How many reviews you did?
- How many presentations you did?
- How many meetings you attended?
- How many people you helped?
It’s always a good idea have an EXCEL and track all this things everyday, the better you know your number, easier is for you to beat team.Going DEEP is the only way to improve, if we are not in TOP of things and dont master our GAME we are not doing better, so you must be doing better all the time.
Obeservability is everything. Think about a F1 race, if you dont know how long take to do a lap, you cant beat your team. Several engineers think they are killing it and doing fine but is they ask the right people, mentors, they might realize they are not there. So the important thing is to always ask and align expectations (Expectations), so here is a seconf suggestion for tracking:
- Story ID or link(maybe issue tracking link)
- What date you started?
- What was the estimation from the manager?
- What date you finished?
- Did you beat the estimation or not?
- Notes of what happened and why, did you have any delays or surpises?
Whith that, you can build ownership. Extreme ownership is very much needed. You can ask you self, consider last 10 items, I’m beating the time always? You might be wonder, why to ask a manager estimates(and must be days, story points is useless)? Because people have exceptations and they dont tell you, usually and a EM or director set of exceptations not meet could get you fired.
Engineers always assume they are doing great, but in reality they are not, because they calibration is wrong. So let me give you better calibarion:
- Zero story delivered per week is bad.
- Zero story per sprint is very bad.
- You must deliver all that was addressed to you.
- Push back, when is not clear or when requirements, business rules are missing.
- You will be held accoutable for you performance, so you must be on TOP of your numbers.
- Lack of feedback is not good feedback.
The Way Forward
- Be Curious, always ask questions, always learn.
- Be Proactive, always take the lead, always be on TOP of things.
- Be a Killer, always deliver, always do more than expected.
- Have constant discipline, learn all the things you dont know, repeat.
- Avoid complacency. Do not be happy with little, always do more, always be better.
- You promise, you deliver, so always write down, always remember, be someone reliable like a rock.
- Go Deeper, know better, invest more on POCs, reading papers, videos and do not avoid hard problems, face hard problems early on.

- Ted Lasso reference: Ted Lasso on IMDB (highly recommended).
🧬 Template
This is a template created by Diego Pacheco which the goal to better describe a tought process which is called architecture. This should be used to learn software architecture and to pratice with use cases.
🏛️ Structure
1. 🎯 Problem Statement and Context
What is the problem? What is the context of the problem? Example:
The problem is to sell shoes online, the main issue with buying shoes online is
how we will make our users buy shoes if they cannot make them fit? We would need
to have a huge selectio and find ways to people find they perpect show at the
same time market teams would need to change campains all the time, we need to
have way to make things fast and dynamic.
Recomended Reading: Breaking problems down
2. 🎯 Goals
List in form of bullets what goals do have. Here it’s great to have 5-10 lines. Example:
1. Solution needs to be fast! Performance for all operations bellow ~1 ms.
2. Security is non-negociable! Security at-rest, transite, threat analysis and review for by at least 3 different people.
3. Composable solution. Users should be able to mix and match components instead of building all for scratch. ie: map component can be reused on counters component.
4. Work offline: Re-consiliation, CRDTs are a must.
5. Cloud-Native: All backend must be 100% cloud native, using open-source and should and should be cloud-agnostic, avoid propretaty apis.
Recommended Learning: Education vs Learning
3. 🎯 Non-Goals
List in form of bullets what non-goals do have. Here it’s great to have 5-10 lines. Example:
1. Be perfect: There will be mistakes, we dont want have automatic-rollback for everything.
2. DynamoDB: Dynamo is expensive, we want be away from the DB.
3. Serverless: Serverless has high latency, we do not want to use it.
4. Mobile-native: We want have one single codebase, therefore we will not have 2 mobile code bases(ios and android) thefore be native is not a goal.
5. ...
Recommended Reading: Requirements are dangerous
📐 3. Principles
List in form of bullets what design principles you want to be followed, it’s great to have 5-10 lines. Example:
1. Low Coupling: We need to watch for coupling all times.
2. Flexibility: Users should be able to customize behavior without leaking the internals of the system. Leverage interfaces.
3. Observability: we should expose all key metrics on main features. Sucess and errors counters need to be exposed.
4. Testability: Chaos engineering is a must and property testing. Testing should be done by engineers all times.
5. Cache efficiency: Should leverage SSD caches and all forms of caches as much as possible.
Recommended Reading: Stability principles
🏗️ 4. Overall Diagrams
Here there will be a bunch of diagrams, to understand the solution.
🗂️ 4.1 Overall architecture: Show the big picture, relationship between macro components.
🗂️ 4.2 Deployment: Show the infra in a big picture.
🗂️ 4.3 Use Cases: Make 1 macro use case diagram that list the main capability that needs to be covered.
Recommended Reading: UML hidden gems
🧭 5. Trade-offs
List the tradeoffs analysis, comparing pros and cons for each major decision. Before you need list all your major decisions, them run tradeoffs on than. example: Major Decisions:
1. One mobile code base - should be (...)
2. Reusable capability and low latency backends should be (...)
3. Cache efficiency therefore should do (...)
Tradeoffs:
1. React Native vs (Flutter and Native)
2. Serverless vs Microservices
3. Redis vs Enbeded Caches
Each tradeoff line need to be:
PROS (+)
* Benefit: Explanation that justify why the benefit is true.
CONS (+)
* Problem: Explanation that justify why the problem is true.
PS: Be careful to not confuse problem with explanation.
Recommended reading: Tradeoffs
🌏 6. For each key major component
What is a majore component? A service, a lambda, a important ui, a generalized approach for all uis, a generazid approach for computing a workload, etc…
6.1 - Class Diagram : classic uml diagram with attributes and methods
6.2 - Contract Documentation : Operations, Inputs and Outputs
6.3 - Persistence Model : Diagrams, Table structure, partiotioning, main queries.
6.4 - Algorithms/Data Structures : Spesific algos that need to be used, along size with spesific data structures.
Exemplos of other components: Batch jobs, Events, 3rd Party Integrations, Streaming, ML Models, ChatBots, etc…
Recommended Reading: Internal system design forgotten
🖹 7. Migrations
IF Migrations are required describe the migrations strategy with proper diagrams, text and tradeoffs.
🖹 8. Testing strategy
Explain the techniques, principles, types of tests and will be performaned, and spesific details how to mock data, stress test it, spesific chaos goals and assumptions.
🖹 9. Observability strategy
Explain the techniques, principles,types of observability that will be used, key metrics, what would be logged and how to design proper dashboards and alerts.
🖹 10. Data Store Designs
For each different kind of data store i.e (Postgres, Memcached, Elasticache, S3, Neo4J etc…) describe the schemas, what would be stored there and why, main queries, expectations on performance. Diagrams are welcome but you really need some dictionaries.
🖹 11. Technology Stack
Describe your stack, what databases would be used, what servers, what kind of components, mobile/ui approach, general architecture components, frameworks and libs to be used or not be used and why.
🖹 12. References
- Architecture Anti-Patterns
- Enterprise Integration Patterns
- SOA Patterns
- Microservice API Patterns
- Software Development Anti-Patterns
- Refactoring Patterns
- Database Refactoring Patterns
- Data Modelling Redis
- Cloud Design Patterns
- 12 Factors App
- Relational DB Patterns
- Rendering Patterns
- REST API Design Patterns
POC Hero
0. How to do a good POC
Proof of Concept (POC) is a important tool, it’s like a lab where you should be doing experiments. POC allow you to learn something about a programing language, approach, school of tought, library or even to validate some crazy idea/hack. POC can be shallow but is important to have Deep POCs. Doing POCs must be a mindset, something you do everyday.
1. How to go Deep in a POC?
- Debug the code (write down classes names, make diagrams) do it multiple times
- Write down code that test, simulate or exaserbate the problem or target of your poc
- Do Research, see what other people do, are there any patterns? or idiomatic ways of doing this?
- Read the documentation, read book, avoid tutotials, read the source code
- Do experiments, test the API in several different conditions and scenarios of sucess and error see what happens
- Reading the source code of a framework or library is a must, is how you can understand how it works and how to use it
2. What NOT todo in POC?
- Be shallow all the time
- Just call methods
- Do not challenge yourself, if you know is too easy is not a good POC
3. Examples of Good Deep POCs
- Servers Benchmark
- If Alternatives
- Java 21 Spring Boot 3 Async
- Elegant Objects
- Elegant Objects Vol 2
- Scala 3.5 Patterns
4. Keep in mind
- The more you pratice, the better you get.
- POCs comparing libraries, approaches, languages, patterns help a lot to learn and master tecnhiques.
- Make sure it gets harder, no matter if you need to do 10-100x to understand. Repetition is key.
- You are only fooling yourself if you just go shallow all the time.
- Doing Shallow pocs is not neccesary bad or wrong, but you should be doing Deep POCs as well.
- Challenge yourself, do not be afraid to fail, is part of the learning process.
- Consider doing crazy things like: a parser, a compiler, a framework, a library, maybe even a new language.
- Remember learning with code is a long term game and a mindset, so keep doing it everyday.
5. To improve
- Share the code with others ask feedback
- look for different and better ways to do the same thing
- Be curious, ask questions, do not be afraid to ask for help
- Go read the source code of big projects, is a great way to learn like: Java, Spring, Netty, Linux, React, Nodejs, etc.
- Document your POC, write text exmplaning what you did a why and why is impotant.
- Good POCs take hours, days and weeks and thats fine, the more time you invest the better you get.
- Make doing POCs a habit, do it everyday, is like going to the gym, you need to do it everyday to get better.
Paper Hero
Papers are important, because most of breakthroughs in technology are first described in research papers. There is a lot of value in reading papers to stay up to date with the latest advancements, and to get inspiration for new ideas.
How to Read a paper
- Skim the paper: Start by reading the abstract, introduction, and conclusion to get a high-level understanding of the paper’s goals and contributions.
- Identify key sections: Look for sections that are most relevant to your interests or research. Focus on these sections first.
- Take notes: As you read, take notes on important concepts, methods, and results. Summarize key points in your own words to reinforce understanding.
- Understand the methodology: Pay close attention to the methods used in the paper. Try to understand the experiments.
Pretty much all PDF readers, even you browser(let’s say chrome) has a highlighting tool. Use it to highlight important parts of the paper. You should use this.
Presenting Papers
Presenting papers is a great challenge because papers can be as long as big books and usualy yhem are at least 7-15 pages long, but very often much bigger. It’s not unusual to see papers that are 100+ pages long. So you can’t just read the whole paper.
Presenting a paper(whichout slides) forces you to:
- Understand: Make sure you understand the paper well enough to explain it to others.
- Select: Identify the most important points and contributions of the paper.
- Practice: Practice your communication skills by explaining complex ideas in a clear and concise manner. (Dry runs, Dry runs, Dry runs…)
Sources of Papers
- arXiv: A repository of electronic preprints covering various fields including computer science, physics, mathematics, and more.
- Google Scholar: A search engine for scholarly literature across many disciplines and sources.
- IEEE Xplore: A digital library for research articles and conference papers in engineering and technology.
Presentation Hero
Read this multiple times and follow strickly and will be awesome at presenting.
Before you start
Preparation is everythinng. When should I start preparing? 30 days before your presentation day. Why you need start 30 days ahead?
- Because you will need time to research
- Because you will get feedback and will have homework
- Because even if your deck is amazing, you need do multiple dry runs before presenting.
How many dry runs is enought?
- There is not limit, more preparation is always better.
- You must feel confident and be able to deliver on time
- You should dry run so many times that you can present without slides (presentation zen idea).
- Usually 3 to 5 dry runs is enough
How to deliver a great presentation
A great presentation is just an output of a well-prepared research, poc or piece of work. There is no way you will do an amazing presentation if you the content is not good. A presentation is just an excuse, a reason or a motivation if you will do learn someeting deep and deliver an awesome experience. When you are presenting, you are delivering a story, think about order of things.
0. What you should never (ever) do
- Present content you don’t understand
- You DONT know DEEPLY all the things you are presenting, all the strings, all the algos, all the techniques, all technologies, every single thing you don’t master it.
- Talk about things you did not run a poc or some experiment or have experience with in production
- Have a lot of text and just read all time
- Have a white background with or poor color scheme.
- Splash code in text, dont show code without syntax highlight
- Do no sufer in silence, ask for help
- Dont do the presentation for compliance, do your best, use as a tool for continnuous learning and improvement
1. What you should always do
- Research
- Do POCs
- Debug
- Google it
- Read about it
- Give Context: What it is? How it works? Showing arch diagrams always good.
- Always have trade-offs (PROS and CONS)
- Comparisons with similar solutins and options always good i.e talking about Kafka, compare with RabbitMQ, Kinesis, ActiveMQ, etc.
- CODE
- Live-demo (which can be recorded)
2. How to prepare
- Record you presenting to your self like a unit test (do that 3 to 5 times) this is also called Dry Run
- Show to someone with more experience - get feedback
- The more you present, the better you get, pratice is the key to success
- Dry Runs: Do many dry runs as necessary, record a video so you see youself presenting and what is working or not, get feedback from other people.
3. How to create a good presentation structure
- What: Explain what it thing you are presenting.
- How: Explain how it works and how is the architecture under the hood.
- Trade-offs: Explain the trade-offs, pros and cons.
- Code/DEMO: Show code, if possible, live demo is always good.
- Comparisons: Show comparisons with similar solutions.
4. How to deliver
- Be clam
- Dont rush
- Mind the time (have a clock in front of you) or in yoir phone
- Ask for feedback after the presentation
5. How to improve
- Read the book
Presentation Zenby Garr Reynolds - Try to add some humor, data, facts or intersting trivia is always fun
- Watch other people presenting
- Use google for research, read books, read papers, debug the code, do multiple pocs.
- Book time in your agenda to prepare the presentation (review and dry-run too)
6. When you learn to how to present well…
- You will comunicate better
- You will sell better
- You will be more confident
Sales Hero
Most of engineers have alergy to sales. I completely get it, flufly stuff, wrong terms, hype, things that are being forced down your throat to follow trends that don’t make sense to you. However does not matter you are an engineer, you need to be doing sales all the time. If you are an architect, even more, sales need to happen even more often.
Why Sales? Where we apply sales?
- When you are convincing your team to use a new technology or approach.
- When you are trying to get buy-in from stakeholders for a project.
- When you are negotiating resources or timelines for your projects.
- When you are presenting your ideas or solutions to clients or management.
- When you are collaborating with cross-functional teams and need to align on goals.
- When you are doing a paper presentation or conference talk to share your work.
- When you are mentoring or coaching junior engineers and need to inspire them.
- When you are writing documentation or technical blogs to share knowledge.
- When you are participating in code reviews and need to persuade others of your viewpoint.
- When you are advocating for best practices or standards within your team or organization.
- When you are deliverying a demo and need to highlight the value of your solution.
Invisible Structure
Does not matter if you are doing a demo, slide deck presentation or even writting a document. You need some elements, or structure, however such structure or element does not need to be explicitly stated or even named but it needs to be present.
- What is the problem?
- What is the solution (IF there are multiple solutions do bike-car-plane).
- Benefits of the solution.
What is the problem?
You need to state the problem. More important than staing the problem is to state the pain of the problem.
Bike, Car , Plane
When presenting multiple solutions, you must order them by simplicity to complexity, or from lower value to higher value. That way you are constaly raising the bar of your audience expectations.
Problem: I need to go from Porto Alegre to Florianopolis. I don’t have a transportation method.
Solution: First I give you a bike, you get there in 2 days, them I give you a car, you get there in 6 hours, finally I give you a plane, you get there in 60 minutes.
IF you are doing a demo, you can progressevly evole what you are presenting. IF you have just one solution, make sure you give the plane or the best option. IF you have multiple, organize them in a way where is progressively.
Benefits of the solution
Benefits should come last, they will be like a summary, but at this point, you are doing a RECAP, where you your audience already understand the problem and the solution, now you are just reinforcing.
Agile Development Resources
Agile Dev Resources
Why Scrum Sucks
Why Safe Sucks
Books
- Getting Real
- Rework
- The Pragmatic Programmer: From Journeyman to Master
- Refactoring: Improving the Design of Existing Code
- Working Effectively with Legacy Code
- Extreme Programming Explained: Embrace Change, 2nd Edition (The XP Series)
- Clean Code: A Handbook of Agile Software Craftsmanship
- Code Complete: A Practical Handbook of Software Construction, Second Edition
- Presentation Zen
- Seven Languages in Seven Weeks
- Programming Clojure
- Seven Databases in Seven Weeks
- Learn You a Haskell for Great Good!
AI Resources
Important Topics
- Machine Learning Fundamentals
- Deep Learning
- Neural Networks
- Natural Language Processing
- Computer Vision
- Reinforcement Learning
- Generative AI
- Large Language Models
- MLOps
- AI Ethics
- Transformer Architecture
- Attention Mechanisms
Traditional AI Tech
Machine Learning Frameworks
Computer Vision
Natural Language Processing
Data Processing & Analysis
MLOps & Model Deployment
Generative AI Tech
Large Language Models
Image Generation
Code Generation
Audio/Speech
Video Generation
AI Development Platforms
Vector Databases & RAG
AI Challenges Round 1
- (1) Build a Movie Recommendation System using collaborative filtering, content-based filtering, and hybrid approaches with explicit feedback.
- (2) Create an Image Classification System using CNNs to classify different categories of images with data augmentation and transfer learning.
- (3) Build a Sentiment Analysis API that can analyze text sentiment across multiple languages using pre-trained models and custom training.
- (4) Create a Chatbot using traditional NLP techniques (intent recognition, entity extraction) with conversation management and context tracking.
- (5) Build a Price Prediction System for real estate using various regression algorithms, feature engineering, and model comparison.
- (6) Create an Anomaly Detection System for network traffic or system logs using unsupervised learning techniques.
- (7) Build a Credit Risk Assessment System using classification algorithms with proper feature selection and model validation.
AI Challenges Round 2
- (1) Create a RAG (Retrieval-Augmented Generation) System that can answer questions about your personal knowledge base using vector embeddings.
- (2) Build a Code Generation Assistant that can generate code in multiple programming languages based on natural language descriptions.
- (3) Create a Multi-modal AI System that can process both text and images to provide comprehensive responses (like describing images or creating images from text).
- (4) Build an AI-powered Content Moderation System that can detect harmful content across text, images, and videos with high accuracy.
- (5) Create a Personal AI Assistant that can schedule meetings, send emails, and manage tasks through natural language conversations.
- (6) Build a Fine-tuned LLM for a specific domain (legal, medical, financial) with proper training pipeline and evaluation metrics.
- (7) Create an AI Agent System that can browse the web, extract information, and perform tasks autonomously with safety guardrails.
AI Challenges Round 3
- (1) Build a Multi-Agent AI System where different AI agents collaborate to solve complex problems with coordination and conflict resolution.
- (2) Create an AI Model Training Pipeline with automated hyperparameter tuning, distributed training, and model versioning on cloud infrastructure.
- (3) Build a Real-time AI Inference System that can handle millions of requests with sub-second latency using model optimization and caching.
- (4) Create an AI Safety and Alignment System with red-teaming, jailbreak detection, and content filtering with continuous monitoring.
- (5) Build a Federated Learning System where multiple parties can train models collaboratively without sharing raw data.
- (6) Create an AI Explainability Dashboard that can provide interpretable explanations for model decisions using SHAP, LIME, and other techniques.
- (7) Build a Continuous Learning AI System that can adapt to new data patterns without forgetting previous knowledge (catastrophic forgetting prevention).
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- Hands-On Machine Learning with Scikit-Learn, Keras, and TensorFlow
- Deep Learning
- Pattern Recognition and Machine Learning
- The Elements of Statistical Learning
- Machine Learning Yearning
- Building Machine Learning Powered Applications
- Designing Machine Learning Systems
- MLOps: Continuous Delivery and Automation Pipelines in Machine Learning
- Machine Learning Design Patterns
- Artificial Intelligence: A Modern Approach
- The Hundred-Page Machine Learning Book
- Python Machine Learning
- Natural Language Processing with Python
- Computer Vision: Algorithms and Applications
- Reinforcement Learning: An Introduction
- Generative Deep Learning
- GPT-3: Building Innovative NLP Products Using Large Language Models
- AI and Machine Learning for Coders
- Building Intelligent Systems
- The Master Algorithm
- Life 3.0: Being Human in the Age of Artificial Intelligence
- Human Compatible: Artificial Intelligence and the Problem of Control
- The Alignment Problem
Links
- Papers With Code
- Towards Data Science
- Machine Learning Mastery
- Distill
- OpenAI Blog
- Google AI Blog
- DeepMind Blog
- Anthropic Blog
- Hugging Face Blog
- Stanford AI Lab
- MIT AI Lab
- Berkeley AI Research
- AI/ML YouTube Channels
- Coursera ML Course
- edX MIT Introduction to AI
- Fast.ai
- Kaggle Learn
- Google AI Education
- AWS Machine Learning
- Azure AI
- Google Cloud AI
- NVIDIA AI Developer
- AI Ethics Institute
- Partnership on AI
- AI Safety Gridworlds
- OpenAI Gym
- TensorFlow Hub
- PyTorch Hub
- Model Zoo
- AI Conferences
Architecture DevOps Resources
Software Architecture | DevOps Engineering Resources

Important Topics
- Requirements
- Availability
- Scalability
- Design Patterns
- Trade-offs
- Distributed Systems
- CQRS
- Cloud Computing
- SOA / REST
- Infrastructure as Code
- Immutable Infrastructure
- Observability
Tech
Software Architecture
- NoSQL
- REST
- Integration / Camel
- Akka
- JEE
- Kafka
- nsq
- ElasticSearch
- ZEROmq
- Vert.X
- Dropwizard
- RxJava
- Netty
- LMAX/Disruptor
- Quartz
- Ignite
- Hazelcast
- Protobuf
- Samza
- Flink
- Spark
- Pravega
- Gradle
- Spring Cloud
- NetflixOSS
DevOps Engineering
- Ansible
- Terraform
- Packer
- AWS Stack
- Google GCP
- Gatling
- Jenkins
- Travis
- Grafana
- Collectd
- Docker
- Boto3
- Nomad
- Vagrant
- InfluxData
- Prometheus
- riemann
- Liquibase
- FlyWay
- Etcd
- Graylog
- ELK
- Kubernetes
- StatsD
- Vault
- VaultUI
- smith
- Operators
- Micrometer
- napalm
- heptio
- Live HTop
- Closh
- sultan
- telepresence
- mitmproxy tools
Books
Software Architecture
- Software Architect Bootcamp
- Enterprise Integration Patterns
- Patterns of Enterprise Application Architecture
- Building Microservices
- NoSQL Distilled
- RESTful Web Services Cookbook
- SOA Principles of Service Design
- SOA Design Patterns
- Software Requirements 2
- More About Software Requirements
- Software Requirement Patterns
- Software Architecture Book
DevOps Engineering
- Continuous Delivery
- The Phoenix Project
- The DevOps Handbook
- Ansible for DevOps
- Terraform: Up and Running
- Visible Ops Handbook
Links
Software Architecture
- Coding the Architecture
- Martin Fowler
- High Scalability
- InfoQ
- SOA Manifesto
- SOA Patterns
- SOA Testing
- Enterprise Integration Patterns
- Awesome Java
- Diego’s Architecture Gist
DevOps Engineering
- DevOps.com
- DZone DevOps
- DevOps Learning The Hard Way
- Basic Infrastructure Patterns
- Infrastructure As Code
- Awesome Docker
- Awesome DevOps
- Periodic Table of DevOps Tools
- 51 Best DevOps Tools
Cloud Native Resources
Cloud Native Resources

Important Topics
Tech
- NettflixOSS
- SpringCloud
- Dropwizard
- Finagle
- Guice
- Feign
- Kubernetes
- Mesos
- Docker
- RxJava
- gRPC
- Linkerd
- CoreDNS
- FluentD
- NoSQL
- Lambda
- Cloud Functions
- Serverless
- Kappa
- GraphQL
- Spring Cloud Functions
- Orika
- ByteBuddy
- CGLib
- Caffeine
- Config
- MapDB
- Time4J
- NoException
- Genson
- Jolt
- DevOps Engineering
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- Cloud Native Java
- Cloud Native Infrastructure
- Kubernetes: Up and Running
- Kubernetes in Action
- Mesos in Action
- Google Cloud Platform in Action
- Serverless Architectures on AWS
- Serverless Single Page Apps
- AWS Lambda in Action
- Cloud Native Microservices
- Docker in Action
- RxJava Essentials
Links
- CNCF
- Martin Fowler on Microservices
- Netflix Tech Blog
- Spring Blog
- AWS Lambda Blog
- Google Cloud Platform Blog
- VMware Cloud Native Blog
- Cloud Native Blog
- InfoQ Microservices
- Diego’s Cloud Native Gist
- Linux Foundation Kubernetes Course
Data Resources
Tech
- Terraform / OpenTofu
- AWS S3
- AWS Security Groups
- AWS Auto Scaling Groups
- AWS AMI / Packer
- AWS EC2
- AWS RDS
- AWS ELB / ALB
- AWS Route 53
- K8s / EKS
- Helm
- ArgoCD
- Jenkins / Groovy DSL
- Trivy / tfsec / Checkov / Terrascan / TFLint / KubeLinter
- Java
- Spring Boot
- Python 3x
- Postgress
- MySQL
- Redis
- Kafka
- Airflow
- Prometheus
- Grafana
- ELK
- Splunk
- Druid
- Presto
- Trino
- AWS Redshift
- Apache Spark
- Apache Flink
- Apache Beam
- Apache Kafka
- Kafka Streams
- KSQLDB
- Apache Pulsar
- Hadoop ecosystem (HDFS, MapReduce, Hive)
- JVM Tunning
- GC Tunning
- Linux Tunning
- K8s Tunning
- Database Tunning
- AWS VPC Flow
- Cloud Trail
- Cloud Watch
- OpenSearch / ElasticSearch
- Storage formats:
- Parquet
- Avro
- ORC
- JSON
- Iceberg
- Delta Lake
- Luigi
- Apache NiFi
- DDD
- Data Mash
- Snowflake
Data Techniques
- ETL vs ELT patterns
- Stream processing and windowing
- Change data capture (CDC)
- Data partitioning and sharding
- Batch vs real-time processing strategies
- Data federation vs data virtualization
- API-first data integration
- Event-driven architecture patterns
- Master data management (MDM)
- Data replication strategies (sync vs async)
- Columnar storage formats (Parquet, ORC)
- Data compression techniques
- Indexing strategies for analytics
- Query optimization and execution planning
- Caching layers and materialized views
- Schema-on-read vs schema-on-write
- Data denormalization for analytics
- Slowly changing dimensions (SCD) handling
- Data aggregation and rollup strategies
- Time-series data processing patterns
- Event sourcing patterns
- Complex event processing (CEP)
- Stream-stream and stream-table joins
- Watermarking for late-arriving data
- Backpressure handling in streaming systems
Data Engineering Code Challenges Round 1
- Create an Airflow DAG that extracts data from PostgreSQL, transforms it with Spark, and loads to Redshift. Include data quality checks and error handling.
- Build a real-time streaming pipeline using Kafka, Spark Structured Streaming, and Delta Lake. Process IoT sensor data with windowing and aggregations.
- Create a dbt project with dimensional modeling (fact/dimension tables), tests, documentation, and CI/CD pipeline deployment to Snowflake.
- Build a Docker Compose setup with Kafka, Spark, PostgreSQL, and Jupyter. Create a complete data pipeline that processes sample e-commerce data.
- Create Terraform scripts to deploy: S3 data lake with proper partitioning, Glue catalog, Glue ETL job, Lambda for data validation, and IAM roles.
- Build a Python data pipeline using Pandas that reads from multiple CSV sources, performs data cleaning/validation, and outputs to both PostgreSQL and Parquet files.
- Create a real-time CDC pipeline using Debezium, Kafka Connect, and Elasticsearch. Capture changes from MySQL and make them searchable in near real-time.
Data Engineering Code Challenges Round 2
- Build a serverless data pipeline using AWS Lambda, Step Functions, and S3. Process JSON files, transform with Pandas, and load to DynamoDB.
- Create a Kubernetes operator in Go that automatically provisions Spark clusters and manages data processing jobs based on custom resource definitions.
- Build a data quality monitoring system using Great Expectations, deployed on Kubernetes with alerts to Slack when data quality issues are detected.
- Create a multi-tenant data platform using Apache Iceberg tables with row-level security, deployed on EKS with Trino for querying.
- Build a feature store using Feast, deployed on Kubernetes, with both batch and real-time feature serving for ML pipelines.
- Create a data lineage tracking system using Apache Atlas or DataHub, integrated with Airflow and dbt to automatically track data dependencies.
- Deploy a complete lakehouse architecture using Delta Lake on S3, with Spark on EKS, Hive Metastore, and Superset for visualization. Include data governance, performance tuning, and cost optimization.
Data Engineering Code Challenges Round 3
- Create a data mesh implementation with domain-specific data products, each with their own CI/CD, data contracts, and SLA monitoring.
- Build a real-time fraud detection pipeline using Kafka Streams, feature engineering with time windows, and model serving with MLflow on Kubernetes.
- Create a data observability platform using OpenTelemetry, Grafana, and Prometheus to monitor data pipelines, including latency, throughput, and error rates.
- Build a data archiving solution using Apache Pulsar for event streaming, with automatic tiered storage to S3 Glacier for cold data.
- Create a data catalog with automated metadata extraction from various data sources (databases, files, APIs) using Apache Nifi and store in Apache Atlas.
- Build a real-time recommendation engine using Apache Flink, integrating with Kafka for user events and serving recommendations via a REST API.
- Create a data governance framework with Apache Ranger for access control, Apache Atlas for metadata management, and integration with dbt for data lineage tracking.
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- The DevOps Handbook
- The Phoenix Project
- Accelerate
- Refactoring Databases: Evolutionary Database Design
- Data Intensive Applications
- Fundamentals of Data Engineering: Plan and Build Robust Data Systems
- Data Engineering Design Patterns: Recipes for Solving the Most Common Data Engineering Problems
- Data Pipelines Pocket Reference: Moving and Processing Data for Analytics
- Financial Data Engineering: Design and Build Data-Driven Financial Products
- Spark: The Definitive Guide: Big Data Processing Made Simple
- Learning Spark: Lightning-Fast Data Analytics
- Stream Processing with Apache Flink: Fundamentals, Implementation, and Operation of Streaming Applications
- Streaming Systems: The What, Where, When, and How of Large-Scale Data Processing
DevOps Resources
Tech
- Terraform / OpenTofu
- AWS S3
- AWS Security Groups
- AWS Auto Scaling Groups
- AWS AMI / Packer
- AWS EC2
- AWS RDS
- AWS ELB / ALB
- AWS Router 53
- K8s / EKS
- Helm
- ArgoCD
- Jenkins / Groovy DSL
- Trivy / tfsec / Checkov / Terrascan / TFLint / KubeLinter
- Java
- Spring Boot
- Python 3x
- Go Lang
- Postgress
- MySQL
- Redis
- Kafka
- Airflow
- Prometheus
- Grafana
- ELK
- Splunk
- Druid
- Presto
- JVM Tunning
- GC Tunning
- Linux Tunning
- K8s Tunning
- Database Tunning
- AWS VPC Flow
- Cloud Trail
- Cloud Watch
- OpenSearch / ElasticSearch
Code Challenges Round 1
- (1) Create a Jenkins DSL that can deploy a simple Spring Boot app (build, run tests, run sonnar and deploy in EC2) use terraform
- (2) Create a Jenkins DSL that can deploy a simple Spring Boot app (build, run tests, run sonnar and deploy in EKS) use HELM
- (3) Create a Jenkins DSL that can deploy a simple Spring Boot app (build, run tests, run sonnar and deploy in EKS) use ArgoCD
- (4) Create a Docker-Compose that has Prometheus, Spring Boot App, Grafana and ELK. All integrated and working.
- (5) Create a set of terraform scripts: deploy a but to s3, deploy a lambda, deploy a api gateway, deploy new IAM rule.
- (6) Create a simple Spring Boot App that can consume a Kafka Topic and produce a Kafka Topic. Provision a Kafka Cluster in AWS.
- (7) Create a simple Spring Boot App that can consume a Redis and produce a Redis. Provision a Redis Cluster in AWS.
Code Challenges Round 2
- (1) Create a Python App using Flask. Should be deployed in EKS. Use Helm.
- (2) Create a Sidecar in Go that drop properties files into configmap in K8s.
- (3) Create a Sidecar in Python 3x that drop properties files into configmap in K8s.
- (4) Create a Sidecar in Java that drop properties files into configmap in K8s.
- (5) Create a Sidecar in Go that load credentials from AWS ASM and drop into configmap in K8s.
- (6) Create a Sidecar in Python 3x that load credentials from AWS ASM and drop into configmap in K8s.
- (7) Deploy a Spring Boot App in EKS using ArgoCD and helm. Perform Stress Tests with Terraform, tune up JVM, GC, K8s, Linux, the App JDBC Pool and the Database.
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- The DevOps Handbook
- The Phoenix Project
- Accelerate
- Continuous Delivery
- Site Reliability Engineering
- The Site Reliability Workbook
- Observability Engineering: Achieving Production Excellence
- Refactoring Databases: Evolutionary Database Design
- Data Intensive Applications
All the Things Devops
Useful Information
Lean all this tools for Troubleshooting in Linux

GCP Resources
GCP Resources

Important Topics
Tech
- Compute
- Storage
- Networking
- Big Data
- ML
- Management Tools
- Kubernetes
- TensorFlow
- Cloud Spanner
- Cloud Functions
- GKE
Books
- Google Cloud Platform in Action
- Google Compute Engine
- Data Science on Google Cloud Platform
- Kubernetes: Up and Running
Links
- Google Cloud Platform Blog
- GCP Big Data Blog
- Google Cloud on Medium
- Kubernetes Blog
- Google Cloud Twitter
- GCP WordPress
- GCP Tutorials
- GCP Community Tutorials
- GCP Podcast
- Google Codelabs Cloud
- Google Cloud Twitter
- GCP Big Data Twitter
Java Resources
Core Java
- Properties API: Create, Read, Store, System.
- Reflection API: Read, invoke, modify.
- Functional Interfaces
- Streams: Lists, Arrays, Map, Filter, Predicates
- Streams: Supplier, Consumer, BinaryOperator, UnaryOperator
- Concurrency: ExecutorService
- Concurrency: Callable and Future
- Concurrency: Java Locks and Atomic Variables
- Create your own Annotations - read with reflections
- Mockito - All Features
- JUnit 5 - All Features
- Data Time API + Joda time
- Implement all Gof Design Patterns
- Use/Test all new JDK Features
Spring Stack
- Spring Core - IoC
- Spring Core - Bean Scopes(Singleton, Prototype)
- Spring Core - Setter/Contructor Injection
- Spring Core - Bean Post Processor
- Spring Core - @Value
- Spring Core - Testing, Environment, WebTestClient
- Spring Boot - Rest Support, RestTemplate
- Spring Boot - Integration Test with Rest
- Spring Data JDBC
- Cache with Caffeine
- Configure Transaction management with JPA
- Spring Security: CSRF Protection
- Spring Security: Authorize HTTP Requests(HttpSecurity and SecurityFilterChain)
Learn Frameworks and Libs
- Gson
- Guava
- Quartz
- Apache Camel
- Google GRPC
- Resilience4j
- Vert.X
- Quarkus
OOAD Challenges Round 1
- (1) Build a TAX system where different products have different tax per state and year.
- (2) Build a Logger Builder Router System where you can log into FS, ELK or any other log system where you can configure the logs to be sync or assync using the same API.
- (3) Build Render Template where the same temple can be render in HTML, PDF or CSV.
- (4) Build A Logistic System where you need to calculate different freigth prices based on volume, size and type of transportation i.e boat, truck, rail, prices are dynamic they keep changing.
- (5) Build Restaurant Queue System Capable of telling how long each dish will take.
- (6) Build Guitar Factory System where you can specify details of a guitar and the system creates a custon guitar for you with OS, Specs, Models. The system should keep track of Inventory.
- (7) Build Ticket system, where you should be able to sell x number of ticker per different shows and choose the seats number, zone of the venue, date and respect maximun capacity.
OOAD Challenges Round 2
- (1) Build a Grocery TODO List system (add item, remove, mark as done, do, re-do, listAll)
- (2) Build a FileShare System (save files, restore files, delete files, listFiles, Search) with encryption
- (3) Build a Note Taking system (add notes,save notes,edit notes, delete notes, sync)
- (4) Build a Calendar system (book meetings, remove meetings, listMeetings, suggest best time for 2 people)
- (5) Build a Redis clone client/server (Strings: set,get,remove,append, maps: set,get,keys,values)
- (6) Build a Teacher’s Class Organizer/Optimizer
- (7) Build a Social Media Sharing Photo App (publish photos, tag photos, timeline, comments)
Code Challenges Round 1
- (1) Build a converter Framework where you convert complex types.
- (2) Build a task framework where you submit tasks to your own pool of threads.
- (3) Build a validation Framework based on Annotations.
- (4) Build a observability core framework based on latency metrics.
- (5) Build a code generator based on YAML Definitions.
- (6) Build a Core Bank Ledger.
- (7) Build a HTTP Server supporting /GET endpoints.
Code Challenges Round 2
- (1) Build a Stress Test Framework for HTTP
- (2) Build a Dont Pad (DontPad)
- (3) Build a Unused Class Detector
- (4) Build a Murder Mistery Game using terminal and linux (clmystery walkthrough)
- (5) Build a Implement your own String Implementation methods: (toArray,foreach,reverse,iterator,length,charAt,equals,isEmpty,replace,substring,trim,toJson,indexOf,hashCode)
- (6) Build a Hibernate Slow Query Detector
- (7) Build a oAuth 2.0 Server (RFC 6749)
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- Effective Java
- Java Concurrency in Practice
- Java Performance: In-Depth Advice for Tuning and Programming
- Refactoring: Improving the Design of Existing Code
- Implementation Patterns
- Design Patterns: Elements of Reusable Object-Oriented Software
- Enterprise Integration Patterns
- Unit Testing Principles, Practices, and Patterns
- Working Effectively with Legacy Code
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
- The Pragmatic Programmer
JavaScript Frontend Resources
Frontend / JavaScript Resources
Tech
- Nodejs
- Typescript
- Express
- Angular
- React
- Vue
- RxJS
- RxFiddle
- Webpack
- Webpack-monitor
- yarn
- Gulp
- Yoman
- Flow
- Lodash
- Ramda
- Ramda Fantasy
- kea
- Redux
- redux-transform
- redux-offline
- Redux-Saga
- react-autocompletely
- react-atmo
- react-content-loader
- react-snap
- React PWA
- ReactShadow
- react-bits
- graphql-voyager
- react-traverse
- React-Sight
- React-Virgin
- react-intl
- React-AR
- jsLingui
- svgr
- Mobx
- Xstream
- Hammerjs
- D3
- Emotion
- popmotion
- browserify
- Jasmine
- chai
- mocha
- Protractor
- phantomjs
- Immutable.js
- resilient.js
- Riot
- Meteor
- Ember
- Rendr
- three
- T3
- p5
- Babel
- babel-plugin-preval
- Electron
- html-to-react-components
- React-Native
- lottie-react-native
- Argon
- Primrose
- React-VR
- ink
- Chromeless
- One-Loader
- Vuera
- Vue-Model
- Loopback-Next
- lodash-webpack-plugin
- DeepleatnJS
- mlhelper
- image-trace-loader
- frappe-charts
- svg-fill-loader
- cesium
- jSchema
- serverjs
- create-react-kotlin-app
- tufte-css
- YamUI
- react-tv
- luxon
- node-prune
- date-fns
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- JavaScript: The Definitive Guide
- Node.js Design Patterns
- Web Development with Node and Express
- Learning React
- Pro Angular
- Flux Architecture
- You Don’t Know JS
- Mostly Adequate Guide
- How to Learn JavaScript Properly
Links
- Eloquent JavaScript - 4th edition (2024)
- CSS Hell
- HackerNoon
- Flux
- Dan Abramov Twitter
- Ben Lesh Twitter
- Michael Jackson Twitter
- Brendan Eich Twitter
- dshaw Twitter
- ladyleet Twitter
- Awesome JavaScript
- Awesome Node.js
- Slack Engineering
- Codeship Blog
- AngularJS Blog
- React Blog
- MS Edge Dev Blog
- Getting Started with Redux
- Asynchronous JavaScript with Async Await
- Grab Front-End Guide
- React Redux Cheatsheet
- React Native Radio
- Hello p5.js
- Elevator Saga
- React Armory - React Basics
- Clean Code JavaScript
- Awesome Vue
- Modern Frontend Hacking Cheatsheets
- WebGL Math
- JavaScript Promises Paper
- React Training Patterns
- AngularSpree
Mobile Resources
Mobile Resources
Tech
Android
- Kotlin
- RxJava
- genymotion
- RoboBinding
- Butter Knife
- Picasso
- WellSQL
- Jackson
- Retrofit
- robotium
- Firebase
- lottie-android
- Unity
- TensorFlow for Android
- leakcanary
- chuck
- litho
IOS
- Sync
- realm-cocoa
- Alamofire
- SDWebImage
- Eureka
- RxSwift
- R.swift
- SnapKit
- IQKeyboardManagerSwift
- Quick
- Hero
- Material
- IGListKit
- Chameleon
- FileKit
- json-framework
- TensorFlow for iOS
- j2objc
- Attributed
- Cadmium
Books
- Android Cookbook
- Android Design Patterns and Best Practice
- iOS 10 Programming Fundamentals with Swift
- Learning Swift
Links
- Awesome Android
- Awesome iOS
- Android Developer
- Android Developers YouTube
- Android Source
- Vogella Android Tutorials
- Gizmodo Android
- Android Central
- Cult of Mac
- Cocoa with Love
- iOS Dev Weekly
- CIMGF
- NSHipster
- Cocoa Controls
- Peter Steinberger
- iOS Blog UK
- 33 iOS Open Source Libraries
- Ray Wenderlich
- iOS Dev BR Slack
- Android Dev BR Slack
- COBE Tech Medium
- 39 Open Source Swift UI Libraries
- Android Clean Architecture
Python Resources
Core Python
- Python Iterators (create your own)
- Partial functions
- Map, Filter, Reduce
- List Comprehensions
- RegEx
- Unit Testing
- Behave
- Create your own lib/egg
- Create your own Python Annotation
Libs and Frameworks
- Django
- Celery
- Flask
- Tornado
- Bottle
- NumPy
- OpenCV
- Scalene
- scikit-learn
OOAD Challenges - Round 1
- (1) Build a TAX system where different products have different tax per state and year.
- (2) Build a Logger Builder Router System where you can log into FS, ELK or any other log system where you can configure the logs to be sync or assync using the same API.
- (3) Build Render Template where the same temple can be render in HTML, PDF or CSV.
- (4) Build A Logistic System where you need to calculate different freigth prices based on volume, size and type of transportation i.e boat, truck, rail, prices are dynamic they keep changing.
- (5) Build Restaurant Queue System Capable of telling how long each dish will take.
- (6) Build Guitar Factory System where you can specify details of a guitar and the system creates a custon guitar for you with OS, Specs, Models. The system should keep track of Inventory.
- (7) Build Ticket system, where you should be able to sell x number of ticker per different shows and choose the seats number, zone of the venue, date and respect maximun capacity.
OOAD Challenges Round 2
- (1) Build a Grocery TODO List system (add item, remove, mark as done, do, re-do, listAll)
- (2) Build a FileShare System (save files, restore files, delete files, listFiles, Search) with encryption
- (3) Build a Note Taking system (add notes,save notes,edit notes, delete notes, sync)
- (4) Build a Calendar system (book meetings, remove meetings, listMeetings, suggest best time for 2 people)
- (5) Build a Redis clone client/server (Strings: set,get,remove,append, maps: set,get,keys,values)
- (6) Build a Teacher’s Class Organizer/Optimizer
- (7) Build a Social Media Sharing Photo App (publish photos, tag photos, timeline, comments)
Code Challenges - Round 1
- (1) Build a Converter Framework where you convert complex types.
- (2) Build a Task framework where you submit tasks to your own pool of threads.
- (3) Build a Validation Framework based on Annotations.
- (4) Build a observability core framework based on latency metrics.
- (5) Build a code generator based on YAML Definitions.
- (6) Build your own Core Bank Ledger.
- (7) Build your own HTTP Server supporting /GET endpoints.
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- Fluent Python
- Learning Python: Powerful Object-Oriented Programming
- Refactoring: Improving the Design of Existing Code
- Implementation Patterns
- Design Patterns: Elements of Reusable Object-Oriented Software
- Enterprise Integration Patterns
- Unit Testing Principles, Practices, and Patterns
- Working Effectively with Legacy Code
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems
QA Resources
QA Resources
Tech
- Nodejs
- Typescript
- Express
- React
- Yarn
- Cypress
- playwright
- Jest
- Java
- Spring Boot
- Junit 5
- Gatling
- ToxyProxy
- Podman
- k8s
- Jenkins
- SonarQube
- Detox
- Testing Library
- TestContainers
- Bruno
- Robot Framework
- Lighthouse
Testing Skills in Testing Diversity
- Unit Tests
- Integration Tests
- Contract Testing
- End to End Tests
- Stress Testing / Performance Tests / Load Testing
- CSS Testing
- Mutation Testing
- Fuzzy Testing
- Chaos Engineering / Chaos Testing / Fault Injection
- Configuration Testing
- A/B Testing
- Threat Analysis
Code Challenges Round 1 (build and test with test diversity)
- (1) Build a converter Framework where you convert complex types.
- (2) Build a task framework where you submit tasks to your own pool of threads.
- (3) Build a validation Framework based on Annotations.
- (4) Build a observability core framework based on latency metrics.
- (5) Build a code generator based on YAML Definitions.
- (6) Build a Core Bank Ledger.
- (7) Build a HTTP Server supporting /GET endpoints.
Code Challenges Round 2 (build and test with test diversity)
- (1) Build a Stress Test Framework for HTTP
- (2) Build a Dont Pad
- (3) Build a Unused Class Detector
- (4) Build a Murder Mistery Game using terminal and linux
- (5) Build a Implement your own String Implementation methods: (toArray,foreach,reverse,iterator,length,charAt,equals,isEmpty,replace,substring,trim,toJson,indexOf,hashCode)
- (6) Build a Hibernate Slow Query Detector
- (7) Build a oAuth 2.0 Server
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- Unit Testing Principles, Practices, and Patterns
- xUnit Test Patterns: Refactoring Test Code
- Working Effectively with Legacy Code
- A Philosophy of Software Design, 2nd Edition
- Pragmatic Programmer, The: Your journey to mastery, 20th Anniversary Edition
- Grokking Algorithms, Second Edition
- Introduction to Algorithms, fourth edition
- Lean Software Development: An Agile Toolkit: An Agile Toolkit (Agile Software Development Series)
- Observability Engineering: Achieving Production Excellence
- Refactoring Databases: Evolutionary Database Design
Links
React Resources
Core Learning JavaScript
- ES6
- How nodejs Reactor Pattern/Architecture works
- Promises, Async/Await
- Classes, Objects, Arrays, Map and Set, JSON
- Tailwind
Core Learning React
- React Architecture
- Lifecycle Events
- Hooks and custom hooks
- Fetch vs Axios
- Routing
- Pagination
- Service Workers
- Web Components
- Module Federation
- Performance and Profiling
- SWR
- Local Storage
- Session Storage
- Cookies
- IndexedDB
- Drag and Drop API
- Intersection Observer API
- Mutation Observer API
- Canvas API
- Context Security Policy (CSP)
Advanced
- Electron
- Next.js
- WebAssembly
- Million.js
State Management
- Redux
- Context Api
- MobX
- Zustand
- Recoil
- Jotai
- XState
Testing
- React Testing Library
- Jest
- Cypress
Better React
Better JS Runtime
The future, maybe?
OOAD Challenges - Round 1
- (1) Build a TAX system where different products have different tax per state and year.
- (2) Build a Logger Builder Router System where you can log into FS, ELK or any other log system where you can configure the logs to be sync or assync using the same API.
- (3) Build Render Template where the same temple can be render in HTML, PDF or CSV.
- (4) Build A Logistic System where you need to calculate different freigth prices based on volume, size and type of transportation i.e boat, truck, rail, prices are dynamic they keep changing.
- (5) Build Restaurant Queue System Capable of telling how long each dish will take.
- (6) Build Guitar Factory System where you can specify details of a guitar and the system creates a custon guitar for you with OS, Specs, Models. The system should keep track of Inventory.
- (7) Build Ticket system, where you should be able to sell x number of ticker per different shows and choose the seats number, zone of the venue, date and respect maximun capacity.
OOAD Challenges Round 2
- (1) Build a Grocery TODO List system (add item, remove, mark as done, do, re-do, listAll)
- (2) Build a FileShare System (save files, restore files, delete files, listFiles, Search) with encryption
- (3) Build a Note Taking system (add notes,save notes,edit notes, delete notes, sync)
- (4) Build a Calendar system (book meetings, remove meetings, listMeetings, suggest best time for 2 people)
- (5) Build a Redis clone client/server (Strings: set,get,remove,append, maps: set,get,keys,values)
- (6) Build a Teacher’s Class Organizer/Optimizer
- (7) Build a Social Media Sharing Photo App (publish photos, tag photos, timeline, comments)
Code Challenges - Round 1
- (1) Build your own Wheater App(show the wheater in celcius/fahrenheit, annimations)
- (2) Build your own Trello(Simple Kanban board, create: cards, collumns, move, delete)
- (3) Build your own Netflix(Stream the movies from youtube)
- (4) Build your own Amazon Retail(List product, search, rate, recomendations)
- (5) Build your own Linux Terminal (ls, cat, mkdir, touch, echo, cd)
- (6) Build your own Slack (profile, chat rooms, notifications)
- (7) Build your own Notability (list, make notes)
Code Challenges - Round 2
- (1) Build your own Time Tracker App (start, stop, laps)
- (2) Build your own Calendar App (Book meetings, edit, remove, sugest best time for 2 people)
- (3) Build your own Benchmark App for JS code
- (4) Build your own Flap Bird clone game
- (5) Build your own MS Paint clone App
- (6) Build your own Video Player
- (7) Build your own React (render, pass props, mount/unmount hooks)
Code Challenges - Round 3
- (1) Build your own Linter
- (2) Build your own Testing Framework
- (3) Build your own Fetch Library
- (4) Build your own Data Faker
- (5) Build your own Background Process Job Manager
- (6) Build your own Http Server
- (7) Build your own NodeJS Runtime
- (8) Build your own Tailwind CSS
- (9) Build your own React Renderer
Links
- Eloquent JavaScript - 4th edition (2024)
- CSS Hell
- Learn how React Reconciler package works by building your own lightweight React DOM
- How to write your own Virtual DOM
- Build your own React
- WTF is JSX (Let’s Build a JSX Renderer)
- Clean Code with TypeScript
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- Eloquent JavaScript, 3rd Edition
- Effective TypeScript
- Implementation Patterns
- Unit Testing Principles, Practices, and Patterns
- The Road to React: Your journey to master React.js in JavaScript
- Learning React: Modern Patterns for Developing React Apps
- React Cookbook
- 14 Habits of Highly Productive Developers
- Grokking Algorithms
- Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability
React Native Resources
Core Learning JavaScript
- ES6
- How nodejs Reactor Pattern/Architecture works
- Promises, Async/Await
- Classes, Objects, Arrays, Map and Set, JSON
Core Learning RN
- React Native Architecture (Thread model, Fabric)
- Lifecycle Events
- Hooks and custom hooks
- Fetch vs Axios
- Navigation
- Deep Linking
- Analytics
- Geolocation
- Internationalization
- Animation
- Routing
- FlatList + Pagination
- Expo
- Offline: AsyncStorage
- Native Modules (IOS and Android)
- Debugging: JavaScript Remotely, React DevTools
- Performance and Profiling
State Management
- Redux
- Context Api
- MobX
Testing
- React Native Testing Library
- Jest
- Detox
Advanced
OOAD Challenges - Round 1
- (1) Build a TAX system where different products have different tax per state and year.
- (2) Build a Logger Builder Router System where you can log into FS, ELK or any other log system where you can configure the logs to be sync or assync using the same API.
- (3) Build Render Template where the same temple can be render in HTML, PDF or CSV.
- (4) Build A Logistic System where you need to calculate different freigth prices based on volume, size and type of transportation i.e boat, truck, rail, prices are dynamic they keep changing.
- (5) Build Restaurant Queue System Capable of telling how long each dish will take.
- (6) Build Guitar Factory System where you can specify details of a guitar and the system creates a custon guitar for you with OS, Specs, Models. The system should keep track of Inventory.
- (7) Build Ticket system, where you should be able to sell x number of ticker per different shows and choose the seats number, zone of the venue, date and respect maximun capacity.
OOAD Challenges Round 2
- (1) Build a Grocery TODO List system (add item, remove, mark as done, do, re-do, listAll)
- (2) Build a FileShare System (save files, restore files, delete files, listFiles, Search) with encryption
- (3) Build a Note Taking system (add notes,save notes,edit notes, delete notes, sync)
- (4) Build a Calendar system (book meetings, remove meetings, listMeetings, suggest best time for 2 people)
- (5) Build a Redis clone client/server (Strings: set,get,remove,append, maps: set,get,keys,values)
- (6) Build a Teacher’s Class Organizer/Optimizer
- (7) Build a Social Media Sharing Photo App (publish photos, tag photos, timeline, comments)
Code Challenges - Round 1
- (1) Build your own Wheater App(show the wheater in celcius/fahrenheit, annimations)
- (2) Build your own Trello(Simple Kanban board, create: cards, collumns, move, delete)
- (3) Build your own Netflix(Stream the movies from youtube)
- (4) Build your own Amazon Retail(List product, search, rate, recomendations)
- (5) Build your own Linux Terminal (ls, cat, mkdir, touch, echo, cd)
- (6) Build your own Slack (profile, chat rooms, notifications)
- (7) Build your own Notability (list, make notes)
Code Challenges - Round 2
- (1) Build your own Time Tracker App (start, stop, laps)
- (2) Build your own Calendar App (Book meetings, edit, remove, sugest best time for 2 people)
- (3) Build your own Benchmark App for JS code
- (4) Build your own Flap Bird clone game
- (5) Build your own MS Paint clone App
- (6) Build your own Video Player
- (7) Build your own React (render, pass props, mount/unmount hooks)
Code Challenges - Round 3
- (1) Build your own Linter
- (2) Build your own Testing Framework
- (3) Build your own Fetch Library
- (4) Build your own Data Faker
- (5) Build your own Async Logger
- (6) Build your own Internal Metrics System
- (7) Build your own HTML Parser
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- Eloquent JavaScript, 3rd Edition
- Effective TypeScript
- Implementation Patterns
- Unit Testing Principles, Practices, and Patterns
- Mastering React Native
- Fullstack React Native: Create beautiful mobile apps with JavaScript and React Native
- React Cookbook
- 14 Habits of Highly Productive Developers
- Grokking Algorithms
- Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability
Scala Resources
Core Scala
- Scala Basics
- Variables
- Functions
- Classes
- Traits
- Objects
- Case Classes
- Case Objects
- Sealed Traits
- Pattern Matching
- Tuples
- Generics
- Monads
- Option
- Try
- Either
- Future
- List
- Map
- For Comprehensions
- Mutable and Immutable Collections
- Scala Test
- Scala Check
- Higher Order Functions
- Currying
- Partial Functions
- Type Classes
- Tail Recursion
- Reflection
- Implicits
- Advanced Monads
- IO
- State
- Reader
- Writer
- Free
- Parser Combinators
- Macros
Spring Stack
- Spring Core - IoC
- Spring Core - Bean Scopes(Singleton, Prototype)
- Spring Core - Setter/Contructor Injection
- Spring Core - Bean Post Processor
- Spring Core - @Value
- Spring Core - Testing, Environment, WebTestClient
- Spring Boot - Rest Support, RestTemplate
- Spring Boot - Integration Test with Rest
- Spring Data JDBC
- Cache with Caffeine
- Configure Transaction management with JPA
- Spring Security: CSRF Protection
- Spring Security: Authorize HTTP Requests(HttpSecurity and SecurityFilterChain)
Learn Frameworks and Libs
- SBT: Simple Build Tool
- Gson
- Spring Data JDBC
- Pekko
- Json4S
- Slick
- Cats
- ZIO
- Scalaz
- Http4s
- Circe
- Specs2
- Tapir
Functional Programing Challenges 1
- (1) S99 Problems
- (2) Project Euler
OOAD Challenges Round 1
- (1) Build a TAX system where different products have different tax per state and year.
- (2) Build a Logger Builder Router System where you can log into FS, ELK or any other log system where you can configure the logs to be sync or assync using the same API.
- (3) Build Render Template where the same temple can be render in HTML, PDF or CSV.
- (4) Build A Logistic System where you need to calculate different freigth prices based on volume, size and type of transportation i.e boat, truck, rail, prices are dynamic they keep changing.
- (5) Build Restaurant Queue System Capable of telling how long each dish will take.
- (6) Build Guitar Factory System where you can specify details of a guitar and the system creates a custon guitar for you with OS, Specs, Models. The system should keep track of Inventory.
- (7) Build Ticket system, where you should be able to sell x number of ticker per different shows and choose the seats number, zone of the venue, date and respect maximun capacity.
OOAD Challenges Round 2
- (1) Build a Grocery TODO List system (add item, remove, mark as done, do, re-do, listAll)
- (2) Build a FileShare System (save files, restore files, delete files, listFiles, Search) with encryption
- (3) Build a Note Taking system (add notes,save notes,edit notes, delete notes, sync)
- (4) Build a Calendar system (book meetings, remove meetings, listMeetings, suggest best time for 2 people)
- (5) Build a Redis clone client/server (Strings: set,get,remove,append, maps: set,get,keys,values)
- (6) Build a Teacher’s Class Organizer/Optimizer
- (7) Build a Social Media Sharing Photo App (publish photos, tag photos, timeline, comments)
Code Challenges Round 1
- (1) Build a converter Framework where you convert complex types.
- (2) Build a task framework where you submit tasks to your own pool of threads.
- (3) Build a validation Framework based on Annotations.
- (4) Build a observability core framework based on latency metrics.
- (5) Build a code generator based on YAML Definitions.
- (6) Build a Core Bank Ledger.
- (7) Build a HTTP Server supporting /GET endpoints.
Code Challenges Round 2
- (1) Build a Stress Test Framework for HTTP
- (2) Build a Dont Pad
- (3) Build a Unused Class Detector
- (4) Build a Murder Mistery Game using terminal and linux
- (5) Build a Implement your own String Implementation methods: (toArray,foreach,reverse,iterator,length,charAt,equals,isEmpty,replace,substring,trim,toJson,indexOf,hashCode)
- (6) Build a Hibernate Slow Query Detector
- (7) Build a oAuth 2.0 Server
Books
- Build Applications with Scala
- Learn you a haskell for greater good
- Programming in Scala
- Scala Cookbook: Recipes for Object-Oriented and Functional Programming
- Functional Programming, Simplified: (Scala edition)
Security & InfoSec Resources
Important Topics
- CIA Triad (Confidentiality, Integrity, Availability)
- Defense in Depth
- Zero Trust Architecture
- Threat Modeling
- Risk Assessment
- Incident Response
- Vulnerability Management
- Security by Design
- Least Privilege Principle
- Security Operations Center (SOC)
- Digital Forensics
- Social Engineering
Security Frameworks & Standards
- NIST Cybersecurity Framework
- ISO 27001/27002
- CIS Controls
- OWASP Top 10
- SANS Top 25
- MITRE ATT&CK
- PCI DSS
- SOX Compliance
- GDPR
- HIPAA
Penetration Testing Tools
Network Scanning & Enumeration
Web Application Testing
Exploitation Frameworks
Wireless Security
Social Engineering
Security Monitoring & SIEM
SIEM Platforms
Network Monitoring
Threat Intelligence
Vulnerability Management
Vulnerability Scanners
Static Code Analysis
Container Security
Cloud Security
AWS Security
Multi-Cloud Security
Cryptography & PKI
Cryptographic Libraries
PKI Tools
Security Challenges Round 1
- (1) Build a Vulnerability Scanner that can identify common web application vulnerabilities (SQL injection, XSS, CSRF) with custom payloads and reporting.
- (2) Create a Network Intrusion Detection System (NIDS) that can monitor network traffic and detect suspicious activities using signature and anomaly-based detection.
- (3) Build a Log Analysis System that can parse security logs from multiple sources, correlate events, and generate alerts for potential security incidents.
- (4) Create a Password Security Audit Tool that can check password strength, detect common passwords, and implement secure password policies.
- (5) Build a Phishing Detection System that can analyze emails and websites to identify phishing attempts using machine learning and heuristic analysis.
- (6) Create a File Integrity Monitoring System that can detect unauthorized changes to critical system files and configurations.
- (7) Build a Security Information Dashboard that aggregates security metrics from multiple tools and provides real-time security posture visibility.
Security Challenges Round 2
- (1) Create a Threat Hunting Platform that can proactively search for advanced persistent threats (APTs) using behavioral analysis and threat intelligence.
- (2) Build a Zero Trust Network Access (ZTNA) System with identity verification, device compliance checking, and micro-segmentation capabilities.
- (3) Create an Automated Incident Response System that can contain threats, collect forensic evidence, and orchestrate response workflows.
- (4) Build a Cloud Security Posture Management (CSPM) tool that can assess cloud configurations against security best practices and compliance requirements.
- (5) Create a Deception Technology Platform with honeypots, honeynets, and decoy systems to detect and analyze attacker behavior.
- (6) Build a Security Orchestration, Automation and Response (SOAR) platform that can automate security workflows and integrate multiple security tools.
- (7) Create a Digital Forensics Investigation System that can acquire, preserve, analyze, and report on digital evidence from various sources.
Security Challenges Round 3
- (1) Build a Machine Learning-based User and Entity Behavior Analytics (UEBA) system that can detect insider threats and compromised accounts.
- (2) Create a Threat Intelligence Platform that can collect, analyze, and share threat indicators across multiple organizations with automated enrichment.
- (3) Build a Secure Software Development Lifecycle (SSDLC) Platform with automated security testing, code analysis, and compliance checking.
- (4) Create a Privacy-Preserving Data Analytics System using techniques like differential privacy, homomorphic encryption, and secure multi-party computation.
- (5) Build a Quantum-Safe Cryptography Implementation that can protect against future quantum computing threats with post-quantum algorithms.
- (6) Create a Security Awareness Training Platform with phishing simulations, interactive content, and behavioral change measurement.
- (7) Build a Cyber Threat Intelligence Sharing Platform that enables real-time threat information exchange between organizations while preserving anonymity.
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- The Web Application Hacker’s Handbook
- Hacking: The Art of Exploitation
- The Shellcoder’s Handbook
- Black Hat Python
- Gray Hat Hacking: The Ethical Hacker’s Handbook
- The Tangled Web: A Guide to Securing Modern Web Applications
- Security Engineering: A Guide to Building Dependable Distributed Systems
- Applied Cryptography
- Cryptography Engineering
- The Art of Memory Forensics
- Malware Analyst’s Cookbook
- Practical Malware Analysis
- Network Security Assessment
- The Practice of Network Security Monitoring
- Blue Team Handbook: Incident Response Edition
- Red Team Development and Operations
- Social Engineering: The Art of Human Hacking
- The Cuckoo’s Egg
- Ghost in the Wires
- Countdown to Zero Day
- The Phoenix Project
- CISSP All-in-One Exam Guide
- Security+ Guide to Network Security Fundamentals
Links
- OWASP
- SANS Institute
- NIST Cybersecurity
- CVE Database
- Exploit Database
- SecurityFocus
- Krebs on Security
- Dark Reading
- Threatpost
- The Hacker News
- Cybersecurity & Infrastructure Security Agency
- US-CERT
- FIRST
- ISACA
- (ISC)²
- CompTIA Security+
- CISSP
- CISM
- CEH
- OSCP
- CISSP Study Guide
- Cybrary
- Coursera Cybersecurity
- edX Cybersecurity
- SANS Training
- Infosec Institute
- Udemy Security Courses
- Pluralsight Security
UX Resources
Technology / Skills
- Figma
- Heap Analytics
- Typescript (need to be able to read JS Code)
- JavaScript (need to be able to read JS Code)
- Need to be able to run Webapp and Mobile App locally
- UI Patterns for Mobile
- Web UI Patterns
- Accessibility Patterns
- Usability Patterns
- User Research Patterns
- A/B Testing Patterns
- Design Systems / Atomic Design
- Design Thinking
- Startegic Design
- Design Sprint
- Design Ops
- Dark Patterns
- Microinteractions
- Material Design
- CSS
- HTML
- React
- Responsive Design
- LLMs and UX Writing
- LLMs and UX Research
- LLMs and Figma Design
Design Challenges Round 1
- (1) Design a Netflix-like clone
- (2) Design a Spotify-like clone
- (3) Design a Uber-like clone
- (4) Design a Amazon-like clone
- (5) Design a Facebook-like clone
- (6) Design a Modern Bank Webapp
- (7) Design a Metrics Dashboard app
Research/Presentation Challenges Round 1
- (1) Research Modern Banking
- (2) Research Modern Credit Cards
- (3) Research Modern Payments Solutions
- (4) Research Modern FinTech Startups
- (5) Research Modern Open Banking
- (6) Research Modern Loans
- (7) Research Modern Marketplaces
Random Challenges Round 1
- (1) Pick up 10 random UIs and make proposals to make them better (use Figma)
- (2) Pair with an Engineer everyday 2h per day (UI or Mobile)
- (3) Given a bad UI - make 8 versions of the UI and write trade-offs + Figmas
- (4) Do UX reasearch on a random app/domain
- (5) Do UX writting for core flows of a random UI
- (6) Propose a new feature for a random app
- (7) Do a usability test on a random UI
Books
- Principles of Software Architecture Modernization
- Continuous Modernization
- Don’t Make Me Think, Revisited: A Common Sense Approach to Web Usability
- The Design of Everyday Things: Revised and Expanded Edition
- Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days
- Empowered: Ordinary People, Extraordinary Products (Silicon Valley Product Group)
- Inspired: How to Create Tech Products Customers Love (Silicon Valley Product Group)
- Continuous Discovery Habits: Discover Products that Create Customer Value and Business Value
- The Mom Test: How to talk to customers & learn if your business is a good idea when everyone is lying to you
- The Lean Startup: How Today’s Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses
- The Startup Owner’s Manual: The Step-By-Step Guide for Building a Great Company
- UX Research: Practical Techniques for Designing Better
- Lean UX: Designing Great Products with Agile Teams
- Outcomes Over Output: Why customer behavior is the key metric for business success
- The Jobs To Be Done Playbook: Align Your Markets, Organization, and Strategy Around Customer Needs
- User Story Mapping: Discover the Whole Story, Build the Right Product
- Lean Software Development: An Agile Toolkit: An Agile Toolkit (Agile Software Development Series)