Show HN 작가 — 데이터 기반 에디션
이 스킬은 250개의 실제 상위 게시물에서 추출한 패턴을 사용하여 HN 게시물을 초안합니다. 아래의 모든 규칙은 관습이 아닌 관찰된 데이터에서 비롯되었습니다.
데이터가 말하는 것 (글을 쓰기 전에 이 내용을 내면화하세요)
이 내용은 2026년 4월 18일에 스크래핑한 250개 상위 HN 게시물에서 얻은 결과입니다. 이 내용은 HN 글쓰기에 대한 기존의 통념을 무시합니다.
제목 길이는 점수의 가장 강력한 단일 예측 변수입니다.
- 40자 미만: 평균 248점 (n=82)
- 40~59자: 평균 192점 (n=68)
- 60~79자: 평균 150점 (n=91)
- 80자 이상: 평균 131점 (n=9) 기본 목표: 40자 미만. 엄격한 상한선: 60자.
본문은 점수에 영향을 미치지 않습니다. 게시물의 90%는 본문이 없었습니다. 본문이 있는 평균: 189점. 본문이 없는 평균: 193점. 통계적으로 동일합니다. 본문은 제목에 담을 수 없는 진정으로 흥미로운 기술적 세부 사항이 있는 경우에만 작성할 가치가 있습니다. 신뢰도를 높이기 위해 본문을 작성하지 마십시오.
Show HN 접두사는 점수를 억제합니다. Show HN 게시물의 평균 점수는 94점인 반면, 일반 제목은 186점 이상입니다. 이 라벨은 "내 물건에 대한 피드백을 원합니다"라는 신호를 보내며, 더 회의적인 읽기를 유발합니다. 프로젝트가 진정으로 참신한 경우에만 "Show HN:"을 사용하십시오. 항상 일반 제목 대안을 함께 제공하십시오.
1인칭 제목이 무기명 진술보다 성능이 뛰어납니다. 1인칭 ("나는…", "내…", "우리는…"): 평균 291점 (n=9). 일반 진술: 평균 186점 (n=126). 빌더의 관점이 이야기의 일부라면, 그것으로 시작하십시오.
질문은 업보트보다 댓글을 더 많이 생성합니다. 질문 제목의 평균 댓글 대 점수 비율은 1.0배 이상입니다. 순수 점수보다는 토론에 가장 적합합니다. 사용자에게 무엇을 최적화하고 있는지 쓰기 전에 물어보십시오.
지속적으로 더 나은 성과를 내는 주제:
- 보안 / 백도어 / 침해 사고: 평균 308점
- 프라이버시 / 감시 / 데이터 스토리: 평균 282점
- AI / LLM 릴리스: 평균 266점 (42개 게시물 — 가장 큰 카테고리)
- 오픈소스 릴리스: 평균 485점 (표본은 적지만 강한 신호)
가장 높은 점수를 받은 제목은 한 가지 공통점이 있습니다: 주제가 아니라 이야기입니다. "누군가 30개의 워드프레스 플러그인을 구입해 모두에게 백도어를 심었다" — 1192점. "Google이 나와의 약속을 어겼습니다 – 이제 ICE가 내 데이터를 갖고 있습니다" — 1688점. 주제는 "워드프레스 플러그인 보안"입니다. 이야기는 행위자, 행동, 그리고 이해관계가 있습니다.
1단계: 무엇보다 먼저 사용자에게 한 가지 질문을 하세요
초안을 작성하기 전에 물어보세요:
"두 가지 빠른 질문:
- 점수(도달률)를 최적화하고 있습니까, 아니면 댓글(토론)을 최적화하고 있습니까?
- 프로젝트가 무엇을 하는지 — 한 문장으로, 기술적으로, 형용사 없이?"
두 답변을 모두 받을 때까지 진행하지 마십시오.
2단계: 올바른 게시물 유형 결정
프로젝트와 목표에 따라 사용할 형식을 결정하십시오:
일반 제목 (권장 기본값) 접두사 없음. 단순히 무엇인지 또는 무슨 일이 일어났는지. 가장 높은 평균 점수. 다음 경우에 사용: 릴리스, 기사, 도구 또는 이벤트 공유.
Show HN: 접두사 (드물게 사용) 다음 경우에만 사용: 프로젝트가 작동하는 데모이고, 빌더가 질문에 답변할 수 있으며, 기술적 구현이 흥미로운 부분인 경우. 평균 점수는 낮지만(94), 프로젝트가 진정으로 참신할 때 진정성을 신호합니다. 비교를 위해 항상 일반 제목 대안도 함께 초안을 작성하십시오.
Ask HN: 접두사 다음 경우에 사용: 목표가 홍보가 아닌 토론인 경우. 평균 참여 비율 > 1.0배. "누가 X를 사용하고 있나요?" 또는 "Y를 해야 할까요?"와 같은 게시물에 가장 적합.
Tell HN: 접두사 내부고발, 책임 추궁, 또는 폭로. 819점의 데이터 포인트 하나. 게시물이 사실에 기반하고, 검증 가능하며, 빌더가 명시된 경우에만 사용.
3단계: 제목 초안 작성
제목이 전체 게시물입니다. 본문은 선택 사항으로 취급하십시오.
데이터에서 파생된 규칙:
- 40자 미만을 목표로 하십시오. 20자 초과 시 평균 약 30점이 손실됩니다.
- 카테고리가 아닌 이야기를 쓰십시오. 명사구보다 행위자 + 행동 + 이해관계가 더 좋습니다.
- 빌더의 관점이 중요할 때 1인칭 ("나는…")은 일반 진술보다 평균 약 100점을 추가합니다.
- 마케팅 형용사는 사용하지 마십시오. 문자 그대로의 사양이 아닌 한 "빠른", "간단한", "강력한", "가벼운" 사용 금지 (예: "35B-A3B"는 사양이고 "강력한"은 사양이 아닙니다).
- 일반성보다 구체성. "인기 CMS 플러그인"보다 "30개의 워드프레스 플러그인".
- 대괄호 안의 연도는 읽을 가치가 있는 고전 신호: (2008), (1956). 시간이 지나도 좋은 평가를 받은 오래된 콘텐츠를 링크할 때 사용.
- 부제목 형식의 경우 en 대시(–): "제품 이름 – 하는 일". 하이픈(-)이 아닙니다.
세 가지 변형을 초안으로 작성하십시오:
- 가능한 가장 짧게 (35자 미만 목표) — 필수적이지 않은 모든 것 제거
- 스토리 각도 — 행위자 + 행동 + 이해관계
- 기술 각도 — 흥미로운 엔지니어링 결정으로 시작
그런 다음 길이 테스트를 적용하십시오: 각각의 문자를 세십시오. 60자를 초과하는 것은 플래그를 지정하십시오.
4단계: 본문을 작성할지 결정
스스로에게 물어보십시오: 기술 구현에 제목에 담을 수 없고 HN 엔지니어들이 진정으로 흥미롭게 여길 세부 사항이 있습니까?
예: 본문을 작성하십시오 (5단계 참조). 아니오: 제목에서 멈추십시오. 본문이 없는 것이 부풀려진 본문보다 낫습니다.
데이터는 본문이 점수를 증가시키지 않음을 보여줍니다. 본문을 작성해야 하는 유일한 이유는 엔지니어들이 "이게 어떻게 작동하나요?"라고 물을 만큼 구현이 흥미롭고 미리 답변을 원하는 경우입니다.
5단계: 본문 작성 (4단계에서 예라고 답한 경우에만)
구조 — 간결하게 유지:
1행: 한 문장. 무엇을 구축했고 왜 구축했는지. 1인칭. "X를 소개합니다." 또는 "X는 ~하는 도구입니다."가 아닙니다. 그냥: "Y 때문에 X를 구축했습니다."
2~4행: 진짜 이유. 정직하게. 구체적으로. 직접 겪은 문제였습니까? 직장에서 좌절감을 주는 무언가? 호기심? "개발자들은 종종 ~로 어려움을 겪습니다"보다 "~해서 짜증났습니다"가 더 좋습니다. 빌더의 목소리가 포인트입니다.
5~8행: 실제 작동 방식. 이것이 HN이 읽는 내용입니다. 구체적인 기술 선택을 명명하십시오. 내린 트레이드오프와 그 이유를 명시하십시오. 하나의 흥미로운 엔지니어링 결정이 기능 목록보다 가치가 있습니다.
9행: 현재 상태를 한 문장으로. 오픈소스? 무료? 알파? 단독? 얼마나 오래 작업해 왔는지.
10행: 피드백이나 질문을 초대하는 마무리 문장 한 개. "구현에 관한 질문에 기꺼이 답변하겠습니다." / "비판 환영합니다." 업보트, 공유 또는 가입을 요청하지 마십시오.
엄격한 규칙:
- 150~300단어. 200단어 미만이 일반적으로 더 좋습니다.
- 전체를 1인칭으로.
- 글머리 기호 없음. 헤더 없음. 굵게 없음.
- 본문에 링크 없음. URL은 제출 필드에 입력.
- 마케팅 단어 없음: 획기적인, 혁명적인, 강력한, 견고한, 원활한, 혁신적인, 최고의, 간소화, 활용, 혁신, 최첨단.
6단계: 제시하기 전에 자체 점검
이 목록을 실행하십시오. 출력하기 전에 실패하는 항목을 수정하십시오.
제목:
- 60자 미만 (세어 보기)
- 마케팅 형용사 없음
- 이야기인가 주제인가? (이야기 = 더 좋음)
- 빌더의 관점이 무언가를 추가한다면 1인칭
- 느낌표 없음
본문 (작성한 경우):
- "나는 ~를 구축했습니다" 또는 "지난 N개월 동안…"으로 시작
- 최소한 하나의 특정 기술 이름 또는 아키텍처 결정 포함
- 300단어 미만
- 링크 없음
- 행동 촉구가 아닌 피드백 초대로 마무리
- 마케팅 단어 0개 (5단계의 목록 확인)
게시물 유형:
- Show HN 접두사를 사용하는 경우: 일반 제목 대안도 작성되었습니까?
- 목표가 댓글인 경우: 질문 또는 분열적 프레이밍입니까?
- 목표가 점수인 경우: 질문이 아닌 진술입니까?
7단계: 출력 제시
정확히 다음과 같이 형식을 지정하십시오. 앞뒤로 설명을 추가하지 마십시오.
## HN 게시물
### 권장 제목
[제목 — 가장 짧고 강력한 변형]
### 대체 제목
1. [변형 2]
2. [변형 3]
---
### 본문
[본문 텍스트, 또는 4단계에서 '아니오'인 경우 "권장되지 않음 — 제목으로 충분합니다."]
---
### 노트
- 목표: [점수 / 댓글] — 1단계에서 사용자 답변 기준
- 사용된 게시물 유형: [일반 / Show HN / Ask HN / Tell HN]
- 제목 길이: [N자]
- 게시하기 가장 좋은 시간: 화요일~목요일, 오전 8~10시 미국 동부 시간
- 게시 후: 처음 두 시간 동안 모든 댓글에 응답
- 24시간 동안 다른 곳에 링크를 공유하지 마십시오 — HN은 투표 링을 처벌합니다
8단계: 선택 사항 — 현재 상위 HN 게시물을 스크래핑하여 컨텍스트 확인
사용자가 비슷한 게시물이 최근에 제출되었는지 확인하거나 현재 자신의 카테고리에서 성과가 좋은 게시물을 보고 싶어하는 경우, 스크래퍼를 실행하십시오:
import requests
from concurrent.futures import ThreadPoolExecutor
HN_API = "https://hacker-news.firebaseio.com/v0"
def fetch_item(id_):
try:
r = requests.get(f"{HN_API}/item/{id_}.json", timeout=10)
return r.json() if r.ok else None
except Exception:
return None
ids = requests.get(f"{HN_API}/topstories.json").json()[:250]
with ThreadPoolExecutor(max_workers=20) as ex:
items = [i for i in ex.map(fetch_item, ids) if i]
# 사용자 프로젝트와 관련된 키워드로 필터링
keyword = "YOUR_KEYWORD_HERE"
matches = [i for i in items if keyword.lower() in i.get("title","").lower()]
for i, item in enumerate(matches, 1):
score = item.get("score", 0)
title = item.get("title", "")
by = item.get("by", "")
print(f"{i:>2}. [{score:>4}pts] {title} — {by}")
print(f"\nTotal matching: {len(matches)}")
결과를 다음에 사용하십시오:
- 지난 48시간 내에 거의 동일한 게시물이 제출되었는지 확인 (중복 방지)
- 현재 이 카테고리에서 어떤 제목 패턴이 성공적인지 확인
- 이 주제 영역의 점수 하한선 파악
전체 스크래퍼가 사용되는 경우 결과는 hn_log.csv에 자동으로 추가됩니다.
참고: 데이터셋에서 관찰된 상위 성과 게시물
다음은 상위 250개 게시물 중 실제 게시물입니다. 제목 패턴을 연구하십시오.
| 점수 | 제목 |
|---|---|
| 1941 | Claude Opus 4.7 |
| 1688 | Google broke its promise to me – now ICE has my data |
| 1244 | Qwen3.6-35B-A3B: Agentic coding power, now open to all |
| 1192 | Someone bought 30 WordPress plugins and planted a backdoor in all of them |
| 1141 | DaVinci Resolve – Photo |
| 990 | Codex for almost everything |
| 982 | Stop Flock |
| 909 | A new spam policy for "back button hijacking" |
| 893 | GitHub Stacked PRs |
| 819 | Tell HN: Fiverr left customer files public and searchable |
| 668 | I wrote to Flock's privacy contact to opt out of their domestic spying program |
| 619 | Measuring Claude 4.7's tokenizer costs |
| 561 | God sleeps in the minerals |
| 503 | Want to write a compiler? Just read these two papers (2008) |
최고의 Show HN 제목 (점수 기준): 341 | Show HN: Smol machines – subsecond coldstart, portable virtual machines 199 | Show HN: PanicLock – Close your MacBook lid disable TouchID → password unlock 187 | Show HN: Every CEO and CFO change at US public companies, live from SEC 177 | Show HN: I made a calculator that works over disjoint sets of intervals 152 | Show HN: MacMind – A transformer neural network in HyperCard on a 1989 Macintosh
최고 댓글 대 점수 비율 (토론 최적화 게시물용): 1.91× | Why is IPv6 so complicated? 1.43× | Ask HN: Building a solo business is impossible? 1.20× | Ohio prison inmates built computers and hid them in ceiling 1.13× | Ask HN: Who is using OpenClaw? 1.05× | The future of everything is lies, I guess: Where do we go from here?