惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

美团技术团队
T
The Exploit Database - CXSecurity.com
aimingoo的专栏
aimingoo的专栏
小众软件
小众软件
T
Tailwind CSS Blog
V
V2EX
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
WordPress大学
WordPress大学
Hugging Face - Blog
Hugging Face - Blog
IT之家
IT之家
PCI Perspectives
PCI Perspectives
腾讯CDC
酷 壳 – CoolShell
酷 壳 – CoolShell
Recent Commits to openclaw:main
Recent Commits to openclaw:main
大猫的无限游戏
大猫的无限游戏
The Cloudflare Blog
N
News and Events Feed by Topic
博客园 - 三生石上(FineUI控件)
Help Net Security
Help Net Security
雷峰网
雷峰网
有赞技术团队
有赞技术团队
Last Week in AI
Last Week in AI
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
量子位
GbyAI
GbyAI
O
OpenAI News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
AI
AI
S
Security Affairs
F
Fortinet All Blogs
L
LINUX DO - 最新话题
博客园 - 【当耐特】
Webroot Blog
Webroot Blog
Schneier on Security
Schneier on Security
W
WeLiveSecurity
Security Latest
Security Latest
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Tenable Blog
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
Simon Willison's Weblog
Simon Willison's Weblog
Cyberwarzone
Cyberwarzone
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
C
CERT Recently Published Vulnerability Notes
Engineering at Meta
Engineering at Meta
P
Palo Alto Networks Blog
博客园 - 叶小钗
T
Threatpost
H
Heimdal Security Blog
Microsoft Security Blog
Microsoft Security Blog

Kent C. Dodds Blog

Implementing Hybrid Semantic + Lexical Search Simplifying Containers with Cloudflare Sandboxes Migrating to Workspaces and Nx Offloading FFmpeg with Cloudflare Building Semantic Search on my Content Helping YOU ask ME questions with AI How I used Cursor to Migrate Frameworks The Dow's Start on the Covenant Path 2025 in Review The next chapter: EpicAI.pro AI is taking your job How I increased my visibility Launching Epic Web 2023 in Review Stop Being a Junior RSC with Dan Abramov and Joe Savona Live Stream Fixing a Memory Leak in a Production Node.js App 2022 in Review My Car Accident I Migrated from a Postgres Cluster to Distributed SQLite with LiteFS I'm building EpicWeb.dev A review of my time at Remix Remix: The Yang to React's Yin How I help you build better websites Why I Love Remix The State Initializer Pattern How to React ⚛️ Get a catch block error message with TypeScript Building an awesome image loading experience How Remix makes CSS clashes predictable Introducing the new kentcdodds.com How I built a modern website in 2021 How to use React Context effectively Static vs Unit vs Integration vs E2E Testing for Frontend Apps The Testing Trophy and Testing Classifications Array reduce vs chaining vs for loop Don't Solve Problems, Eliminate Them Super Simple Start to Remix Super Simple Start to ESModules in Node.js JavaScript Pass By Value Function Parameters How to write a Constrained Identity Function (CIF) in TypeScript How to optimize your context value How to write a React Component in TypeScript TypeScript Function Syntaxes Listify a JavaScript Array Build vs Buy: Component Libraries edition Using fetch with TypeScript Wrapping React.useState with TypeScript Define function overload types with TypeScript 2020 in Review Business and Engineering alignment Hi, thanks for reaching out to me 👋 useEffect vs useLayoutEffect Super simple start to Firebase functions Super simple start to Netlify functions Super Simple Start to css variables Favor Progress Over Pride in Open Source Testing Implementation Details How getting into Open Source has been awesome for me useState lazy initialization and function updates Use ternaries rather than && in JSX Application State Management with React Use react-error-boundary to handle errors in React JavaScript to Know for React How I structure Express apps What open source project should I contribute to? When I follow TDD AHA Programming 💡 How I Record Educational Videos Should I write a test or fix a bug? Stop mocking fetch Intentional Career Building Improve test error messages of your abstractions Tracing user interactions with React Eliminate an entire category of bugs with a few simple tools Common mistakes with React Testing Library Super Simple Start to React Stop using client-side route redirects The State Reducer Pattern with React Hooks Function forms Replace axios with a simple custom fetch wrapper How to test custom React hooks React Production Performance Monitoring Should I useState or useReducer? Stop using isLoading booleans Make Your Test Fail Make your own DevTools An Argument for Automation Fix the "not wrapped in act(...)" warning Super Simple Start to ESModules in the Browser Implementing a simple state machine library in JavaScript 2010s Decade in Review Why users care about how you write code Why I avoid nesting closures Don't call a React function component Why your team needs TestingJavaScript.com Inversion of Control Understanding React's key prop How to Enable React Concurrent Mode Profile a React App for Performance
Getting Noticed and Widening Your Reach
2018-09-17 · via Kent C. Dodds Blog

