Microsoft | patterns & practices | Developer Network | Enterprise Library | Acceptance Testing Guide | Personal Site
Some two weeks ago, we exposed the preliminary product backlog for Enterprise Library 5.0 and invited the community to vote on the features that matter to them most. And what a response we got! Over 2,600 people viewed the backlog and 981 cast their votes, with 230 troopers persevering to the very end. 18 members of the EntLib Expert Advisory Board also voted. In this post I would like thank you all for taking the time to complete the survey, and I want to share the results with you.
In retrospective, every previous EntLib release had a theme:
Over the years, EntLib grew larger, and arguably more complex than it really needs to be. The community has spoken loud and clear that they want EntLib to be easier to learn and to use. We have taken this feedback seriously, and have decided to focus this release on enhanced user experience, simplicity, and learnability. The working slogan is “Simplicity for the Win!”.
So, getting back to the product backlog. Let me explain the methodology we used to analyze the data. Stories voted as Priority 1 got 20 points, Priority 2 got 19 points, Priority 3 got 18 points, and so on, with Priority 20 getting only 1 point. Votes from our team of expert advisors’ carried double weight. Then, for each story, we calculated an arithmetic sum (the total number of points), and - using these numbers - ranked all of the stories (obviously the story with the most points was ranked as #1).
Based on past experience, we didn’t want to plan our development execution in the strict natural order of story rank, because this would require juggling various blocks within each iteration, and potentially create silos of experts around each block. Instead, we wanted an iteration to have a theme that the entire team can focus on. Therefore, we decided to carry out affinity mapping of stories for each block, and calculate their group weightings (ignoring all stories with ranks 50 and higher, since those automatically made our P3 bucket and so are not likely to be done). We then stack ranked the P1 groups (colored green in the following table) and we plan to address them in the stack ranked order, with the individual stories inside the group still ranked according to the original scores. Note that learnability and user experience stories will be addressed in parallel with all the development stories throughout the entire project, and -therefore - those groups are listed near the top of the backlog.
Total points
Rank
Description (T-shirt size)
Architecture
2910
1
ARC01 : Architectural update: use DI container instead of one-off Object Builder factories; DI container independence (XL)
2164
2
ARC02 : Simplification of the codebase (identify redundancies, obsoletes etc.) (XL)
1898
6
ARC03 : Reduction of the number of assemblies (XL)
Learnability
2082
4
LEARN03: Notebook-style 150 page book for Enterprise Developers (XXL)
1400
12
LEARN02: Notebook-style 150 page book for Architects (XXL)
1338
14
LEARN08: Updated Quickstarts (XL)
976
22
LEARN09: Updated Hands-on Labs (XXL)
590
37
LEARN10: EntLib Overview Video (L)
524
42
LEARN07: Migration guide v.4.1 ->5.0 (L)
User Experience
1876
8
UX05: Config tool facelift - towards a more intuitive and easier to use UI (XL)
1718
10
UX03: Config IntelliSense for Unity and EntLib in XmlEditor (M)
1610
15
UX01: Better error reporting/messaging throughout (M)
1010
28
UX02: Debugging Visualizer for Unity (L)
744
36
UX04: Config IntelliSense for Unity in XmlEditor (M)
Data Access
2652
3
DAAB01: DAAB & LINQ basic integration (i.e. execute a query on a database, get back an object that you can do LINQ on) (M)
2012
9
DAAB02: Async ADO.NET support (M)
1390
16
DAAB04: No swallowing of SQL exceptions (S)
Logging
2006
7
LAB02: Async logging (text formatting done asynchronously) to cut down on load on primary thread (M)
1100
17
LAB03: Automatically purging old files by the rolling trace listener (S)
Tool support
1516
13
TOOL02: Support of Unity configuration (M)
Unity
1072
19
UIN01: Generalized interceptor (XXL)
1108
20
U06: Clearer error reporting (M)
1042
23
U05: Unity-MEF Integration (e.g. unityContainer.Resolve<MefPart>()) (M)
896
24
U03: Support for passing arguments to the Resolve method (M)
Config
1962
11
CFG01 : Config decentralization (support for config stored in multiple sources) (S)
1276
18
CFG05: Making Unity configuration less verbose (M)
21
CFG07: Unity config auto-registration: expanded conventions and helper classes to reduce need for explicit configuration (M)
804
34
CFG02: Improved Config API (XL)
850
38
CFG03: Support for different sections of config in different media (not just files) (XL)
Validation
2438
5
VAB01: Integration with WPF (XL)
1020
25
VAB04: Decorating LINQ objects with Validation attributes (M)
944
26
VAB02: Integration with/assistance in implementing IDataErrorInfo (S)
840
33
VAB07: Validation Block refactoring to allow using Unity to resolve Validators (M)
570
40
VAB12: Inheritance-aware object validator (M or ?)
Installability/Uninstallability
858
29
INS01: Installer allows you to pick which specific blocks to install instead of the whole package (M)
864
31
INS03: EntLib installers to be included as part of installers of other custom products (merge modules) (M)
Extensibility
1028
30
EXT01: Simplifying writing extensions and plugging their custom configs into the config tool (XXL)
PIAB
784
32
PIAB01: Implement PIAB interface that takes an interceptor type (to leverage new Unity interceptors) (S)
718
35
PIAB03: New handlers (incl. RequiresTransaction and Call Forwarding) (S)
Resource management
996
27
RAB03: Resource Application Block (a provider to get assorted resources from various media/sources) (XXL)
Localizability
834
39
LOC01: Localizability of EntLib assemblies (L)
752
41
LOC02: Localizability of exception messages and templates (S)
Stories in P2 (yellow in the following table) and P3 (red) categories are listed according to their ranks, and not group ranks. Should time permit, we will address the P2 stories in the order shown.
P2
614
43
LEARN01: Discoverability and context/dependencies EntLib poster (L)
556
44
LEARN11: EntLib5.0 New Features Video (L)
682
45
EHAB02: Parameterized templates for exceptions (M)
572
46
TOOL01: Type picker improvements (sped up search, better generics UI) (M)
516
47
U04: Container introspection (S)
48
LEARN12: Unity Overview Video (L)
500
49
VAB06: Simple validating field only if the value is not null (S)
50
VAB13: Support for recursive data structures (M)
496
51
U02: Allow a mapping from a named registration to the "default" one (S)
506
54
VAB08: Enabling Validation Block to be used with 3rd party object relational mappers (M)
482
55
VAB09: Honouring validation attributes defined in System.ComponentModel.DataAnnotations (S)
468
59
LEARN04: Notebook-style 100 page book for Operations/IT management (XXL)
394
65
VAB03: ArgumentValidationException.ToString() show the validation results (S)
P3
52
UIN02: Caching of matching policies (M)
608
53
DAAB03: Fix: validation of sprocs parameters – do not validate (S)
56
LAB04: Authenticated Email Trace Listener (S)
430
57
CFG06: Support other config schemas for Unity config (e.g. XAML-based config)
402
58
U01: ResolveAll to return unnamed registration too (S)
390
60
LAB01: ETW sink (?, potentially XXL)
422
61
LEARN14: Unity Extensibility Guide (XL)
424
62
VAB16: Additional validator: Validator that checks that an enum contains a value that maps onto its defined values (S)
404
63
INS02: Installer ships both debug and release versions of the DLLs (S)
546
64
CFG04: Support for multiple pieces of config for a single block in multiple places (XXL)
412
66
EHAB01: Default post-handling action to ThrowNewException instead of NotifyRethrow (S)
378
67
TOOL04: Web-based config tool (L)
372
68
CACHE01: Adding a reason to the class that informs a user why their object was removed from the cache (S)
409
69
LEARN15: Guidance on environmental overrides in Unity (S)
70
LEARN15: Unity& MEF decision tree/matrix (M)
344
71
VAB14: Provide NullValidator to properly "ignore nulls" instead of the "Or composite" (S-M)
72
CACHE02: Cache backing store targeting ESENT (L)
352
73
VAB15: Additional validator: Number of decimal places validator (S)
292
74
PIAB02: Add non-generic overloads (S)
75
VAB05: Simplifying checking for positive / negative values (S)
282
76
LEARN05: Migration guide v.2.0 ->5.0 (XL)
266
77
VAB11: Better localization support (i.e. the first time the validator is used, the locale for the messages is defined) (M)
270
78
VAB18: RelativeDateTimeValidator update to compare against UtcNow instead of Now (S)
238
79
VAB10: Honouring MetadataType attribute (M)
80
TOOL03: Block invocation from the configuration designer (e.g. Configure a block, Right-click, Copy “Code to Invoke”, and then paste it elsewhere) (S)
234
81
TOOL05: Easier manipulation of validation trees (potentially, drag&drop) (M)
82
VAB17: Validator that compares against a single specific value (S)
196
83
LEARN06: Migration guide v.3.1 ->5.0 (XL)
162
84
LEARN13: Unity Extensibility Video (L)
The initial request for a Business Rules Application Block (which would help developers to take advantage of the WF business rule engine without creating a workflow) has been evaluated, and we solicited additional feedback from the advisors and the community. We didn’t see much convergence on the scenarios, and concluded that - at this point - we would not be playing in this area.
With regard to the platform we will target, originally our plan was to target binaries to version 4.0 of the .NET Framework. However, our advisors and the community pushed back on this. The result from 1,229 votes is shown in the following graph:
This data is significant enough for us to adjust our plans to meet the community needs, and so we will target the binaries to version 3.5 SP1 of the .NET Framework. We will also carry out our test path on version 4.0 of the .NET Framework to ensure compatibility.
A similar question was asked about the framework version to which we should target Unity. The graph below shows the result of the votes, and so the decision is similar to that for EntLib 5.0. We will be targeting version 3.5 SP1, but also testing on version 4.0.
PingBack from http://asp-net-hosting.simplynetdev.com/enterprise-library-50-product-backlog-prioritization-results/
Thank you for submitting this cool story - Trackback from DotNetShoutout
Thank you for submitting this cool story - Trackback from progg.ru
It's great, that you are actually taking our ideas into account! Do you have already planned Time To Release?
We have officially started our development work on EntLib5.0. Earlier I’ve shared our product backlog
@sergejus
Early 2010.
As I have mentioned in my previous posts , over the years, Enterprise Library grew large (it now includes
EntLib5 team is working on improving performance of the logging block (story LAB02 in our product backlog