Another month down at Teamwork HQ and more features and updates released despite the sun finally arriving in Ireland.

Massive increase in Task rendering times

A few months ago we switched to MVVM rendering of tasks and task lists. This allowed us to leverage the API to get the task data and render the UI on the client side using Knockout. Before the switch all the UI was rendered server-side and the HTML was piped down to the client browser. If you had a huge number of tasks, that was a lot of data being sent to the browser and the Tasks tab was slow. Since switching to Knockout we gained a 50% speed increase just by sending the raw JSON data and rendering the UI on the client.

However, this introduced other issues which made the Tasks page feel slow when there were hundreds of tasks. The client browser had to wait until all the JSON data was retrieved and then run through everything rendering the UI. On a project with hundreds of tasks, this caused the browser to “lock up” while the JavaScript was processing the tasks data and rendering the UI.

This month, we completely re-thought how this is done. We took 2 steps which drastically improved the rendering of the tasks data (especially noticeable on Internet Explorer). The first step was to cache the templates on the client side. The second step was to break the rendering per task list so instead of trying to render everything at once, each task list is displayed first and then each task list loads its own tasks. With some clever setTimeouts, we can now load hundreds of tasks without locking the browser up until everything is loaded.

Permissions & Load-Balancing

Every month the number of users using Teamwork increases as new accounts are created and existing accounts upgrade. This month we started to notice more and more strain on the individual app servers and load balancer. We’ve added 2 new servers to Teamwork this month, bringing the total number up to 13. We’ve also rethought how we store and access permission structures to make Teamwork even faster and more robust under heavy load. Another important update saw the introduction of a new underlying system of ensuring a person never experiences issues if they are switched to another application server due to load balancing.

Drag & Drop File Uploads Development Started

This was a biggie. While we’re not ready to release this live yet, the work is done, we’re using it ourselves and it’s awesome! Every month we take customer feedback and suggestions and we try and get something big released each month. Some features can be done in a month and some need more than a month to complete. This month Donal made it his mission to knock this off the roadmap and hopefully it will be the main feature of next month’s newsletter!

Full list of updates and changes….

We publish our SVN updates publicly at but here is a quick recap of changes made this month:

  • Bug Fix: Sub Tasks: Adjusting the date on a sub-task adjusts the date of the parent task

  • Update: iCal: New Parameter: showTasksOnDueDate which makes tasks appear only on the day they are due

  • Performance: Archived Projects: Speed up rendering of Archived Projects

  • Bug Fix: Time Export: Excel: Fixed timezone issue on filename

  • Update: Dropbox: PDF Files: IE8: Don’t open the link to Dropbox but serve the file directly (Dropbox doesn’t support this for IE8)

  • Update: Email Notifications: Notebook: Improved Text version of email content

  • Update: Project Time: Export to CSV: Name file according to project and dates picked

  • Update: Project Time: Export to CSV: Added column headers on first row

  • Bug fix: Dashboard – when modifying today’s tasks they disappear, changing priority for example – Timezone issue

  • Bug Fix: Links: Copy to project: Not copying the “Open in new window” property

  • Update: Links: Added ability to copy a single link to another project

  • Bug Fix: Tasks Report: Excel Format: Sort not taking Tasklist display order in to account

  • Update: Projects: Settings: Integrations: Show message if there are no integrations available for project

  • Bug Fix: Everything: All Tasks: Excel Download: If user is Admin in Owner Company show them tasks from projects they are not on

  • New Feature: Reply By Email: Check if a person is “mentioned” and include them in the notify list

  • Bug Fix: Jumping to specific comment not working

  • Update: Everything: All Tasks: Excel: Give localized dates for Start and Due

  • Update: Project Tasks: Task Report: Excel: Friendly column names and dates

  • Bug Fix: Archived project message disappearing when navigating via PushState

  • Update: API: Tasks: POST/PUT: Added support for XML predecessors

  • New Feature: Keyboard Shortcut: “D” when mouse is over a task duplicates task and all properties

  • Update: iCal: Calendar: Added new URL options labels={true|false) to remove prepended title labels

  • New Feature: Messages by Email: You can now @mention one or more people to notify them of the new message

  • Bug Fix: Sub Tasks: Click “More” with utf8 chars in task name being encoded incorrectly

  • Bug Fix: Sub-Tasks icon is hidden if user doesn’t have edit permission on parent task

  • New Feature: Feature announcement system

  • Bug Fix: Tasks: Log Time button showing when Time tab is off or user doesn’t have Log Time permission

  • Bug Fix: Archived Projects count and pagination

  • Bug Fix: Workload: Factor start date in to data query

  • New Feature: Cross-server auto login system – users can servers with no user downtime

  • Update: Add Edit link in header for when there are a lot of task list templates to minimize scrolling

  • Update: Add option in Settings dropdown to go straight to Templates

  • Bug Fix: Tasks change dates each time a new task template is added to an existing task list

  • Update: Billing: Freshbooks: Added option to export to an existing Freshbooks invoice