Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

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

Tech Resources Logo

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

Diego Pacheco’s Books

Here is a curated list of books that will help you become a better version of you.

Want to help me?

Consider buying one of my payed booked:

I also have FREE books:

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- where track is: js,ArchDevOps,CN or Mobile.
  • 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

JavaScript Frontend Resources

Mobile

Mobile Resources

Cloud Native

Cloud Native Resources

Software Architecture | DevOps Engineering

Architecture DevOps Resources

GCP

GCP Resources

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:
    • Facebook
    • Twitter
    • 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

  1. You have no comitmment
  2. You will not invest the time to read, do POCs, homeworks
  3. You do not have maturity to recive direct feedback in public
  4. You dont have english or is not willing to learn in 3 months
  5. You don’t want to change, you dont belive in your coaches/mentors
  6. Want complain for sake of complaing, not solution oriented

Do not expect to be easy

  1. I promisse ZERO COMFORT ZONE.
  2. You will need to lern a lot and deliver a lot
  3. High performance teams are not for everyone, they have high pressure.
  4. You will need to be very proactive, take ownership and be autonomous, organized, disciplined on top of things.
  5. Feedback will be constant and direct, you will need to be mature to handle it.
  6. You will need to be very good on comunication, fast response on slack, calls, emails.
  7. 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

  1. High performance sport teams like NBA, European Football leagues, they have families and lives.
  2. You will learn how to operate in a another level.
  3. IF the best team motivate you, want chanlenges, you will grow.
  4. Feel empowered to give push backs.
  5. We care!

Mandatory Readings

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

  1. Always spend time doing research before asking questions.
  2. Write down what you know and what you want to know.
  3. Propose something based on your research.
  4. The questions could also be reviewed and classified if they are good or bad. For sake of improvement.
  5. Think about corner cases / edge cases as as way to generate better questions.
  6. 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.

  1. Function one should return the power of a given person.
  2. Function two should recive 2 names and the with one is the most powerful(should use function one).
  3. 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:

  1. Now could you refactor the code and move the list of friends to a separate class?
  2. Refactor the code so you dont allow the same friend to be added twice.
  3. Refactor the code so you can remove a friend from the list.

More Refactoring:

  1. In one of your classes, could you create a method that tell who is the person with more friends?
  2. In one of your classes, could you create a method that tell who is the person with less friends?
  3. 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:

Jobs Tech 2025

Jobs Reductions July 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

  1. Always meet people expectations and deadlines.
  2. Always do more than people asked of you.
  3. Always do a lot of tests.
  4. Always understand everything you are doing.
  5. Always be proactive and take the lead, ask questions and be on TOP of everything.
  6. Always research, read papers, and check information, double check, LLM still halucinates.
  7. Always compare with other solutions, do benchmarks and different implementations.
  8. Always have great documentation and do great UI/presentations.
  9. 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.


Believe sign

🧬 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

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

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

  1. Skim the paper: Start by reading the abstract, introduction, and conclusion to get a high-level understanding of the paper’s goals and contributions.
  2. Identify key sections: Look for sections that are most relevant to your interests or research. Focus on these sections first.
  3. Take notes: As you read, take notes on important concepts, methods, and results. Summarize key points in your own words to reinforce understanding.
  4. 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:

  1. Understand: Make sure you understand the paper well enough to explain it to others.
  2. Select: Identify the most important points and contributions of the paper.
  3. 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

  1. What: Explain what it thing you are presenting.
  2. How: Explain how it works and how is the architecture under the hood.
  3. Trade-offs: Explain the trade-offs, pros and cons.
  4. Code/DEMO: Show code, if possible, live demo is always good.
  5. 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 Zen by 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?

  1. When you are convincing your team to use a new technology or approach.
  2. When you are trying to get buy-in from stakeholders for a project.
  3. When you are negotiating resources or timelines for your projects.
  4. When you are presenting your ideas or solutions to clients or management.
  5. When you are collaborating with cross-functional teams and need to align on goals.
  6. When you are doing a paper presentation or conference talk to share your work.
  7. When you are mentoring or coaching junior engineers and need to inspire them.
  8. When you are writing documentation or technical blogs to share knowledge.
  9. When you are participating in code reviews and need to persuade others of your viewpoint.
  10. When you are advocating for best practices or standards within your team or organization.
  11. 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.

  1. What is the problem?
  2. What is the solution (IF there are multiple solutions do bike-car-plane).
  3. 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

AI Resources

Important Topics

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

Architecture DevOps Resources

Software Architecture | DevOps Engineering Resources

Architecture and DevOps

Important Topics

Tech

Software Architecture

DevOps Engineering

Books

Software Architecture

DevOps Engineering

Software Architecture

DevOps Engineering

Cloud Native Resources

Cloud Native Resources

Cloud Native

Important Topics

Tech

Books

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

  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.
  2. Build a real-time streaming pipeline using Kafka, Spark Structured Streaming, and Delta Lake. Process IoT sensor data with windowing and aggregations.
  3. Create a dbt project with dimensional modeling (fact/dimension tables), tests, documentation, and CI/CD pipeline deployment to Snowflake.
  4. Build a Docker Compose setup with Kafka, Spark, PostgreSQL, and Jupyter. Create a complete data pipeline that processes sample e-commerce data.
  5. Create Terraform scripts to deploy: S3 data lake with proper partitioning, Glue catalog, Glue ETL job, Lambda for data validation, and IAM roles.
  6. 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.
  7. 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

  1. Build a serverless data pipeline using AWS Lambda, Step Functions, and S3. Process JSON files, transform with Pandas, and load to DynamoDB.
  2. Create a Kubernetes operator in Go that automatically provisions Spark clusters and manages data processing jobs based on custom resource definitions.
  3. Build a data quality monitoring system using Great Expectations, deployed on Kubernetes with alerts to Slack when data quality issues are detected.
  4. Create a multi-tenant data platform using Apache Iceberg tables with row-level security, deployed on EKS with Trino for querying.
  5. Build a feature store using Feast, deployed on Kubernetes, with both batch and real-time feature serving for ML pipelines.
  6. Create a data lineage tracking system using Apache Atlas or DataHub, integrated with Airflow and dbt to automatically track data dependencies.
  7. 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

  1. Create a data mesh implementation with domain-specific data products, each with their own CI/CD, data contracts, and SLA monitoring.
  2. Build a real-time fraud detection pipeline using Kafka Streams, feature engineering with time windows, and model serving with MLflow on Kubernetes.
  3. Create a data observability platform using OpenTelemetry, Grafana, and Prometheus to monitor data pipelines, including latency, throughput, and error rates.
  4. Build a data archiving solution using Apache Pulsar for event streaming, with automatic tiered storage to S3 Glacier for cold data.
  5. Create a data catalog with automated metadata extraction from various data sources (databases, files, APIs) using Apache Nifi and store in Apache Atlas.
  6. Build a real-time recommendation engine using Apache Flink, integrating with Kafka for user events and serving recommendations via a REST API.
  7. 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

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

All the Things Devops

Useful Information

Lean all this tools for Troubleshooting in Linux

Linux Performance / Troubleshooting

GCP Resources

GCP Resources

GCP

Important Topics

Tech

Books

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

JavaScript Frontend Resources

Frontend / JavaScript Resources

JavaScript Technologies

Tech

Books

Mobile Resources

Mobile Resources

Tech

Android
IOS

Books

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

QA Resources

QA Resources

Tech

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

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

Books

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

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

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

Security & InfoSec Resources

Important Topics

Security Frameworks & Standards

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

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