# General Principles

Given any NON-TRIVIAL task:

1. Think about how to make the requirement less dumb. Do not assume the
   user knows what the most optimal/right requirement is.
2. Delete code. If you're not adding 10% back, you haven't removed
   enough.
3. Simplify and optimize the design. Best code is no code.
4. Accelerate the cycle time. It's best to try and fail early.
5. Automate. E.g. write scripts to do something repetitive.

# Guidelines

- When authoring commit messages and PR summaries, DO NOT include
  references to Claude.
- If the question from the user can likely be answered by running SQL
  against a database, use derived.public schema of snowflake MCP tool.
- When writing tests, always look at existing tests of similar nature to
  learn about the common practices and styling.
- Blank lines between blocks of source code must NEVER have any
  whitespace/tab characters in them. They MUST NOT be space filled to
  match previous/next line indentation. They MUST have zero characters in
  them.
- Prefer your built-in tools for finding files or reading files over
  running bash commands.
- When faced with an issue, ALWAYS determine the root cause first and
  work your way up from there to fix it. DO NOT resort to simple
  workarounds right off the bat. The ONLY situation where a workaround
  is accepted is if you can reason that it's temporary and document IN
  DETAIL how to remove the workaround and implement a proper fix.
- If you have access to documentation, ALWAYS read it before using a
  feature.
- When making code changes, thrive for testability. When it makes sense,
  write test scripts, unit tests, integration tests, validation test and
  anything else that can give you or the user confidence the changes are
  correct.
- When using the playwright browser tool and trying to scroll up/down,
  always move page by page, or multiple arrow up/down at a time.
- When writing code, optimize for ease of reading, not ease of writing.
  That means, minimzing abstraction layers (repeating code is fine if it
  means reader doesn't have to context switch unnecessarily), minimizing
  the amount of code (e.g. no verbose variable names that are only used in
  a 4 line loop), comments that also explain the "why", not just the
  "what", minimizing number of files.
- When writing python code, ALWAYS ALWAYS add type hints to function and
  method parameters.
- If you need to fetch a URL, use fetch mcp tool (instead of the
  internal tool).