\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{tnbergeman} \pdfinfo{ /Title (business-rules.pdf) /Creator (Cheatography) /Author (tnbergeman) /Subject (Business Rules Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{244B8F} \definecolor{LightBackground}{HTML}{F1F3F8} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{Business Rules Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{tnbergeman} via \textcolor{DarkBackground}{\uline{cheatography.com/21630/cs/4208/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}tnbergeman \\ \uline{cheatography.com/tnbergeman} \\ \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Published 26th May, 2015.\\ Updated 4th May, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{multicols*}{3} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Keep in mind...}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Business rules enable the business to make better, more consistent decisions in day-to-day business activity% Row Count 3 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Learning by Doing: Techniques}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Reduction \newline % Row Count 1 (+ 1) Elicitation \newline % Row Count 2 (+ 1) RuleSpeak \newline % Row Count 3 (+ 1) Decision Tables \newline % Row Count 4 (+ 1) Validation \newline % Row Count 5 (+ 1) Management% Row Count 6 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Policy vs. Rule}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Business Policy}}: No new home-owner insurance during storm threats. \newline % Row Count 2 (+ 2) {\bf{Business Rule}}: A home-owner policy must not be issued for a home within the 4-day cone of uncertainty for a storm.% Row Count 5 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Requirement vs. Business Rule}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Requirement}}: Provide a feature to handle electronic funds transfer. \newline % Row Count 2 (+ 2) {\bf{Business Rule}}: An employee expense reimbursement must be processed through electronic funds transfer.% Row Count 5 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{How to find business rules?}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Look for: \newline % Row Count 1 (+ 1) - Repetitive behavior in tasks \newline % Row Count 2 (+ 1) - Operational decision points \newline % Row Count 3 (+ 1) - Non-trivial areas of work \newline % Row Count 4 (+ 1) - Business rules embedded in code% Row Count 5 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Potential Anomolies}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Conflict - rules contradict each other \newline % Row Count 1 (+ 1) Subsumption - the rule is already covered by another \newline % Row Count 3 (+ 2) Redundancy - rules state the same thing essentially \newline % Row Count 5 (+ 2) Similarity - rules that are potentially identical but have inconsistent specific qualitifications% Row Count 7 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Definitional Rules}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Computation Rules}}: "The net profit must be computed as the gross sales amount minus the overhead amount" \newline % Row Count 3 (+ 3) {\bf{Derivation Rules}}: "A customer must be considered inactive if the customer has not placed an order in the past 3 years" \newline % Row Count 6 (+ 3) {\bf{Decision Rules}}: Knowing how to decide something - Decision Table% Row Count 8 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Behavioral Rules}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\bf{Behavioral Rules}}: Rules that people can violate; "A customer must have an assigned agent if the customer: \newline % Row Count 3 (+ 3)  has placed an order, and \newline % Row Count 4 (+ 1)  is not inactive."% Row Count 5 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Identifying Major Decisions}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{i.e. "Is the applicant eligible for auto-insurance?". For each major decision: \newline % Row Count 2 (+ 2)  Define business rules that apply to all sub-decisions of the major decision \newline % Row Count 4 (+ 2)  Estimate 5-10\% of overall business rules within the major decision \newline % Row Count 6 (+ 2)  Estimate one-week effort per major decision (subject to scope)% Row Count 8 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Identifying Sub Decisions}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{i.e. "Has the applicant given acceptable evidence of insurance?" For each sub-decision: \newline % Row Count 2 (+ 2)  Define business rules that apply to all cases for a sub-decision first \newline % Row Count 4 (+ 2)  Systematically develop the business logic for each case within each sub-decision \newline % Row Count 6 (+ 2)  Estimate an average of 2 weeks per sub-decision (subject to scope) \newline % Row Count 8 (+ 2)  If steps 1-3 are done correctly, project team members can work on cases or sub-decisions in parallel% Row Count 11 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Addressing Breaches to Rules}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{1. Determine enforcement level (strictly enforced, guideline, etc) \newline % Row Count 2 (+ 2) 2. Determine what messaging is needed in case of a breach \newline % Row Count 4 (+ 2) 3. Determine business response in case of a breach% Row Count 5 (+ 1) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Reduction}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Always clearly define each and every part of a business rule that is not cut and dry; \newline % Row Count 2 (+ 2) "Kids must be in bed by 11:30 on school nights." \newline % Row Count 3 (+ 1) 1. {\emph{Time-of-day rule}}: Time-of-day is determined by parents' watch \newline % Row Count 5 (+ 2) 2. {\emph{In-bed rule}}: "In-bed" must be interpreted to include all of the following: Electronics off, lights off, you are in your own room/bed alone, you are washed up. \newline % Row Count 9 (+ 4) Continue with {\emph{School-night rule}}, {\emph{Washed-up rule}}, etc. until all remaining terms are derivable or computable.% Row Count 12 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Refinement}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Remember to assign terms instead of keeping quantities/amounts in the business rule, i.e. "Customers must not be able to place more than {\emph{3 orders per day}}." becomes "Customers must not be able to place more orders than the {\emph{maximum number of orders per day}}."% Row Count 6 (+ 6) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Handling Exceptions}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{{\emph{Two rules}}: "A customer may have access to the warehouse only during regular business hours." and this exception "A gold customer must have access to the warehouse 24/7." \newline % Row Count 4 (+ 4) {\emph{Become}}: "A non-gold customer may only have access to the warehouse during regular business hours; gold customers have access 24/7."% Row Count 7 (+ 3) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{5.377cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{5.377cm}}{\bf\textcolor{white}{Decision Tables}} \tn \SetRowColor{white} \mymulticolumn{1}{x{5.377cm}}{Use when you can identify a pattern but cannot create a computational formula. \newline % Row Count 2 (+ 2) 1. List the potential outcomes \newline % Row Count 3 (+ 1) 2. List the considerations (what do we have to consider in making this decision?) \newline % Row Count 5 (+ 2) 3. Define the individual cases (what are the actual different inputs?) \newline % Row Count 7 (+ 2) 4. Define a default and place at the top of the table% Row Count 9 (+ 2) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} % That's all folks \end{multicols*} \end{document}