What I’m working on

(Current challenges and questions I’m trying to answer)

Establishing a baseline for exploring automation and how it can complement our project:

  • What is considered automation in contrast to “normal code”?
  • What types of automation exist, and what problems do they solve?
  • How do we identify meaningful use cases for automation in our projects?

What I Learned

(Summarize new knowledge, reflections, or insights gained.)

I set out to first try and define the line between automation and “normal code.” Normal code executes in direct response to user input or system events initiated by users, and the code is part of the application’s core functionality. In contrast, if a piece of code runs without direct user action or intent, it can be considered automation, but this can be a fine line.

Automation is characterized by minimal human intervention, repetitive task execution, and triggers that can be scheduled or event-driven. Automation will often begin with normal code, which is then “wrapped” to run automatically, or even as scripts written with specific intent to both create and automate a process.

Automated tasks can generally be classified into three categories:

  • Basic Automation: Simple, repetitive tasks such as sending emails, moving files, or generating reports.
  • Process Automation: Multi-step workflows that may span systems or services, like onboarding new users or synchronizing databases.
  • Intelligent Automation: More advanced automation combining AI or decision-making, e.g., predictive analytics, document processing, or virtual assistants.

I considered a common scenario: handling file uploads in a system. A user may upload a file manually (e.g. click “Upload” > browse to and select the file > get confirmation of upload). This involves normal code, because the action is directly initiated and intended by the user. The code executes immediately in response to that user action, performing the necessary processing.

Automation comes into play when additional tasks are handled independently of a direct user action. For example, building on the use case for uploading a file:

  1. Basic Automation
    • Use Case: Generating a daily report of newly uploaded files.
    • Automation: A Python script that scans an “incoming” folder and summarizes all new uploads. Scheduled via cronjob (Linux/macOS) or Windows Task Scheduler to run nightly, without user intervention.
  2. Process Automation
    • Use Case: Validating and processing files as they arrive, potentially spanning multiple systems (e.g., database updates, notifications).
    • Automation: A C# method that handles file validation, transformation, and database insertion. Triggered by a file watcher or message queue so processing occurs automatically whenever a new file is detected.
  3. Replacing Manual Uploads
    • Use Case: Automatically synchronizing files from a user’s local folder to cloud storage, removing the need for manual upload.
    • Automation: A small Python or PowerShell script that detects changes in a local folder and uploads new files without user involvement.

A key insight in automation seems to be that the decision of when to automate is often more important than what to automate. Good automation should generally consider aspects such as:

  1. Repetitiveness: Freeing users from repeated, tedious, low-value manual work.
  2. Error-proneness: Reducing human mistakes in precise or complex workflows.
  3. Value-Added: Enhancing productivity, save time, or provide insights that would be difficult manually.

However, the considerations here are not black-and-white. Even for a tedious task, direct user involvement can provide control, transparency, or decision-making value that automation cannot replicate. Users should retain meaningful control when necessary; automation shouldn’t obscure critical decisions.

What do I need to do

(Obstacles, or upcoming questions, that I may need to address)

In our project, possible use cases for automation include tasks that provide added value and ease-of-use on the platform. Key candidates are:

  • Usage Reports: Automatically generating weekly or monthly reports on platform activity to help teachers gain insights into student engagement, identify inactive students, or get indirect feedback on course material.
  • Notifications and Reminders: Sending automated emails or platform alerts for upcoming deadlines, missing submissions, or new content updates.
  • Data Synchronization: Automatically syncing data between different systems or integrations, ensuring dashboards or analytics are always up-to-date without manual intervention.

I need to figure out the scope of implementing these ideas: both in terms of building the core functionality, but also, for example, how and what data to gather to enable useful usage reports, or when and how to use notifications in a meaningful way.

Material

(Links, tutorials, or reference material)