CODINGTHOUGHTS

A blog about C#, Python, Azure and full stack development

My Workflow

TLDR

For my developer workflow, I use Polyglot Notebooks as a central hub for all note-taking. I can link out to external resources, run code inline, include diagrams, export rich content to a variety of mediums and is searchable.

I maintain a simple but consistent folder structure which is great for keeping things findable – and maintaining version control and backups.

Introduction

This post describes to some level of detail the workflow I use for my day-to-day work. I try to use the same setup for both my work projects and personal / side-projects.

First, a few requirements that I have for a workflow:

  • Capture ideas easily and quickly for future development
  • To record thoughts while working on a particular piece of work or event
  • To represent structure at a high level for all work items I am involved in
  • Must be able to export content / ideas for use in emails / sharing with others
  • Easy backup of all content
  • Ability to put all or parts of the workflow under version control

These requirements are helpful to me given that:

  • I work on a variety of projects at any one time where there is a lot of context switching
  • I often struggle to see the high-level view of what I am working on
  • I don’t have a great memory, searchability and easy access is helpful to me
  • The ability to pick up where I left off on pieces of work, having some way to load the context into my head quickly is very helpful

Folder Structure

Underpinning all of these requirements is a clear folder structure. I try to keep it simple. I have a single ‘root’ folder, beneath this are broad categories such as activities, work and home+family. The work folder contains all my professional activities in one place, the activities folder is for all personal activities, and home+family contains things relating to my domestic admin, finances, etc.

To keep things tidy I regularly archive off items that are no longer relevant, for this I create an _archive folder where required, this always sits at the top of the list of folders and acts as a handy ‘recycle bin’ for me.

For example:

root -- activities
        -- _archive
        -- technology
           -- _archive
           -- project 1
           -- project 2
        -- fitness_outdoors
        -- music
        .. etc
     -- work
        -- _archive
        -- projects
              -- project 1
              -- project 2
        -- incidents
        -- training
        .. etc
     -- home_and_family
        -- _archive
        -- finances
        -- kids
        -- house
        .. etc

Jupyter Notebooks / .NET Interactive

At the core of my workflow is .NET Interactive. I use the Polyglot Notebooks extension in Code for this. It took me a while to get integration with SQL and nbconvert (for exporting content) set up but once done, it is a great productivity boost.

.NET Interactive allows me to create freestyle, multi-language notebooks in a single context. This is great for quickly writing up notes when working on a specific work item or while resolving an incident at work. I can drop in SQL, code fragments and run against databases to grab data which is then rendered as a chart or visualisation using d3js, and then export all of this into a format that can be copy and pasted into an email. Of course, once I’m finished with a notebook, it is a permanent record and can be found by search in the future.

Timelines / GANTT Charts

For sketching out quick and simple timelines I use the GANTT syntax in Mermaid within a .NET Interactive notebook. This is great when I want to visualise upcoming events for both work and personal projects – again, having this within the same context as my notes is useful and I can create links between notebook elements and events in the timeline.

Mindmaps

I’ve tried using Obsidian in the past for authoring mindmaps, which I loved using as it let me capture ideas both on my phone and PC, but for some reason it didn’t quite gel with my other tools. I am currently trying to figure out how to use the mindmap syntax in Mermaid, but at present this is an experimental feature and I cannot run it in a .NET Interactive notebook.

Logging Time

In my work life I have a requirement to log hours against projects. For this I use org-mode within the Emacs editor. I used to use Emacs for a lot of other things, especially todo lists in org, and was very keen on it’s ability to embed code fragments in org docs, but set against VSCode I just found myself awkwardly between the two worlds and had to make the choice to go ‘all in’ on one or the other.

I have tried a couple of org-mode extensions for Code but none as far as I am aware let me produce clock tables – which are vital for me when preparing timesheets, so I keep an Emacs window open at all times that lets be record when I switch between projects with a simple CTRL-c-x-i and CTRL-c-x-o.

Running Code

I use the .NET Interactive extension in Code to run code embedded in a notebook. Multiple languages can be run in the same notebook, with the ability to share variables between them, although I must say that I don’t find myself using this ability very often.

For me, the most common use case is to store fragments of SQL and corresponding data, for example when dealing with an incident. It’s a nice feature to be able to quickly throw the output of a SQL query into a chart or visualisation and export to an email.


Posted

in

by

Tags:

Comments

Leave a Reply