- Avoid C extension modules (NumPy, Cython, ctypes) — use pure Python or `cffi` for native interop.
- Never rely on reference counting for resource cleanup — always use `with` statements for files, sockets, and connections.
- Use `cffi` or `HPy` instead of `ctypes` or the CPython C API for extending Python.
- PyPy's JIT optimizes hot loops — keep tight loops simple and avoid unnecessary dynamic dispatch.
- Don't rely on `__del__` destructors — PyPy's GC is non-deterministic unlike CPython's refcounting.
- Warm up the JIT for at least 2 seconds before benchmarking — cold starts don't reflect real performance.
- Avoid `sys.settrace()` / `sys.setprofile()` — they disable the JIT compiler.
- Prefer `io.BytesIO` / `io.StringIO` over temporary files for in-memory data processing.