diff --git a/.gitignore b/.gitignore index e89ee37..8299946 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ .DS_Store /book +/src +!/src/SUMMARY.md diff --git a/scrape.sh b/scrape.sh index 01d6091..e6bd1ea 100644 --- a/scrape.sh +++ b/scrape.sh @@ -7,30 +7,49 @@ main() ( wget -q -O ./raw.md https://raw.githubusercontent.com/ZachGoldberg/Startup-CTO-Handbook/main/StartupCTOHandbook.md fi - rm ./src/* + + rm -f ./src/* || true + mkdir -p ./src printf "# Summary\n\n" > ./src/SUMMARY.md + cat ./raw.md \ | ( n=0 + n_f() { + printf %03d.txt $n + } while read -r line; do - n=$((n+1)) - depth="$(echo "$line" | grep -o '^##*')" - ( - echo n=$n - echo line="$line" - echo depth=$depth - ) >&2 - if ((n>20)); then - break - fi + local depth=$( + echo "$line" \ + | grep -o -E '^[^a-z]*#+ ' \ + | grep -o '#' \ + | wc -l \ + | awk '{print $1}' + ) + case "$depth" in + 1|2|3 ) + n=$((n+1)) + printf "%s- [%s](%s)\n" \ + "$(for i in $(seq 0 $depth); do printf " "; done)" \ + "${line#* }" \ + "$(n_f)" \ + | tee -a ./src/SUMMARY.md >&2 + ;; + esac done ) + mdbook build + ) +log() { + echo "| $*" >&2 +} + if [ "$0" == "$BASH_SOURCE" ]; then main "$@" ret=$? diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 25a519c..ac225b8 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -1,2 +1,154 @@ # Summary + - [THE STARTUP CTO'S HANDBOOK](001.txt) + - [Essential Skills And Best Practices For High Performing Engineering Teams](002.txt) + - [By Zach Goldberg](003.txt) + - [Dedications](004.txt) + - [Praise](005.txt) + - [Contents](006.txt) + - [Introduction](007.txt) + - [The Author](008.txt) + - [Using this Book](009.txt) + - [Business Processes](010.txt) + - [People & Culture](011.txt) + - [Management Fundamentals](012.txt) + - [The Professional Skill Tree](013.txt) + - [Kaizen: Continuous Improvement](014.txt) + - [Coaching](015.txt) + - [Find a Management Mentor](016.txt) + - [1:1 MEETINGS](017.txt) + - [SKIP-LEVEL MEETINGS](018.txt) + - [COACHING MANAGERS](019.txt) + - [1:1 Meetings with Engineers](020.txt) + - [Benefits of Overcommunication](021.txt) + - [Meetings and Time Management](022.txt) + - [The HIPPO](023.txt) + - [Mini Management Frameworks](024.txt) + - [Joining a Team](025.txt) + - [Working With The CEO](026.txt) + - [Delivering Bad News](027.txt) + - [Speaking the Language of Your Audience](028.txt) + - [Technical Communication Best Practices](029.txt) + - [Hiring and Interviewing](030.txt) + - [Hire like a Startup](031.txt) + - [Speed is Your Friend!](032.txt) + - [When To Hire: Headcount Planning](033.txt) + - [Hiring Goals and Objectives](034.txt) + - [The Job Description](035.txt) + - [Sourcing Candidates](036.txt) + - [A Note on the Mathematics of Incentivizing Referrals](037.txt) + - [Interviewing Best Practices](038.txt) + - [Intake Forms](039.txt) + - [Culture Interview](040.txt) + - [Coding Challenge](041.txt) + - [Technical Interviews](042.txt) + - [Executive interviews](043.txt) + - [Reference Checks](044.txt) + - [Onboarding](045.txt) + - [Boy Scout Rule: Onboarding](046.txt) + - [Performance Management](047.txt) + - [Performance Improvement Plans (PIPs)](048.txt) + - [Changing Seats](049.txt) + - [Firing](050.txt) + - [Team Makeup](051.txt) + - [Seniority Makeup](052.txt) + - [Technical Specialization](053.txt) + - [Project Maintenance: The Two Crews Philosophy](054.txt) + - [Team Organization](055.txt) + - [Managing Remote Teams](056.txt) + - [Leadership Responsibilities](057.txt) + - [Product and Design Teams](058.txt) + - [Design Systems](059.txt) + - [PRDs and Specs](060.txt) + - [EPD](061.txt) + - [Product vs. Project Management](062.txt) + - [Managing Managers and Manager Training](063.txt) + - [Finances and Budgeting](064.txt) + - [The Budget](065.txt) + - [Working with your CFO](066.txt) + - [Measuring Engineering Velocity/Health](067.txt) + - [Fundraising and Due Diligence](068.txt) + - [Vendor Management](069.txt) + - [Which Type of Startup CTO Are You?](070.txt) + - [The Tech-Focused CTO *AKA The Chief Architect*](071.txt) + - [The People-Focused CTO *AKA the VP of Engineering (VPE)*](072.txt) + - [The Externally Focused CTO *AKA The Head of Technical Sales/Marketing*](073.txt) + - [Technical Team Management](074.txt) + - [Tech Culture and General Philosophy](075.txt) + - [Ten Pillars of Tech Culture](076.txt) + - [Tech Debt](077.txt) + - [Tech Debt And The Product Lifecycle](078.txt) + - [Communication of Tech Debt](079.txt) + - [Technology Roadmap](080.txt) + - [Timeframes](081.txt) + - [Tech Process](082.txt) + - [Workflow](083.txt) + - [Engineering Estimates](084.txt) + - [Burndown Charts](085.txt) + - [Choosing A Workflow](086.txt) + - [Cooldown/Innovation Sprints](087.txt) + - [Technical Planning And Specifications](088.txt) + - [Prototyping as Part of Spec Writing!](089.txt) + - [Tech Spec Content](090.txt) + - [Tech Spec Approval](091.txt) + - [Developer Experience (DX)](092.txt) + - [Prioritizing Developer Experience](093.txt) + - [Easy Developer Experience Wins](094.txt) + - [Changing Tools For Developer Experience](095.txt) + - [Tech Architecture](096.txt) + - [Architecture](097.txt) + - [Domain-Driven Design](098.txt) + - [Writing Readable, Good Code](099.txt) + - [Coding Patterns](100.txt) + - [API Contracts](101.txt) + - [Documentation](102.txt) + - [Idempotency](103.txt) + - [Data And Analytics](104.txt) + - [Transactional Data](105.txt) + - [Analytical Business Intelligence Data](106.txt) + - [Behavioral Data](107.txt) + - [General Tips And Best Practices For Architecture Design](108.txt) + - [Tools](109.txt) + - [Implementing Internal Technology Radar](110.txt) + - [Boring Technology](111.txt) + - [Tool Cost](112.txt) + - [Budget](113.txt) + - [Tracking](114.txt) + - [DevOps](115.txt) + - [Four Key Metrics (DORA)](116.txt) + - [Reproducibility](117.txt) + - [Containerization](118.txt) + - [Continuous Integration](119.txt) + - [Continuous Deployment](120.txt) + - [Feature Branch Environments](121.txt) + - [Managing DNS](122.txt) + - [Decoupling Shipping Code from Shipping Features (Feature Toggles)](123.txt) + - [System Monitoring: APMs and RUMs](124.txt) + - [Testing](125.txt) + - [Testing/Quality Assurance Teams](126.txt) + - [Test Quality](127.txt) + - [What To Test](128.txt) + - [Testing Type Comparison](129.txt) + - [Unit Tests](130.txt) + - [Integration Tests](131.txt) + - [End-To-End Tests](132.txt) + - [Semi-Automated Testing](133.txt) + - [Source Control](134.txt) + - [Peer Review](135.txt) + - [Ship, Show, Ask](136.txt) + - [Branching Models](137.txt) + - [Long-Lived Vs. Short-Lived Branches](138.txt) + - [Production Escalations](139.txt) + - [Implementing Escalators](140.txt) + - [Root Cause Analysis (RCA) Exercises](141.txt) + - [IT](142.txt) + - [Security and Compliance](143.txt) + - [Auth Security Terminology](144.txt) + - [Security At Startups](145.txt) + - [Compliance](146.txt) + - [Conclusion: Measuring Success](147.txt) + - [Book References](148.txt) + - [Digital References](149.txt) + - [Glossary](150.txt) + - [About the author](151.txt) + - [About the publisher](152.txt)