Blog

2 days ago

Targetprocess v.3.12.4: View Legend, Lists, and Visual Reports improvements

View Legend

You can now add a short description to views from View Setup. Users with access to a view can read its description by clicking on the view's title. This View Legend will also include information about card types displayed on the view, as well as view cards, active filters and visual encoding rules. We hope this will help users to better explain and understand what views are showing.
description

Entity details view: Assign existing entities from Inner Lists

You can now not only create items from Inner Lists, but also assign existing ones. If you are on a Feature details view and want to assign all existing User Stories, you don’t have to open a new view to do it. Just click the Lookup icon from the User Stories list, and select the entities that you need:
lookup

Hierarchy in Inner Lists

To help users better understand how different cards are related, we’ve added a hierarchy to Inner Lists. You can find User Stories under the Feature and Iteration levels, with Bugs and Tasks under the User Story level.
hierarchy

Redesigned report creation flow, and some new templates

The flow for creating reports has been slightly changed. As you know, templates from all sources are listed on the initial report creation page. You can select any of them, or create your own via a Blank template. In the new flow, clicking on a template does not immediately lead to report creation as it did before. Instead, you first get a pop-up with source and chart settings. You can make changes there, or close it and select another template. More details here.
firstgif2
We've also added some additional templates: a Process Control chart, and a Stories and Bugs Burn Up by count of records. The Process Control template shows the distribution of Cycle or Lead Time for completed User Stories in a given time frame. The Stories and Bugs Burn Up template tracks completed Users Stories and Bugs against the total number of these entities in a release.
firstimage2

Dynamic annotations

The Annotations UI has been slightly redesigned, with some new functionality added. Previously, you were only able to add plain numbers, but now you are also free to add calculations. Let’s use a Process Control chart as an example. You can add the median of Cycle time or Lead time values as an annotation line. Your reports will calculate this number and display a line at these points. Whenever data is updated, the value for the annotation will be recalculated and the line automatically redrawn.
secondgif

Progress bar for report updates

We suppose that it makes sense for users to actually know the progress of their report updates, so we've added a progress bar for this action. This bar also displays the count of updated items vs. total items. Moreover, both the status update section and “Update now” button have been moved to the top, closer to this progress bar.
thirdgif

Minor improvements

  • Inactive users will be highlighted on views
  • Entity names will be included in 'Share link'
  • Added support for DSL filters for Сustom Fields of relations

Fixed Bugs:

  • Inner Lists: Fixed a case where 'Add & Open' would not work in One-by-One mode
  • It is now possible to create Requesters even if your default process has the Service Desk practice disabled
  • Max comment length has been increased for the TFS plugin
  • Values for Custom Fields will be saved (or removed) when an entity's Project undergoes a Process change depending on the Custom Fields settings in the new Process
  • Fixed layout issues in Firefox when performing inline edits to Lists
  • Fixed the layout of Team icons on the search results form
  • Fixed: Webhook filters would not detect the event 'custom field value is changed' when both the filter and the custom field label contain the word 'Team'
  • Fixed a problem where refreshing a Favorite view would cause the left menu to be scrolled down to the "All Views" section upon updating
  • If you refresh the page while on a view that lays in a folder, the page will reload with that folder expanded in the left menu
  • Entity drag-n-drop on Boards with Customs Fields as lanes will no longer fail when the entity also contains a System Custom Field
  • Links in the 'My Recent' menu will no longer break
  • Comparisons of two integers vs. float numbers will now work in Visual Encoding filters
  • Inline edits for Date custom fields will no longer require an extra click
  • Invalid licenses will no longer be saved during failed automatic updates
  • Initial LastStateChangedDate is no longer copied when copying an entity to another Project
  • Fixed: Import cannot create entities when there is no Project column in the CSV file, and just one Project selected in the Projects/Teams selector
  • Fixed: POP email plugin would not create a Request after recreating a deleted profile if a message was sent by the deleted requester
  • Feature and User Story views: Fixed incorrect breadcrumbs when opening newly added entities from the Success popup
  • Fixed a case where prioritizing entities on Lists via drag-n-drop would result in the entity being placed at the beginning of the List
  • Fixed: Comet does not update newly assigned entities in Inner Lists
  • Fixed: After splitting a User Story, the name of the new story would be shown on Burn Downs (instead of the original name)
2 weeks ago

Every feature considered harmful: Debts in software development

We tend to believe that every new feature is a good and valuable addition to a product. Quite often, it can be hard to not implement a feature, especially when you’re constantly hearing good ideas for new features every week.

The problem is that every new feature adds debt or creates a placeholder for future debt. You deliver more and more features, accumulating more and more debt. Most people don’t know how to work with debts. I don’t. Everyone knows about technical debt, but there are few more types of debt in software development:

  • Functional debt. The needs of users are changing, but the system forces them to follow old flows, and doesn’t cover new cases.
  • UI debt. Over time, the user interface can lose consistency and coherency, making the system harder to learn and understand
  • Quality debt. Bugs are ignored, the system shows unpredictable behavior, experiences errors, crashes
  • Technical debt. Architecture and code quality slows down development.

Any new feature in a product may become a source of all these kinds of debt.

DebtExample
Functional: Feature solves some problem. The problem’s definition may slightly change in the future, so feature functionality must adapt.All teams estimated work in hours, but then estimation in abstract points became popular. This new need demands changes in a product to support points as an estimation unit.
UI: A new feature quite often introduces new patterns and new UI elements.Designer decides to add new type of lookup field for some feature. This lookup is used in a single place and makes the whole UI less consistent.
Quality: A new feature almost inevitably adds new bugs. In complex systems, bugs may affect many other features.Live Update functionality affects many areas of a system. Bugs in unexpected places will follow.
Technical: Technical implementation of a new feature is almost always not ideal. It may cause existing system modifications that are not optimal, and side effects may be severe in the worst cases.Under time pressure, you implemented a quick solution for UI extensions via Mashups. It does provide great flexibility, but is very fragile. Any change in HTML or CSS can break some extensions. With time, many mashups are created and changes of this mechanism will be hard.

