Place the beans into a large pot or Dutch oven and cover with 1" of water.
Bring to a boil, then reduce heat to a simmer and simmer, covered, for 15 minutes.
Drain and reserve the beans.
Add the oil to the pot or Dutch oven over medium-high heat.
Add the onion and saute for 3 minutes, stirring, until just starting to soften.
Add the garlic and cook another 1 minute.
Add the beans back into the pot along with the ham shank, water, coffee and salt and pepper to taste.
Bring to a simmer and cover. Cook for 40 minutes or longer until the beans are just soft.
Stir in the BBQ sauce and cover again and continue to simmer until the meat falls away from the ham shank bone, about 2 hours.
Remove the shank and remove any meat. Chop and return the meat to the pot, stirring.
Serve hot with chopped roasted jalapenos, chopped red onion and shredded cheese.