My perception for CodeQue changed by 180 degree since last newsletter!
A few insights regarding the Visual Studio Code extension release (my homemade marketing).
New features added to extension in last month.
Laser focus on building ESLint plugin and making the query language more powerful.
Iām happy with the traction that CodeQue get.
CodeQue reaches 1000 installs! Yeah!
If you read last newsletter post, you might have noticed it had a bit depressing vibe. It was due to lack of feedback about the hard work I put into this project.
But looks like CodeQue get some traction and positive users feedback which skyrocket my motivation and established my belief all the work I put into it make sense.
Here are some of users reviews!
Ā
Ā
How I get first 1000 installs?
If you ever published something in the internet, you know that it disappears instantly among petabytes of other data. Without active promotion across social media, no-one will know about your project. Itās a paradox of the Internet. You have access to everything, but finding anything is hard.
Btw I still keep finding years old projects similar to CodeQue that I was unable to find few months ago. My bubble changed a bit over time.
That is installs chart for last 60 days.
How I get 1000 downloads? Here is my home made marketing plan Iāve executed.
Firstly, Iāve decided to prepare a video that showcase most important extension features.
Video content is much, much more catchy than text or images. You have around 5-8 seconds to acquire viewer attention and get them interested into the topic. I have no skill in video editing, but Iāve managed to shot and edit this in couple of hours using iMovie.
Ā
And then Iāve almost immediately published that on Twitter. Iāve made 3 mistakes here:
- I posted tweet at Saturday evening (less active users)
- I didnāt prepare proper readme for the extension
- I didnāt include a link to extension page š¤¦āāļø
I presume I could get more traffic with a link and more conversion with professional looking description.
But it had a good side as well - users who downloaded the extension were motivated enough to do it without a clickable link (Iāve added website link at the end of video).
It perhaps saved me some bad reviews from people who misunderstood the message or CodeQue concept overall.
The next day Iāve decided to share the video on other social media platforms:
- Facebook - Iāve added a post on different facebook groups
- Reddit - Iāve added a post a few sub-reddits
The first peek of downloads on the chart are in days when Iāve added a Tweet and posted on Reddit. Btw. most of Facebook groups are dead, posting there is perhaps waste of time.
I think most of the traffic was from Reddit, I got a lot of upvotes there.
Screenshot shows stats of the best performing post.
Iāve added a video into Node.js Subreddit. Iāve also posted in
/r/vscode
and /r/javascript
Ā
What happened next was really unexpected to my introvert soul. Iāve decided to send a message on Twitter to official @code account. I was asked to send them an email and as a result of conversation they have re-tweeted my tweet (without a clickable link to extension š¤¦āāļø) a few days later. However Iāve added a proper readme by that time. Their re-tweet caused second installs peek.
Since launch the extension get up to 10 installs per day. I have no idea how people find it, itās probably a mix of Google search, extension search, my posts on social media still being shared from time-to-time.
I still have a few options for free promotion, which are
- Asking tech influencers to re-tweet (I would prepare a new Tweet this time, with better video and link !)
- Launching on Product Hunt - I would use this opportunity in future, once there will be some premium plan for CodeQue.
- Investing time into content marketing - I should spin up blog on codeque.co Itās tough one, because itās very time consuming and long-term process. I will perhaps decide to do it once CodeQue will have premium features to offer. However the sooner I start it, the better.
New features added per user requests
Among other things, users asked for support for other programming languages and for Visual Studio Code workspaces.
I found them both relatively low hanging fruits, so Iāve decided to add both before closing extension v1.
Multiline search for any text files
It was really almost done already šĀ All I had to do was to disable file extensions filtering.
Multiline search works only for
text
search mode, so itās not structural search. Support for the latter requires implementing it separately for each programming language, so that will come later on the road. Since text
mode is just quite complex regular expression generated under the hood, it all sound as quick win.As usual, I spot some bugs and I was struggling a bit with syntax highlighting and match highlighting. Unfortunately Prism highlight does not support some languages, even popular one like PHP, so itās not perfect, but for me itās good enough for now.
If you work on web project with some CSS and HTML files, itās usually enough to search through.
I will have to update readmes and website to introduce CodeQue as:
āMultiline search for any programming language, structural search for JavaScript and TypeScriptā.
I will do it somewhere later š
Here is the example of formatting agnostic search of CSS code
Support for workspaces and search UI changes
Iāve never used Visual Studio Code workspaces until a user asked if CodeQue supports them.
Turned out it does not, but I wasnāt surprised š
.
After couple hours fo work, It is now possible to search in all workspaces, and search results are grouped in collapsible sections representing workspaces.
Additionally Iāve decided to group all results for the same file under another collapsible section. I was missing such grouping while using the CodeQue on daily basis. The UI for displaying search results for the same file might change in future as I have couple of ideas how to make it better.
In addition, workspaces, files and matches headers are sticky, so you will always see current context!
Hope you will like it as much as I do!
Laser focus on getting ESLint integration work ASAP
I see CodeQue for ESLint as a huge opportunity and amazing improvement for software engineering team workflows. I find use cases for custom ESLint plugins everyday, but implementing them in classic way consumes sooo much time. Imagine if you could create custom ESLint plugin in 10 minutes!
I will prioritise implementing MVP for ESLint, as Iām a little worried about performance comparing to the standard approach. It might turn out to be ok, but I would like to have the overview upfront, before implementing advanced query languages functionalities.
MVP would also involve adding support for ESLint TypeScript parser (CodeQue uses Babel now) which would open a way for supporting other programming languages!
Speaking of functionalities, there are a few that have to be added into query language to make it more robust:
- Being able to refer to the same identifier wildcard within query, eg.
const $$_ref1 = $$$; fn($$_ref1)
- Query builder allowing for boolean conditions, as well as performing matches within other queries, so you can narrow down the match (and have more precise code issue highlight in ESLint) eg.
{ "query" : "try {} catch { throw new $$() }", // This query acts as a context "within" :{ query: "new $$()" // This is actual found result } }
- Query language extension allowing for advances queries, eg. ability to perform nested searches inside function body or changing search mode for part of the query.
function $$() { const a = $$$ // $nested a() /* * Thanks to $nested, it would find a() also inside nested code blocks, * eg. inside anonymous function declaration. */ }
Summary
There are long coding days ahead of me, but this is what I like the most, what brings the satisfaction and I canāt wait to start it.
Iām glad I get to the point where CodeQue is now, because here is where the real challenges and party begins!
See you next time!