The natural progression from VEX Edge Divide to bilinear subdivision is quite linear. That's also why I started with Edge Divide first as a stepping stone, both in terms of relevancy to the previous topics that led up to that moment, as well as logically dividing up the tasks to fully implement Catmull-Clark subdivision in VEX.
The biggest challenges are not the algorithms per se, but setting up the code framework to first split up polygon edges, rebuild polygons, interpolate point, primitive, vertex attributes and preserve group memberships.
Once you create this setup, the rest is quite straight forward, especially for bilinear subdivision.
The only differences are, to create an additional point for each closed input polygon, and to create multiple new faces using the new edge points and the new face point. Granted there will be considerable new code to handle the interpolation of the new elements, that's quite different than how VEX Edge Divide SOP does it, but it's still a small hurdle relatively speaking.
https://www.dropbox.com/s/f3s2cfx0ew2qu5f/Subdivide_SOP_Animatrix.otl?dl=1