The image below shows several features in a product. Every feature adds some debts. In reality, it is extremely hard to add a feature with zero current and future debt.

features debts

Every Feature needs maintenance: functional, UI, quality, technical, documentation, localization. What if you have 100 features in a product? What about 1000? Can your software read emails already?

New Feature vs. Debt Payment

When should you add a new feature, and when should you pay back some debts? Let’s check the product lifecycle. Imagine you are running a very young startup. You don’t care about debts at this stage. You care about market expansion, new features, and growth. Now imagine the product is dying, it is too late to focus on debts, it’s over.

product lifecycle and debts

It seems the right time to focus on debts is when a product has proven its success on the market and is about to enter the “mature” phase. For a typical SaaS B2B product, this may be after 4-8 years. The chart above is valid for our SaaS product, Targetprocess. In my opinion, we started to focus on debts about 2-3 years late. We're finally coming over the hill, but it will take some more time to re-energize development.

Ideally, some part of your resources should be dedicated to debt payment at all times, but after 6-8 years it may even be a good idea to have a “Debt Return Year” or something. At this point, development speed decreases due to technical problems: UI consistency degrades, many features are outdated, bugs and performance issues annoy customers.

Moreover, you’ve accumulated enough customer feedback and now understand your domain much better. Mistakes you made and new opportunities became more clear. You need an ultimate clean-up to prepare a launching pad for a powerful push.

It is extremely hard to slow down and clean up the mess in a product. You are always afraid to lose market share and functional edge. I don’t want to be extreme here, just want you to think about every new feature you add from a debt perspective.

What to do?

There are several obvious consequences.

  • Build small systems. If you need a large system, build several small composable systems.
  • Less features -> less debts. Someone asks for a new feature? Default answer is “No”.
  • Modularization is desired, since you can re-write modules to pay back debts and reduce side-effects. This means you can have more features in a modular system with the same level of debt as in a non-modular system.
  • Remove rarely used features. When you remove a feature, you remove all related debts.

I want to finalize my post with a quote:

One thing that UNIX does not need is more features. It is successful in part because it has a small number of good ideas that work well together. Merely adding features does not make it easier for users to do things it just makes the manual thicker. The right solution in the right place is always more effective than haphazard hacking. — Rob Pike & Brian W. Kernighan

3 weeks ago

Targetprocess v.3.12.3: Automatically added views to Favorites, enabled inline editing and navigation for Entity fields in Lists

Automatically added views to Favorites

For users that haven't added any views to the Favorites section, we've automatically marked some of your most-used views as Favorites. You can take this suggestion, or easily revert it.

automatic-favorites

Inline editing and navigation for Entity fields in Lists

We recently introduced the ability to open and edit Entity custom fields in Lists. From now on, this same behavior will be applied to native Entity fields, such as Epic, Feature, User story, Iteration, Release, etc.  

Clicking on the pencil icon will allow you to edit the field's value, whereas clicking on the entity's name will open the entity itself. 

ezgif-com-optimize

Notice removed for Features and Epics: 'Feature has # User Stories with total effort #h'

We've removed the notice 'Feature has # User Stories with total effort #h' from Feature and Epic entity views. The Effort field has been added to the info panel instead.

effort2

Split: Added the option to copy comments and change entity owner

When splitting an entity, you can now copy comments from the original entity, or change the assigned Owner right from the Split form:

split

Custom Rule: Reopen a Request when replied by Requester

Previously, when a Requester added a new comment to a Request in a Final state, the Request was moved back to the Initial state. But, when a Requester replied to an existing comment, the Request stayed in the Final state.

We've now added a Custom Rule which automatically moves a Request from the Final state to the Initial state when any of the Requesters reply to an existing comment or create a new one.

This Custom Rule is activated by default. It can be deactivated in Settings —> Custom Rules if needed.

2017-11-16_1739

Minor Improvements:

  • The annoying card details popover that appears when hovering over cards on a Board will now only appear when cards are minimized/collapsed
  • Added a new checkbox component to Project views for Product/Active fields
  • Added SSL/TLS support for SMTP email server. More details here

Fixed Bugs:

  • Fixed: Terms are not applied to entity types in view setup
  • Fixed: Terms are not applied to list headers and custom units
  • Quick Add form will no longer 'jump' in Lists when clicking the “+” at the bottom of the screen
  • Lists will now show a loader when the Quick Add form doesn't immediately open
  • Fixed a case where Custom Fields for Time lists would not be filtered by Process if 'Any Project' was selected in the Project-Teams selector
  • Scroll will now work properly in the assignments section for MacOS and Chrome/FF
  • Fixed a problem where all sections in the left menu would be incorrectly expanded
  • Inner List: Fixed a case where you would be unable to use spaces in the filter field when opening Attach to Request, Find Duplicate
  • Added some fixes for the Entity Custom Field custom unit in Lists
  • Fixed incorrect sorting of Custom Fields in the 'Sort By' dropdown when setting up a view
  • Fixed a problem where new Project names would sometimes not be saved
  • Visual encoding will no longer break for Inbound Relation and Outbound Relation cards when using 'EntityState' in rules
  • Relations tab: lookup will now show all cross-project Releases