Scrum | Kanban | Scrumban | |
Iterations | 1-4 week sprints | Continuous work alongside releases shorter than one week or bigger iterations like goals | Continuous work with short cycles for planning and longer cycles for release |
Work routines | Push and pull principle mixed with early binding to team members | Pull principle with late binding to team members | Pull principle with late binding to team members |
Scope limits | Push and pull principle mixed with early binding to team members | Pull principle with late binding to team members | Pull principle with late binding to team members |
Planning routines | Sprint planning | Release/iteration planning, demand planning | Planning on demand for new tasks |
Estimation | Must be done before start of sprint | Optional | Optional |
Performance metrics | Burndown | Cumulative flow diagram, lead time cycle time | Average cycle time |
Continuous improvement | Sprint retrospective | Optional | Short Kaizen event as an option |
Meetings | Sprint planning, daily scrum, retrospective | Can be avoided | Short Kaizen event |
Roles | Product owner, Scrum master, team | Team and other work specific roles | Team and other work specific roles |
Team members | Cross-functional team members | Cross-functional team members, specialization is allowed | Specialization or preference to tasks |
Task size | The size that can be completed in sprint | Any size | Any size |
New items in iteration | Forbidden | Allowed whenever queue allows it | Allowed whenever queue allows it |
Ownership | Owned by a team | Supports multiple teams ownership | Supports multiple teams ownership |
Board | Defined/reset each sprint | Persistent | Persistent |
Prioritization | Through backlog | Optional | Recommended on each planning |
Rules | Constrained process | Only a few constraints, flexible process | Slightly constrained process |
Fit for | Enterprise maturity for teams working on product or especially project which is longer than a year | Support and maintenance teams, continuous product manufacturing | Startups, fast-pace projects, continuous product manufacturing |
Continuous improvement | Sprint retrospective | Optional | Short Kaizen event as an option |
Meetings | Sprint planning, daily scrum, retrospective | Can be avoided | Short Kaizen event |
Friday, January 29, 2016
Scrum vs Kanban vs Scrumban
Thursday, January 28, 2016
Create class from database table
declare @TableName sysname = 'CustomerProfile'
declare @ClassText varchar(max) = 'public class ' + @TableName + '
{'
select @ClassText = @ClassText + '
public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId,
case typ.name
when 'bigint' then 'long'
when 'binary' then 'byte[]'
when 'bit' then 'bool'
when 'char' then 'string'
when 'date' then 'DateTime'
when 'datetime' then 'DateTime'
when 'datetime2' then 'DateTime'
when 'datetimeoffset' then 'DateTimeOffset'
when 'decimal' then 'decimal'
when 'float' then 'float'
when 'image' then 'byte[]'
when 'int' then 'int'
when 'money' then 'decimal'
when 'nchar' then 'char'
when 'ntext' then 'string'
when 'numeric' then 'decimal'
when 'nvarchar' then 'string'
when 'real' then 'double'
when 'smalldatetime' then 'DateTime'
when 'smallint' then 'short'
when 'smallmoney' then 'decimal'
when 'text' then 'string'
when 'time' then 'TimeSpan'
when 'timestamp' then 'DateTime'
when 'tinyint' then 'byte'
when 'uniqueidentifier' then 'Guid'
when 'varbinary' then 'byte[]'
when 'varchar' then 'string'
else 'UNKNOWN_' + typ.name
end ColumnType,
case
when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier')
then '?'
else ''
end NullableSign
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)
) t
order by ColumnId
set @ClassText = @ClassText + '
}'
print @ClassText
declare @ClassText varchar(max) = 'public class ' + @TableName + '
{'
select @ClassText = @ClassText + '
public ' + ColumnType + NullableSign + ' ' + ColumnName + ' { get; set; }
'
from
(
select
replace(col.name, ' ', '_') ColumnName,
column_id ColumnId,
case typ.name
when 'bigint' then 'long'
when 'binary' then 'byte[]'
when 'bit' then 'bool'
when 'char' then 'string'
when 'date' then 'DateTime'
when 'datetime' then 'DateTime'
when 'datetime2' then 'DateTime'
when 'datetimeoffset' then 'DateTimeOffset'
when 'decimal' then 'decimal'
when 'float' then 'float'
when 'image' then 'byte[]'
when 'int' then 'int'
when 'money' then 'decimal'
when 'nchar' then 'char'
when 'ntext' then 'string'
when 'numeric' then 'decimal'
when 'nvarchar' then 'string'
when 'real' then 'double'
when 'smalldatetime' then 'DateTime'
when 'smallint' then 'short'
when 'smallmoney' then 'decimal'
when 'text' then 'string'
when 'time' then 'TimeSpan'
when 'timestamp' then 'DateTime'
when 'tinyint' then 'byte'
when 'uniqueidentifier' then 'Guid'
when 'varbinary' then 'byte[]'
when 'varchar' then 'string'
else 'UNKNOWN_' + typ.name
end ColumnType,
case
when col.is_nullable = 1 and typ.name in ('bigint', 'bit', 'date', 'datetime', 'datetime2', 'datetimeoffset', 'decimal', 'float', 'int', 'money', 'numeric', 'real', 'smalldatetime', 'smallint', 'smallmoney', 'time', 'tinyint', 'uniqueidentifier')
then '?'
else ''
end NullableSign
from sys.columns col
join sys.types typ on
col.system_type_id = typ.system_type_id AND col.user_type_id = typ.user_type_id
where object_id = object_id(@TableName)
) t
order by ColumnId
set @ClassText = @ClassText + '
}'
print @ClassText
Subscribe to:
Posts (Atom)