This last week I had three people complaining to me (in individual interactions) that they create cool things, but what they create is not noticed because they don't have a following on Twitter or otherwise. In at least one of the cases there was a fair amount of bitterness. An attitude of: "If you create something it becomes popular by virtue of you being so popular. If I create something, it goes unnoticed even if it's better than what you created."

While this may be true, the attitude bothers me. I'd be classified in the "popular" crowd, so maybe that's why it bothers me, but it also bothers me because it feels like "pride from the bottom looking up" or could also come from a fixed mindset. I wasn't born with a twitter following (though I was born into privilege which makes a non-trivial impact, and I'll address that later). I worked for this by creating things and doing things to get noticed even before I had the following. This is true of most people with a wide reach. In today's newsletter, I'd like to share with you some things that I've seen be an effective way to get your work noticed and widen your reach.

There's not one thing I've done to get noticed and widen my reach. And there's also not a sequence. It's been a mix of several things (including hard work, luck, timing, and kindness of others) that have helped me to do this. Depending on what you're trying to get noticed for, there are different things you can do, so I'll focus on a few and hopefully that'll touch on what you're doing...

Open source

a person touch typing on a laptop

geniejs 🧞‍

My first personal open source project that I wanted to get noticed was geniejs. The first commit was back in 2013. I can't remember exactly how many followers I had, but at the time I was tweeting using Friends+ me (because I thought Google+ was the bomb) and of all my tweets that month, only one got a single favorite. Needless to say, I wasn't well known or popular.

And honestly, my project didn't get super popular at the time either. However, that didn't stop me from working on getting it noticed. I presented it at my work's hack night around that time (it's actually how I got my first fulltime job at Domo), I built a sweet in-browser workshop and used it in my first meetup talk, I then lucked out and got a conference (MidwestJS 2014) to accept me to give that talk there (I only was able to speak because another speaker canceled).

