Here's a keyvalue interface approach.
Define 'arbitrary' keys for a key family, say wpkeys with \define@key and assign the key-value to a macro that has a similar name like the key (easier to remember). Those keys can be given as an optional argument to \workpackage then.
The real content is given as the first mandatory argument, for example.
With
\setkeys{wpkeys}{prerequisites=none,leftheader={Effort},#1}%
it is possible to preset some keys that should some values if they are not explicitly given.
Please note that due to the shortness of my example this will leave the content of \leftheader etc. defined even for the next usage of the \workpackage macro.
\documentclass{article}
\usepackage{tabularx}
\usepackage{xkeyval}
\makeatletter
\define@key{wpkeys}{leftheader}{%
\def\leftheader{#1}
}
\define@key{wpkeys}{rightheader}{%
\def\rightheader{#1}
}
\define@key{wpkeys}{prerequisites}{%
\def\prerequisites{#1}
}
\makeatother
\newcommand{\workpackage}[2][]{%
\setkeys{wpkeys}{prerequisites=none,leftheader={Effort},#1}%
\begin{tabularx}{\linewidth}{|p{3cm}|X|}
\hline
\leftheader & \rightheader \tabularnewline
\hline
Content & #2 \tabularnewline
\hline
Pre-requisites & \prerequisites \tabularnewline
\hline
\end{tabularx}
}
\begin{document}
\workpackage[rightheader={2 person weeks}]{\begin{itemize} \item foo \item foobar \end{itemize}}
\workpackage[rightheader={5 person weeks},prerequisites={a lot}]{\begin{itemize} \item foo \item foobar \end{itemize}}
\end{document}
I leave the table design to the O.P.

Update A little bit nicer/easier to use:
\documentclass{article}
\usepackage[x11names]{xcolor}
\usepackage{tabularx}
\usepackage{xkeyval}
\makeatletter
\define@key{wpkeys}{leftheader}{%
\def\leftheader{#1}
}
\define@key{wpkeys}{rightheader}{%
\def\rightheader{#1}
}
\define@key{wpkeys}{prerequisites}{%
\def\prerequisites{#1}
}
\define@key{wpkeys}{contentname}{%
\def\contentcolumnheadername{#1}
}
\define@key{wpkeys}{prerequisitesname}{%
\def\prerequisitescolumnheadername{#1}
}
\define@key{wpkeys}{contentheaderstyle}{%
\def\contentheaderstyle{#1}%
}
\define@key{wpkeys}{prerequisitesheaderstyle}{%
\def\prerequisitesheaderstyle{#1}%
}
\define@key{wpkeys}{leftheaderstyle}{%
\def\leftheaderstyle{#1}%
}
\define@key{wpkeys}{rightheaderstyle}{%
\def\rightheaderstyle{#1}%
}
% Tabular lengths etc.
\newlength\wp@leftcolumnwidth
\setlength{\wp@leftcolumnwidth}{3cm} % A default value
\define@key{wpkeys}{leftcolumnwidth}{%
\setlength{\wp@leftcolumnwidth}{#1}%
}
\define@key{wpkeys}{arraystretch}{%
\renewcommand{\arraystretch}{#1}%
}
\presetkeys{wpkeys}{%
arraystretch=1.5,
contentheaderstyle={\textbf},
prerequisitesheaderstyle={\textit},
rightheaderstyle={\large\bfseries\textcolor{blue}},
leftheaderstyle={\large\bfseries\textcolor{red}},
}{}
\newcommand{\workpackage}[2][]{%
\begingroup
\setkeys{wpkeys}{contentname={Content},prerequisitesname={Pre - Requisites},prerequisites=none,leftheader={Effort},#1}%
\begin{tabularx}{\linewidth}{|p{\wp@leftcolumnwidth}|X|}
\hline
\leftheaderstyle{\leftheader} & \rightheaderstyle{\rightheader} \tabularnewline
\hline
\contentheaderstyle{\contentcolumnheadername} & #2 \tabularnewline
\hline
\prerequisitesheaderstyle{\prerequisitescolumnheadername} & \topsep=0pt\prerequisites \tabularnewline
\hline
\end{tabularx}
\endgroup
}
\makeatother
\begin{document}
\workpackage[rightheader={2 person weeks}]{\begin{itemize} \item foo \item foobar \end{itemize}}
\workpackage[rightheader={5 person weeks},prerequisites={\begin{itemize} \item A nice list \item that ends \item after three items\end{itemize}}]{\begin{itemize} \item foo \item foobar \end{itemize}}
\end{document}

\newcommandonly takes up to 9 arguments. If your table requires more entries than that, something more clever is required. – Steven B. Segletes Mar 23 '16 at 12:28etoolboxand itsforcvslistcommands or the new LaTeX 3 paradigm with\clist_map_inline:Nnbut this requires some experience, actually. – Mar 23 '16 at 12:53