Hardware
- Laptop: Macbook M1 Pro 64 GB RAM (★★★★)
- Keyboard: Happy Hacking Keyboard Hybrid Type-S (★★★★)
- Monitor: Dell S3221QS (★★★☆)
- Mouse: Logitech G305 (★★★☆)
- Microphone: Shure MV7 (★★★★)
- Camera: Sony a6000 with Sigma 16mm F1.4 connected via Elgato Cam Link 4k (★★★☆)
Software
Recommended Software to Install
- Cursor
- DataGrip or Postico for SQL
- MongoDB Compass as a MongoDB GUI
- Hoppscotch for API Building (Postman Alternative)
Recommended VSCode/Cursor Extensions
- Prettier
- Vue - Official
- Tailwind CSS IntelliSense
- Git Extension Pack
- Conventional Commits
- Pretty Typescript Errors
- TODO Highlight
- Copilot (if using VSCode)
Products
SaaS products that I have used and would fully recommend
- Linear: Engineering project management
- Stripe: Subscription billing
- Postmark: Transactional email delivery service
- Hookdeck: Webhook infrastructure management
Products I have used and like
- Slack: Daily communication
- Notion: Internal knowledge base
- Super.so: For hosting Notion pages on a custom domain
- Serverless.com: Serverless application development and deployment
- SavvyCal: Scheduling with external clients
- Intercom: Support and user messaging
How I Use Linear for Project Management
Your goal should be to maximize meaningful deployed work by minimizing work-in-progress and minimizing unplanned work.
Task Status
By default, a task should be in the “Backlog” state. It should only be cleared for “Todo” if all designs are ready (or if none are needed), and it will definitely be worked on in the next 1-2 weeks. “In Progress” indicates active development on the task.
You want to minimize the total amount of work that is in one of the below “Started” states.
- Backlog
- Backlog
- Unstarted
- Todo
- Started
- Design Needed: Fresh design or iteration needed
- Holding: De-prioritized for higher priority work
- In Progress: Actively developing
- In Review: Pull request is being Reviewed
- Completed
- Done
Task Labels
Task labels are used in aggregate to see where we are working, and where that work is coming from. We should be spending roughly 20% of sprint time on tech improvements, and as little time as possible on unplanned work. Each task should have an entry in each of the following categories
- Work Type
- Product Feature/Improvement
- Tech Improvement e.g. upgrading codebase to Vue 3
- Internal Business Project e.g. installing Mixpanel to track marketing attribution
- Source
- Planned e.g. scheduled work
- Unplanned e.g. firefighting work or urgent customer requests
- Product
- Our product suite + services + general (if applicable across our product suite)
Task Estimates
1 point = half a developer day
0 points should only be assigned if the work will take less than 30 minutes, including checking in code and deploying. Anything more than 30 minutes should be counted as at least 1 point, to account for context switching. When possible, group small and related tasks.
Estimation is difficult, and gets more difficult on large projects. As much as possible, try to get task sizes under 2 developer days (4 points).
Views
The 3 most important views to create are
- Kanban by Person
- Kanban by Project
- Small Wins
Recommended Reading
Software Dev and DevOps
- Hands on Machine Learning with Scikit-Learn, Keras, and TensorFlow
- Designing Data-Intensive Applications
- The Phoenix Project
- The Lean Startup
- Tidy First
Personal Dev
- Deep Work
- Extreme Ownership
- Never Split the Difference
- Can't Hurt Me