Here are some takeaways from this experience: It never got very popular or widely used (it's still not, despite my level of reach, though it is used by codesandbox!). Despite this it gave me opportunities to improve my skills, show my skills, get a job, and speak at a meetup and conference. This was primarily a combination of luck, timing, assistance (my friend Merrick Christensen should be thanked for helping me turn this into a job opportunity), courage (to propose my library as the subject for a talk at a meetup and conference), and hard work/persistence (I documented the library very well and built a great learning experience).

angular-formly

About a year after I started work on geniejs (when I still did not have much by way of a twitter following, etc.), I was moonlighting at a small startup that had a pretty basic CRUD app with a TON of forms. I looked around at the AngularJS form libraries, found one I really liked and before long I made my first pull request to angular-formly. At the time, it wasn't a terribly popular project itself, but I needed it and it satisfied most of my use cases.

In the weeks that followed I made more and more pull requests and before too long, the project maintainer (who was no longer using the project) asked me if I wanted to take the project over as the maintainer. I accepted and began the work of improving the project and building a community.

Honestly, at the time I wasn't really thinking that's what I was doing. A lot of my concern was the excitement of hearing that people were using something that I built and a desire for my library to be the best in its class. Definitely not the most pure motivations, but my results were positive and within a few months, downloads quadrupled and to my knowledge, angular-formly is still the number one most downloaded AngularJS forms library.

So what did I do to build such popularity of the project so quickly? Well, one thing I did (which I don't recommend) was I sorta sold my soul to the project. I allowed myself to get carried away in answering issues as if they were paid support requests. I prided myself on responding to issues in seconds and having a fix pushed out in minutes. This was a lot of fun, but it did put strain on my important relationships and my mental health, which is why I don't recommend it.

I've found that you can build a strong and positive community without sacrificing your well-being and relationships. That's a subject for another blog post. Just know that working on building a community by creating fantastic documentation(including several free egghead.io lessons), encouraging contribution, and recognizing and trusting contributors is an important part of getting adoption and recognition for your open source work.

Other things that I did which were significant help were similar to what I did with geniejs: I spoke at meetups and conferences (my talk at MidwestJS 2015 was about angular-formly, and I gave the same talk at the first ng-nl conference). I worked on making the documentation and learning materials fantastic. I ensured the project satisfied the use cases it needed to while attempting to avoid overcomplexity (so it was something people would want to use). I also reached out to relevant newsletters to invite them to check it out and reference it in their newsletter. Oh, and I tweeted about it a lot.

It took a lot of work, but my work was recognized and appreciated and the success there was a major talking point in my interview with my future boss's boss at PayPal which probably helped me get hired.

Something I did NOT do is spam dozens of "influencers" out of the blue on twitter asking them to use and promote a library which for them was probably irrelevant because they probably didn't need or have a use case for anyway. I have dozens of people per week asking me to review the things they've built or written. This really only bothers me when it's clear that I'm one of tens of others to whom they've sent the same message, but it's also ineffective because often these "influencers" either don't have the time to review them or the project may not have any relevance to them.

I also did not attempt to throw shade at alternatives or downplay the value of their abstractions. Being unkind to the hard work of other people is a very poor way to promote your project and has no good place in the world.

Speaking & Teaching

me teaching people at a workshop

I recently published a blog post called Why and How I started public speaking. I'm just going to link you to that story rather than re-iterate the whole thing here. But I do want to tell how I got started with creating content for egghead.io as that made a big influence on widening my reach.

Back in June 2014, I spoke at AngularJS Utah meetup about something I had been learning about in a school project (you can watch the talk here!). Not long later, John Lindquist (co-founder and original instructor on egghead.io) watched the recording and emailed me inviting me to turn the workshop into a course.

This lead into an incredible positive relationship. Being an instructor on a platform like egghead.io gives you automatic authority in the minds of many people. It did take some time and consistency with creating content on egghead.io, but after some time, the following started to grow (as did my royalties which have been sufficient enough to pay my monthly home mortgage here in Utah for a couple years now).

Here's the takeaway: If my talk had not been recorded, John would not have seen the value I created that night at the meetup and I could have missed or delayed my egghead.io opportunity. You are constantly creating value. A conversation with a co-worker, a meetup talk, a realization after hours of working on a hard to solve bug. **The trick is to take those value creating experiences and make them public.**This is where my DevTips with Kent and my Tech Chats come from. Both of those activities widen my reach.

Just over a year after I started with egghead.io (in September 2015), after I had established myself a bit with egghead, I was listening to episode 178 of JavaScript Jabber: Tech Education and The Business of Running Front End Masters with Marc Grabanski. I had met Marc at my first MidwestJS where we were both speakers and thought he was a pretty cool dude. I knew of Frontend Masters and had a great deal of respect for Marc and his company. So I reached out to him:

Hey dude,
I'm listening to your JSJabber episode and I've been wanting to do a FEM workshop for a long time. I've been trying to think about what I could contribute and something that I'm really into is open source. I have a growing list of open source libraries on npm and GitHub and I'm the owner and maintainer of angular-formly which has grown in popularity.

I also have an egghead.io series on the subject. But, as you know, a workshop format would make it pretty useful.

I think that we could get more people into open source if they just knew how to get started. I believe you're interested in open source as well with your jQuery UI Datepicker experience. I think you could be pretty jazzed about this workshop.
What do I need to do to make this happen?

Thanks!

Kent

To which Marc responded:

Sounds awesome! When were you thinking?

And so began my relationship with Frontend Masters. I now have five courses on Frontend Masters. The takeaway here is courage. I'm mostly sharing my success stories in this blog post, but you gotta know that there were plenty of rejections as well. But it's ok! Have the courage to ask.

You miss 100% of the shots you don't take -Wayne Gretzky — Michael Scott

Podcasting

Microphone

I have to mention my podcasts as a form of widening my reach and getting noticed. Back in November 2014, Todd Motto and I kicked off our bi-weekly Google Hangouts on Air called "Angular Air" with "Angular Air Episode 0: The Angular Team on 1.3 & 2.0". We didn't plan on making it a podcast. We just wanted to chat every other week between ourselves and maybe a guest or two about AngularJS. We figured it'd be a good way to talk to cool people and help the community.

This first episode was so well received that I quickly took the audio from the YouTube video and created a podcast which quickly started getting thousands of downloads per week. Todd was pretty busy, and I wanted to go weekly, so I took it over and started getting more and more guests.

What I quickly discovered is that you can get really cool people to freely give you an hour of their time when you can promise that the value they're creating by talking with you will have an increased impact on thousands of developers all over the world.

When I made the transition from AngularJS to React at PayPal, I handed off Angular Air to Jeff Whelpley and started JavaScript Air with a panel of developers that'd knock your socks off and a first episode with the creator of JavaScript himself, Brendan Eich. I was able to get these folks because they're just awesome people and I had proven myself to them with my experience as a podcaster with Angular Air and I could promise them that their time investment would have a great positive impact on the thousands of developers who would listen to the show. And when you are able to associate yourself with people like this, their followers will notice you as well and many become your followers. I think that of all things, my podcasts had the biggest impact on my reach while I was running them.

The show did prove to take more time than I had, so I did eventually Sunset JavaScript Air. But maybe one day I'll start it back up again. It was awesome.

I'll just add here really quick that I'm also way more likely to be able to give you an hour of my time if I know that the value we create will be spread to impact more people. I'm always happy to join you on a podcast. Here's a list of podcasts I've been a guest on in the past.

Newslettering & Blogging

A notebook and a pen

This newsletter email is being sent as the last email to complete a full year of weekly newsletters! Without fail, I've sent out an email every week for an entire year! Two weeks after I send you this newsletter, I publish it to my blog where it gets several hundred or thousand more views/reads. That amounts to over 50 value-adding blog posts! I'm pretty amazed that I've been able to keep it up and I have no plans to stop.

At this moment I have over 7,000 subscribers to my newsletter. But I didn't start with that. Granted, when I started my newsletter I already had a pretty strong twitter following, but it's consistency which has gotten me the subscribers I have. I still have >50% open rate (which I'm told is very good). You subscribers have arrived and stayed at this weekly newsletter because of the value that I am creating and delivering to your inbox consistently every week. Hopefully some of you were slightly disappointed when this particular issue came 12 hours later than normal 😅

I've learned that consistency is important with a blog. With the exception of this newsletter (which has taken many many hours), my newsletters take about an hour of my time to produce. I can write these during my work hours because several of you subscribers are PayPal employees and my boss thinks it's cool that I'm helping educate PayPal every week as well as the community at large.

Tweeting

blue bird

Most of my reach is found on twitter. Twitter is a funny and unique place that we all love to hate (and most of us secretly love). I've found the best way to be effective on twitter is by following people who (re)tweet valuable/interesting/relevant stuff, and by (re)tweeting stuff I find valuable/interesting/relevant. I have no shame in retweeting or promoting something that's valuable even if it also happens to be promoting myself or if the tweeter says something nice about me. I use twitter as a platform to share ideas, ask questions, and promote things that I think are important/people will find useful.

As you might imagine, I have dozens (hundreds?) of DMs sitting in my twitter DM requests that I've never found the time to respond to. If you're sitting in there waiting I'm so sorry. Finding time to respond to every DM is impossible, which leads me to my next point...

Ask Me Anything

mountain

In July 2015, I noticed Sindre Sorhus created a new repo called ama. It's basically a GitHub repo where people can ask him anything that they like to (he doesn't make any guarantees that he'll answer anything though). I thought this was a great solution to a problem I was beginning to have: Answering the same questions repeatedly.

So the next day I forked his repo and started my own. I now have over 450 questions answered and regularly direct people there to get their questions answered or ask new questions. This is another way that I'm able to increase the impact of the value that I create. By making my answers public, searchable, and referenceable, I'm able to answer way more questions than I could otherwise have time for and help way more people as well. I do still have a little trouble answering everything very quickly, but I generally do get to everything eventually in one form or another.

The Unquestionable Influence of Privilege

a heart on grass

We all need to acknowledge something very important: Privilege. If you've not heard Kyle Simpson talk about #PrivilegeAwareness, give the first part of this talk a quick watch. I have similar privileges that Kyle mentions. Incidentally, a few hours after Kyle gave his talk, I gave a talk at the same conference where I talk about my privilege as an important thing to acknowledge.

Yes, I worked really hard to get noticed and gain the reach that I have. But I would be remiss to not acknowledge the fact that while I was working so hard, I didn't also have to work against prejudices due to the color of my skin or gender. I grew up with access to technology and a safe and well-off family that gave me opportunities to excel and succeed.

I think it's also important for each of us to be aware of our privilege so we can work on solving societal problems and actively battle (un)conscious bias as well as have empathy for those who are in less privileged positions than ourselves. To "lend our privilege" (that's a link to a fantastic talk by Anjuan Simmons which you should watch right now) in an effort to make the world a better place.

Conclusion

I sincerely hope this was helpful. I wasn't born with a wide reach. And I haven't resented the reach that I have as I have been developing it. I've worked hard to produce useful content for people who in turn follow me because they want more of that value which we all create and I capture and disseminate. You can do this too. Don't despair. Keep working at it. Be happy with where you are and the direction you're going. You can do it! Good luck!