Random Software Notes
Tags: beginners, programming, cleancode
Published: 2022-08-06 15:39:00

# Clean code

You can rewrite your project keeping only the test
Tell a story 
Write a single behavior per spec
Write code that makes code easier to write
Old code is a trainer for new people
Write code that other people can maintain
Minimize the maintainability risk
Good-Fast-Cheap-Done
The largest threat to reaching scale from a technical perspective was to be complexity, for the both system and the team


# Craftsmanship

- Extreme programming
  * TDD
  * Pair programming
- Career roadmap //TODO0
- Dream job //TODO0
- Autonomy, mastery, and purpose
- Refactoring
- Clean code
- Continuous delivery
- **Look for a company that matches our principles, values, culture, and tech stack**
- Github account, blog, open source contributions, and technical communities
- **Autonomy**: Control, **Mastery**: Learning, improve, **Purpose**: Goal
- What's the **business value** of all this technical stuff: Quality, Predictability, Maintainability, Flexibility
- Mentorship
- Architecture and code should reflect the intent

## Interviews

- Code submits
- Passionate about technology
- Learning roadmap
- Important topics
- Multi-phase and analyze different aspects
- Talk about real scenarios exploring different approaches and solutions

## Best practices

- Modularity
- Takes apart time/order/flow: queues, idempotency, communication, transactions
- Good design is separated into things that can be composed
- Each component should be about one or a few things
- Agile is about generating value with quality
- Building the right thing and the thing right
- Autonomous teams, remove dependencies
- How it's done is as important as getting done
- Make it run, then make it right, then make it fast
- Programmer time is expensive
- Data-driven applications
- Robustness it's the product of simplicity + testability
- Unix: Clarity, composition
- Conway's law: systems are constrained to the communication structures of these organizations
- **it's harder to read code than write it**
- The only form to go fast it's to go well
- Don't allow broken windows

## Job 

- Innovation
- Sharing 
- Architecture
- Book 
- Technical groups

## Technical debt

- Is hard to change
- Could be architecture, Code, Documentation

## Agile

- Focus on outcome not outputs



## Study
- Set concrete measurable logs, practice, and teach
- Be a builder
- Share what you learn
- Mentoring and documentation

## Programmers oath
I Promise that to the best of my ability and judgment:

- I will not produce harmful code.
- The code that I produce will always be my best work. I will not knowingly allow code that is defective either in behavior or structure to accumulate.
- I will produce, with each release, a quick, sure, and repeatable proof that every element of the code works as it should.
- I will make frequent, small releases so that I do not impede the progress of others.
- I will fearlessly and relentlessly improve my creations at every opportunity. I will never degrade them.
- I will do all that I can to keep the productivity of myself, and others, as high as possible. I will do nothing that decreases that productivity.
- I will continuously ensure that others can cover for me and that I can cover for them.
- I will produce estimates that are honest both in magnitude and precision. I will not make promises without certainty.
- I will never stop learning and improving my craft.


### Bugs
- Most expensive in production
- Expensive in QA
- Is cheaper to fix in Dev
- Least expensive to avoid in design

### Qualities

- Problem solver
- Skilled
- Mentor
- Excellent learner

Abstraction is the key to simple code

Saying no is as important as saying yes and taking responsibility

Don’t write code when you are tired. Dedication and professionalism are more about discipline than hours. Make sure that your sleep, health, and lifestyle are tuned so that you can put in eight good hours per day.

If you compromise the structure you compromise the future
Remove ambiguity between stakeholders & developers with automation and acceptance of TDD
Automate happy paths with business and unhappy paths
TI evolves from support to a Source of competitive differentiation (develop in-house talent)
Promote craftsmanship and outcome instead of speed features
Unburden top people.. Give time to code and Problem solving instead of bureaucratic navigation hurdles and progress review and updates
Follow your disciplines under pressure... Add more tests more refactors and more pairing
Estimations are distributions and always meet the commitment
Programmers must understand businesses goals
Products are better than projects
Test behaviors, not classes

# Lean Software

- Remove code .. negative value: culture and mindset
- No code is the best code
- Domain-driven design code starts with names but is more
- 10x developer if you make 10 people better
- Technical debt: Invest time in writing test and automation tools not debugging
- Create software as a sustainable code not speed and rot

# Programers oath

- Don't ship harmful code
- Do your best possible work
- Make a repeatable and quick form of proof of your software delivery correctness
- Improve teams productivity
- Cover each other 
- Provide real estimations
- Make frequent small releases
- I will fearless improve my creations at every opportunity
- I will never stop learning and improving my craft

# Peopleware

- Productivity = Benefit /cost
- Creative work needs time to generate the best outcome
- Make quality set by the buyer rather than the builder
- People under pressure don't work better they work faster

# Startups

- Big will not beat small anymore. The fastest will be beating the slow
- A complex system that works is invariably found to have evolved from a simple system that works
- Startups provide great autonomy and make you take significant decisions
- Purpose, Mastery, Autonomy