- More modern design with less work.
- Integrated community interaction (follows, claps, and comments).
- I can stop maintaining a custom markdown parser used to make posts for this blog.
Saturday, May 9, 2020
Deprecated
Friday, March 13, 2020
Slack Etiquette
Slack is a weapon of mass distraction. Here I am talking about the communication platform, not the slang. Slack allows us to very easily disturb a lot of people and waste a lot of people's time, especially with the cost of context switches. To minimize this waste we have compiled a few concrete guidelines for how to behave on Slack.
- Follow the flowchart above.
- When posting a link always include at least one sentence about what the link contains, and why you think it is relevant to the people in the channel. Links to messages or channels are exempt from this rule.
- If there are more than 3 people in a channel always reply in threads.
- Have specific channels, luckily following the flow chart automatically fixes this.
- Use reactions. Reactions are a super convenient way to do voting. But also instead of reply messages:
- agree = +1,
- thank you = pray,
- appreciate it = heart,
- interesting = eyes,
- get well soon = apple,
- should have been a thread = thread,
- yes/no = heavy_check_mark/x, and
- you can easily add custom ones, ie. we have icons for every customer
- You should spend at least one second per person who is in the channel you are posting in on the message.
- Messages in public channels should be readable by anyone, eg. by being in English.
- Put automation in separate channels.
- Don't use @here, @channel, or @everyone unless your post is both urgent and important.
- If you outgrow a channel leave it.
- State explicitly in the description of a channel "how" mandatory it is, eg. "read at least once a week", or "optional"
- Use links to messages when referring to them, and never re-post something, just post a link.
- Have a "411 channel" where people can ask "which channel is relevant for ..." if you don't know where to post something, or whether you should join more channels.
As an example, my organization has possibly hundreds of channels, we have 4 channels just for the office I am in:
-
#location-must-read
for important messages for everyone, "read at least once a week". -
#location
for stuff that is relevant if you are in the office, like arranging lunch. -
#location-radio
for random stuff like sharing a link you mentioned to someone from the office. -
#location-robot
for scheduled posts, so they are easy to find and don't clutter in the 'human channels'.
When you are new to something: explore.
- when your organization is new to Slack, make a bunch of channels, and see what sticks, delete what doesn't.
- when you are new to Slack, join channels quickly until you find the ones that fit you, leave the ones that don't.
The only thing to do now is: Start Slacking on!
Friday, March 6, 2020
R(eg?)*x Challenge
Regular Expressions
Regular expressions are a very powerful tool. However, they have their downsides, mainly in maintainability. Regexes are often really hard to read or modify, as they are often just a long string of characters with special meaning.
For that reason, we should use them with care in our applications. But that is not the only place where they have their use. Modern editors come with support for searching and replacing using regexes. This is a perfect use case, because, as a one-time action we need not maintain them. We can also see the exact context that it will be applied to, so there are no bug issues.
The Challenge
Keeping our regex toolbox sharp is important, and I recently got a fun regex challenge to practice. In Visual Studio Code paste the following and create a regular expression that matches each of the good lines (it should show 6 matches), and none of the bad lines:
GOOD: "xxx";yyyy;"zzz" "xxx;xxx";yyyy xxxx;yyyy;zzzz "xxx";"yyyy";"zzzz" xxxx;;yyyy;zzz xxx;"yy""yy";"zzzzz" BAD: xxx";"yyyy xx"xx";yyyy xxxx;"yy"; xx";yyyyy";zzzz" xxxxx;";yyyyy "xxxx";";"yyyy"
Cheat Sheet
To save you some time here is a cheat sheet of VSCode regex:
Regex | Meaning |
---|---|
. |
Any character |
[a-zA-Z_] |
A character in the range a-z or A-Z or _ |
[^a-zA-Z_] |
A character _not_ in the range a-z nor A-Z nor _ |
X* |
Zero or more X (longest match) |
X*? |
Zero or more X (shortest match) |
X+ |
One or more X (longest match) |
X+? |
One or more X (shortest match) |
X|Y |
Either X or Y |
^ |
Start of line |
\r?$ |
End of line |
Monday, February 17, 2020
Stop Starting and Start Finishing
I am terrible at coming up with new ideas and projects, by which I mean I do it way too much. I get distracted easily whenever I get a new idea for a project. By now this means I have accumulated an immense graveyard of half-finished projects.
As I have always felt the 'learning' was the goal half-finished projects in itself is not a problem. I have always said if you know how to do something there is no point in actually doing it.
Recently though I have decided that I would like to start finishing things. Hopefully reaping more benefits from them. I hope that by combining ideas from other different areas I can create something to help me gain more focus.
Limit WIP, from Kanban
Wanting to limit what I am working on I immediately thought of Kanban. In Kanban, we have a Work-In-Progress (WIP) limit meaning that each workstation can only work on a set number of items.
I figured that this would be pretty easy to adapt to my needs. A Kanban board traditionally has a column for each workstation including one for incoming work (To do), and outgoing work (Done). In my case I have only one workstation – myself – so I need only one column for that. I also don't need either incoming nor outgoing, so really what I want is just one column with a fixed number of places. I settled on 3 places.
I also need a very clear way to free up these spots again, although it shouldn't be too easy, as that would be the same as where I started. I decided to add a specific goal which when reached would allow me to free that place. In some cases, I might set my goal too high or lose interest. To make sure the WIP limit doesn't get deadlocked like that I also add a deadline to each goal. So if the goal is reached or the deadline is passed I am allowed to free up the spot.
Small Batches, from Lean
Having only three activities I can spend leisure time on encourages setting the goals low enough that you can still swap them out quickly. This is very similar to the 'small batches' preached in lean manufacturing. I very much like this property of the system, as smaller goals are more likely to yield successes.
While small goals is a nice side effect, it does get dangouresly close to just setting trivial goals, and then swapping them as quickly as I did without the system effectively not gaining any focus.
Themes, from CPG Grey
The final improvement I made to the system is to change the "activities" to "themes" in CPG Grey style. I am allowed to change these themes only every three months, so they should be broad.
The final system then has three themes changing at most every three months, each with one goal that I am currently allowed to work on. Each goal has a deadline and I am only allowed to change the goal when it is reached, or the deadline expires.
My Hobby Board
My current hobby board looks like this:
Theme | Goal | Deadline |
---|---|---|
Italian Cooking | Ravioli | April 25th |
Writing | Write a book | January 1st |
Medicine | Anatomy jigsaw puzzle | March 1st |