Microconf Takeaways

Rob Walling and Mike Taber at the kickoff of microconf 2014

Rob Walling and Mike Taber at the kickoff of microconf 2014

Just had a great time in Vegas with some other small startup guys talking about how to create something that has real value for people — how to help folks in the world. As a side-effect, the goal is to work from home, spending lots of time with your family. It’s no get-rich-quick scheme: everybody has to find their own path. But there are a lot of common things too. Most of us use the internet, most of us either used to program or program now, most of us are part of something called the Micropreneur Academy, and most us, well, are nerds.

Here are the three things I learned (or re-learned) about myself this year:

I don’t know enough about the customer. Yes, I know the job of people I’m helping. Yes, I know the subject area I’m trying to teach. But while I have general and in-depth knowledge, that ain’t cutting it. I need to climb inside my customer’s head, spend time with them doing their work from their point of view, not mine. I keep wanting to jump ahead to the business-building part of things, instead of product-market fit. If I get the right product-market fit, the market will “pull” the rest of the business from me. People will be clamoring at the door demanding that I take their money. If I don’t? Then I’m building something and trying to beat people over the head with it. Don’t do that, Daniel. It hurts.

Hey, I actually know this stuff. Since I’m trying to help people create, maintain, and optimize their to-do lists (backlogs), it would help if I knew what I was talking about. The more I interacted with fellow startup guys, the more I realized that I actually could help these folks too. I’m actually on to something very useful across a broad market. In fact, because book 3 is going to be on backlogs and startups, I can start “eating my own dogfood” and use the things I know in the work I’m doing. It sounds like I am an idiot for not knowing/doing this already, I know. But a lot of times there’s really obvious stuff right in front of you that you miss because you’re in the weeds. Jesse Mecham gave a great talk yesterday about this. He was running a profitable startup for years and still afraid to quit his day job because of his desire for security. It took going to a minister for somebody to convince him he had the answer all along.

Teach more to make more friends. This is one of those things that I understand intellectually, but I don’t think I really get it. Plus, as somebody who took years to learn a few things, I’m seeing these guys become experts in stuff that took a month or two, and then overgeneralizing what they know and saying things that aren’t necessarily true. This makes it tougher on the next guy who comes along who tries to take the reader to the next level. But I understand that taking somebody on a journey of learning with you is good for both of you. I need to keep banging this against my head until it sinks in.

My three action items:

Start talking to people on the phone. Once they sign up for the email course, ask them if they have a few minutes to chat. Get to know why people are interested in learning more about helping Agile teams. There’s no agenda: I’m not trying to sell or push products. Simply trying to gain as much loosely-formatted and unstructured data as possible that I can then go back and find themes and put some structure around.

Use my backlog principles to organize my own startup work. Hey, if the goal here is to complete a series of books that wraps up value creation from customer development to 20,000-person enterprises, time to put the stuff in book 3 to the test personally, instead of just reading about it and watching it. The startup part is probably part of the series I’m weakest on, so nothing like the present to fix that. Not only does this make sense, it’s only an hour or two of work, maybe every month or two. No biggie. (Which is one of the beauties of getting this out to folks, it should take a tough thing and make it much easier)

Revamp my email strategy. Right now I have an Agile Tune-Up email series that runs every week over a period of a year. The purpose is to get to know folks, start a conversation, let them know who I am and that I know some stuff that could help them. That’s about it. I really should 1) offer a free multi-part course or something else of value in return for folks joining the list, 2) re-vamp my weekly series so it’s more useful to the readers, 3) manually test out the emails that go out before I automate the process so that the formatting, message, and timing is exactly what I want, and 4) add in a bit of data around segmentation when people join the list so I can help them better. Are they coaches? Guys working at a big corporation? A startup? I need to create a trial scoring system and hook that into the people I interact with. Powerful idea from Brennan Dunn yesterday. Looking forward to implementing it.

As soon I finish creating the 17 clones I will need to do all of this.

But wait! There’s more! I have a couple of strategic bonus problems that need to be solved right away.

Videos or books? I’m halfway through Backlogs 2, and I only have an early version of the first of eight videos completed for the Backlogs 1 series. Looks like completing either of those two projects should take a solid 3 months. I can’t do both — or rather if it’s possible I don’t understand how. So what to do? Finish the video series so that folks can have the hard-nosed, detailed, deep-dive down on personal and team backlogs after they finish the first book? Or go ahead and continue the story with Smith and the plant, giving people more entertainment — perhaps even finishing the final book — then swinging back for the videos? Maybe neither? Maybe I just stop now and go start marketing the hell out of the book I’ve already completed. Beats me, and I’m the one supposed to be figuring this stuff out.

All-in-all, it was a great conference. Lots to think about, great folks, and some terrific tactical advice that I didn’t even get into here. Good stuff.

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

F#, Mono, Agile, Architecture, DevOps

Several people have asked online lately, “Can you really write production code in F# and mono?”, “How are you doing architecture now that you’ve switched completely to F#”, and “Aren’t you doing some kind of weird thing now that doesn’t work with interactive websites?”

I usually don’t do coding blogs, because, frankly, after a while it all gets pretty boring. Same old bytes, just new bells and whistles on top. But my approach to architecture has changed in a major way over the last five years. Might as well document it.

Description of Problem Domain. For our sample project, let’s take Newspaper23. It’s a production system with a small number of users that’s been running for a few years and has evolved through my change in philosophy.

Newspaper 23 exists for one reason: I have a very short attention span. Websites are always trying to get me to hang around, click on related stories, sign-up for things, and so on. I find this very distracting. It’s very easy for me to spend a lot of time online that’s unproductive. So a few years ago I had an idea: since the news I consume is all from a dozen or two sites, why don’t I just harvest the titles and links from those sites and put them in a big list? Then I’m choosing what content to consume based on the site brand and the title of the article, not social cues or any other nonsense.

So I got out my credit card, went over to Amazon AWS, and fired up the site.

The Old, Old Way of doing things. The first time through, I did this in a “classic” manner. I sketched out a domain model, I elaborated a bit on a database model, I built a database model in MySQL, and I created a new C# app in Visual Studio and wrote a program to do everything that was needed — get some links, save the data about them, create a page with the links, do some “other stuff”.

The problem was, I was never really clear what the program should do. Should I collect the votes the article had from reddit? Don’t know, so I’ll throw that in there and save it. Might need it later. Should I provide the ability to comment, or vote? Don’t know. I’ll add space — after all, space is cheap — and if I need it, it’s there. Should there be some kind of authentication? Beats me. (Decided to skip that one)

Don’t get me wrong; none of this was a heavyweight or Big Design Up Front process. I’m only talking about an hour or two of doodling around with things. And the beauty of modern tools is that it really doesn’t matter whether your table has 5 fields or 10. Unless you’re writing the code to do something with the data, it’s just “out there”.

It did make the “link sucking” process a little more complicated, because with different sites I had to get different pieces of data. Fair enough.

What happened. After a couple of weeks of off-and-on coding, I got the program up and running, along with a unique system for identifying data on a web page to harvest. (It was a recursive RegEx language. Please, no “but you can’t use Regex on html!” It looked good.) The code base consisted of a data tier, some controller logic on top, and it seemed to work fine.

For a while.

But over a period of just a few days or weeks, it seemed like there were always these weird edge cases, both in the sites, and more disturbingly, in the tool version, setup, and configuration. Site X would change their format, and I’d be in the code changing the way I received links. Yes, I had hard-coded in the parameters for each site, but how difficult was it to change some hard-coded values once or twice a year? Except the more source code there was, and the more I touched the code, the more errors I got. And it seemed like for one reason or the other with this way of programming there was a boatload of code to wade through and I was always horsing around with it. [insert discussion here about TDD]

By using a MVC paradigm, I had written one piece of software that I could easily lay a bunch of different controllers down on. In fact, as we all know, I could develop a “controller library” over time that would take the data and do all sorts of wondrous and amazing things. That’s the beauty of a good model — it facilitates many different solutions.

I still think this might be the way to go, assuming 1) you use good testing practices, and 2) you’re going to constantly be under the hood in the code for a long time. But it introduced all kinds of problems related to having everything pass through one executable and code base. Did I really want to horse around with the code that grabbed links, for instance, simply because I was fixing the code that wrote the web page? Why was I putting all of my eggs in one basket? OOP is a great way of doing things, but it introduces a freaking huge amount of hidden interdependencies. Some times I wonder if 90% of the problems development teams have with programming is based on the fact that in the developer’s mind there is separation of model and controller, but that in the wiring itself, things can be all hooked together in completely insane ways, usually for what seemed like good reasons at the time. The black box of OOP has a lot of very sharp edges.

The Old Way of doing things. The first thing I did was ditch C#. It’s a great language, a better Java than Java, but it was the wrong paradigm for me. The second thing I did was start to build the app from the ground-up. Programming functionally required me to write functions that did things. This sounds blazingly obvious, but it’s actually a much different way of looking at things from creating a model and adding controllers on top. I still used the MySQL datastore — had to put stuff somewhere — but my code was a LOT smaller.

It also needed much less tweaking. Remember: this is personal programming. Instead of sitting on top of a model that could do many things and having to choose what to implement, which might cover calls all over the place, my code did a few things, and there was a clear path to the data for the things it did.

What happened. There was still that problem with everything running through one spot. If I wanted to tweak anything, anywhere, I’m opening up the entire codebase to make a change.

Interestingly, since this was revision 2, the code ran for much longer without needing tweaking. This meant that when I did get around to tweaking it, I had forgotten the build setup! So I’d have a 2-line change that would require screwing around with re-remembering the build-deploy environment. That might take several hours. Plus the sites were still hard-coded. The output was hard-coded. As much as I loved data-driven programming, why was everything so coupled?

Along this time I built HN Books, a social book site for hackers. It was all static. I found I could do a lot with static web pages and JSON files. Much more than most web programmers would believe.

Hmm. Fuctional programming. Static pages. Hmmm.

The way I do things now.

So now I have a new philosophy:

  • Third time through, I decided I write small programs. As small as I can. Instead of one big honking system, my system has four programs: GetLinks, UpdateArticleLibrary, CreateSelectedArticleList, and FormatSelectedArticleList. There’s a bonus utility, CheckXPath, which lets me check out XPath strings against websites to make sure they work (in case the site layout changes). I use as few external libraries, tools, or frameworks as possible. Over the years, I’ve found that every tool I picked up had 40 tons of features, of which I only needed 3. That meant that whenever I needed to do something simple that I had never done before, I had to wade through all sorts of forums, hearing about all sorts of arcane switches and other stuff. Screw that. I do not need to buy and operate a nuclear attack sub to go fishing from the pier. So — no Visual Studio, no MySQL, no complex dependencies at all. (Having said that, I actually dumped my custom link-sucking system and went with HtmlAgilityPack. I mean heck, once it’s installed, it’s just XPath. Time spent learning XPath is not as completely sunk as time spent learning WhizBang 7). Simplify.

  • My files read and write data on the local storage. I’m not doing transactions, therefore I don’t need a transactional datastore. It’s functional coding. Things come in, things go out. The O/S already has a wonderful tool for storing things. It’s called a file system, and unless I’m going to be moving around tens of thousands of these things, it’ll work just fine, thank you. Simplify.

  • I use the O/S to schedule when the programs run and to move things around. Instead of having one program that runs once a day, split the work up into a “pipeline” and have the O/S manage the pipeline. It’s already good at managing processes — it has all kinds of tools for it. Use them. Simplify.

  • I don’t “interact”. I process things at certain times. In the old days, I’d have an instance of my program spun up in Apache, waiting around in fastCGI for a client to come and connect. Then the program would do all sorts of things depending on which client it was, what the request was, and so on.

    After many, many years of coding like this, I had to ask myself: why? Why the hell am I doing it this way? 9 times out of ten I’m delivering the same content. 9 times out of ten the client is just reading stuff. 9 times out of 10 I’m creating database connections, cursors, and all sorts of other cruft — just to send the same stuff back down the wire as I sent 2 seconds ago. For the huge majority of the use cases I can imagine, even for interactive sites, there’s no difference at all to the user between a program that sits waiting for connections and a series of programs that updates data every few seconds. This is stupid. Don’t do this any more. Decouple. Simplify.


  • I write simple queries to monitor how things are moving through the pipeline. Quite frankly, the system is running so well I don’t need to monitor it, but if I did, I’d simply monitor how things flow through the pipeline. I could even make a nice html page with graphs. Don’t need to, but it’s an easy option. In fact, I’d argue that the only things interesting to me as a owner/maintainer would be things visible at a system level, not a programming level. Huge win here: no programming skill required to look at CLR innards, just O/S skills. Simplify.

  • Nothing exists as hard-coded data. It’s all either config files or command-line parameters. Right now as I bring up the page, I can see that Hacker News isn’t returning any data. If I wanted, I could probably figure out what the problem was and fix it (assuming it was fixable on my end) in about 10 minutes. No programming required. All I need is a shell. I AM re-coding the system, kinda. I decided that since I have 10-15 functions that are the same across each executable, it would make sense to create one Visual Studio solution and share a couple of library source files. Welcome back to the days of shared C header files! I’m also making the logging more robust. Right now I log everything. (I don’t read the logs, but they are there.) This is using up too much disc space. Every few months I have to clean it out. So a more fine-tuned logging system would be nice. Maybe. Maybe not. Simplify.

  • TDD? TDD? We don’t need no stinking TDD. With purely functional programming, there are only 3 mistakes I can make: Failure to break down transforms into understandable atomic units, failure to describe the transform correctly, and failure to validate the data. If I do all three of those correctly? There’s nothing to test. It’s like trying to test an SQL select statement. The idea doesn’t make sense. Simplify.

It’s very nice. Here’s the main function for the first program in the chain, GetLinks, that gets links from sites (duh):

Code Snippet
  1. [<EntryPoint>]
  2. let main argv =
  3.     try
  4.         let opts = parseCommandLineArgs (Array.toList argv)
  5.         if opts.verbose >= Verbosity.Normal then
  6.             printfn "Options Selected:"
  7.             printfn "%A" opts
  8.             printfn ""
  9.         let config = getConfigData opts
  10.         let outputDataHolder = {
  11.             outputSections = new System.Collections.Generic.Dictionary<string, outputSection>()}
  12.         let outputData = ripLinks opts config outputDataHolder
  13.         printfn "Processing Complete for %A" opts.siteUrl
  14.         let numberOfDataPointsMatchMessage =
  15.             if outputData.outputSections.Count>0
  16.             then
  17.                 let max = outputData.outputSections |> Seq.maxBy(fun x->x.Value.outputList.Count)
  18.                 let maxCount = max.Value.outputList.Count
  19.                 let min = outputData.outputSections |> Seq.minBy(fun x->x.Value.outputList.Count)
  20.                 let minCount = min.Value.outputList.Count
  21.                 if maxCount = minCount
  22.                 then
  23.                       maxCount.ToString() + " links with " + (outputData.outputSections.Count-1).ToString() + " pieces of additional information about each link gathered."
  24.                 else "Number of links, titles, and other Data DOES NOT MATCH.\r\n" + max.Key + "  has " + maxCount.ToString() + "entries while " + min.Key + " has " + minCount.ToString() + ".\r\nCheck your configuration file or run this program with the verbose option set /V"
  25.             else
  26.                 "\r\n\r\nTHERE WERE NO SECTIONS OUTPUT.\r\nPlease check your configuration file.\r\nTry running this program with the /V option"
  27.         System.Console.WriteLine(numberOfDataPointsMatchMessage)
  28.         0 // return an integer exit code
  29.     with
  30.         | :? UserNeedsHelp as hex ->
  31.             System.Console.WriteLine("You'd like help")
  32.             System.Console.WriteLine("Good luck with that")
  33.             System.Console.WriteLine("/V for verbose output")
  34.             System.Console.WriteLine("/S:<url> to set the target site url")
  35.             System.Console.WriteLine("/C:<filename> to set the config file used. Config file is expected to have Windows line returns \r\n")
  36.             System.Console.WriteLine("/O:<filename> to set the output file created/overwritten")
  37.             System.Console.WriteLine("/N:<integer> number of links desired")
  38.             System.Console.WriteLine("")
  39.             0


This is 50 lines of code. But it’s really only 4, lines 204-207. It gets the configs passed in. It creates a new container to hold the output data, it processes the link, and then it saves the data (which happens in the ripLink function. Should be down in this one. Ugh.) The rest of it is logging and help system stuff.

I could show you ripLinks, but it’s the same deal: 50 lines of code which are really about 10. It gets the links from the page using the “ripLinksOnAPage” function (clever naming, eh?), then it processes the links according to the config file.

Let’s look at how it breaks up.

wtf-blog-getLinks-fd

As you can see, there are really only 5 functions, ripLinks, http, loadHtml, recBuildLinksUp, writeLinksOut, and ripLinksOnAPage. The rest is either library calls or a few small helper functions. Take out the logging and some of the other broilerplate, and there’s maybe 50 lines of “real code” here.

We’ve done something simple, easily describable, and concrete. We took stuff from the file system, read a webpage, wrote stuff to the file system. Logged as we went along. That’s it. No need to solve world hunger. It has value.

This code has been running for more than a year with no modifications. I expect it to continue running forever. I’m done. Isn’t that nice?

Common objections.

It’s re-inventing the wheel. In most cases, I don’t need a wheel. I need a lug nut. Yes, I know what the wheel looks like, but the cognitive load of buying a big stack of wheels and carrying them around when I just need a couple of lug nuts? Tell you what. If I start thinking about round things to fit on cars, I’ll get a wheel. Otherwise I’m fine.

It’ll never scale. The funny part about this objection is the opposite is true: the more complex your stack, the more difficult and nuanced it is to scale. I can take this app and scale it out as far as I like. Heck, copy it to a CDN. We’re done. And for those of you thinking interactivity, think long and hard whether you need immediate feedback for the user or just something that changes every few seconds or once a minute. You could be spending a huge number of processor cycles worrying about concurrent clients when you really don’t need it.

It’s poorly-thought-out. My datastore? Line-delimited text files. Code complexity? Nothing more than a few hundred lines of code. Is there anything it can’t do? Not really. But (and this would be the objection I would have made several years ago) what if you want it to do something that required the data to change? Wouldn’t you have to re-jigger every piece of code in the pipeline?

Not really. First, because I’m using name-value pairs, I can always add data and not use it. So really, what would happen if I wanted some cool new feature would be 1) I’d change the data representation where it was created, 2) I’d add the code to store it, and 3) I’d add the code to use it. If you’ve worked in a functional environment, this is the way you make changes anyway. Nothing new here.

It’s not as cool as X. Probably not.

The deployment process is brittle. Actually, although I’m not continuously deploying what I write — there’s no need to automate it when it’s just me — I’m integrating DevOps directly into the solution. There’s no one part of this solution that’s “programming” and another part that’s “deployment”. It’s all integrated together. Instead of good coupling and cohesion at the function level, I have good coupling and cohesion at both the function and the executable level. Very cool stuff.

Continuing to add features. The very next thing I’m going to do is add/adjust the logging. Having to clean out the logs once every 3 or 4 months is a chore. Next up in my quest to eliminate distractions, I’ll probably go to the target site and rip the plain text and store it here. I’ve thought about adding voting and commenting, but it’s a personal site.

None of this will require a major change or a re-think of how the architecture works. Mostly the system just works and I don’t have to mess with it. O/S updates handle updating security and scaling problems. I worked a bit to make the solution, and now the solution works for me. And isn’t that the entire idea?

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Smart people don’t read the news

When I was a kid, going to secondary school and college, smart people consumed the news.

If you didn’t have much time, you “snacked” — consumed the few news segments on TV. If you considered yourself a serious person in society, wanting to be an informed voter and current on events and discoveries of the day, you got a morning newspaper and read it. Gave you wonderful material for conversation the rest of the day. Finally, if you really wanted to understand how the world around you worked, you subscribed to magazines, where long format and deep-dive articles took their time explaining to you why things were the way they were.

No more.

Nowadays most people don’t trust the news, but they still consume it. I find that odd.

The usual culprit is that the press has some sort of leaning to it — it’s either conservative or liberal. But press has always been biased, so I don’t buy that. People will tell you that it was the fault of cable TV and the 24-hour news cycle, but while that played a contributing factor, I don’t think it’s the entire story.

Nope, the reason consuming the news today sucks is that we live in a world of constant outrage.

At some point, news publishers realized that emotional engagement, not facts or solid background material, drove readers to consume and share. So all of our media channels are full of people who are either outraged about something or are using thinly-veiled logic to get us upset about something.

And so we have a treasure trove of material designed to drive “engagement”, which just means it’s stuff guaranteed to provoke an argument. Any news event can be spun half a dozen ways to try to generate anger — and it will be. Then, whichever angle works out the best will be mined for eyeballs until the next story comes along.

This consumption of material engineered to constantly outrage does not make for a healthy mind. Part of the reason is the constant emotional roller coaster it puts the consumer in, but part of the reason is that the media outlets are constantly trying to cover up and deny that this is why they’re running the stories to begin with. So most outlets well-known for “just the facts” reporting are anymore just presenting a light sheen on top of articles designed to enforce pre-existing attitudes.

Put another way, the reader is constantly being manipulated. The only question is the degree of manipulation and the honesty involved.

That’s why I’ve converted to reading tweets and opinion columns. Tweets are almost entirely too shallow to waste much of my time, and they’re wildly inaccurate, but they keep me apprised of the general gist of day-to-day conversation. Opinion columns are there to make a point regarding some pre-existing opinion. I find that to be perfectly fine. If you’re going to spin and slant the news to make your point, at least be a man about it and tell it to my face. Don’t hide behind “analysis” and pro and con segments.

With these two forms of news consumption, as long as I read opinion columns from all over the spectrum, I get a fairly good balanced diet of what’s going on. I don’t find all the drama in the news that my fellow consumers feel.

Consuming the news has changed. Smart people don’t do it like they used to.

I wish I could say long format pieces have survived this shift. They have not. More and more, I’m seeing long format articles that amount to nothing much more than extended arguments put forward by one special interest or another, many times with an interview of a token person holding an opposing position as some sort of fig leaf to “fairness”. What is needed here, as in tech and science news, is reporters that actually know their area and can write stories at length about important events happening there. Instead what we’re finding is reporters who are getting socially involved in issues, then try to pry meaningful news from their social network. You end up with four-thousand-word cocktail party chat. Not always, but more and more.

It’s sad that news is dead. As a former freelance writer who has written for both weekly, daily, and magazine outlets, I liked them. The TV guys were never hitting on much, but they had a fun, egocentric job to do as well. These guys as purveyors of what’s important to know are long gone. Their job positions and media outlets will go on for many decades longer, sadly. And dumb people will keep consuming them, keep getting upset every day, and keep wondering why the world is such a bad place to live in.

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Publishing Your Ebook For Nerds – Lessons Learned

Working on wrapping up my third e-book. It’s a book on how to make and manage effective backlogs, or the lists of things both teams and developers do. The first two were kind of a lark — although I was trying as hard as I could, I realized that this was something that was going to take a while to learn.

This time around my e-book is much larger, and I’m hoping to hit the mainstream, both in terms of content and quality. Most all organizations have the job of coordinating their work both globally and locally, and I’ve made the book as a lesson wrapped in a story. I figure either you’ll like the lesson or the story, maybe both.

After spending several days fighting tools, I thought it’d be good to capture what I’ve learned. If you’re a tech person who wants to write an e-book, this’ll help you get from words to e-book format.

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

WLS 24 – 8 months in

Ok, ok, I was sucking my gut in. I admit it!

Ok, ok, I was sucking my gut in. I admit it!

Eight months after weight loss surgery. Not a lot new to report.

My weight loss has slowed to a crawl. About 2-3 pounds a month. I don’t get sick eating at all, and I guess I can eat what I want. A couple of times I’ve had a craving for things outside my normal diet, like popcorn, or apple butter toast. Each time I went ahead and had some — after all, if you’re craving it you’re going to eat it sooner or later — and neither time did I explode or turn into a lizard. Disaster did not await.

Of course, with the new stomach I don’t eat as much. So, when I wanted that Apple Butter toast, I made four slices. But I was barely able to eat two. And even then I felt way too full.

Popcorn was fun. I’ve had it twice. The first time I had about a cereal bowl of popped popcorn, then I felt really full. The second time I decided to make it my morning meal, so I nibbled on it throughout the entire morning. No drinks, of course, still sticking to the 30-30 rule. Just popcorn.

Wish there was more to report, but not a lot of drama here lately. Back at work, busy, just doing stuff.

So I guess that’s the good news! I think a couple more of these weight loss entries and it will be time for a wrap-up.

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

WLS 23 – Tyranny of the Gumballs

Gained two pounds over the past two weeks. And I’m embarrassed to say why.

Yes, it was the Christmas holiday. Yes, my exercise was off. Yes, I didn’t keep track of what I ate.

But it was all gumballs.

It started off innocently enough. I had gotten into the habit of chewing gum after I ate. It was a long time to wait for that first drink! So sugar free gum and mints helped pass the time.

This worked fine until I ran out of gum during the holidays. Then I looked around — and saw a 20-pound tub of bubble gum I had bought a year ago for my daughter’s gumball business. Just sitting there.

Wow! Was that some crunchy gum! But I found that it tasted good enough, once I got going. In fact, it tasted pretty good! Nothing like a few grams of sugar to get you boosted up.

Turns out that eating sugar was not going to cause me dumping syndrome. Oh well, another barrier to gaining weight shot to shit.

They say that’s what happens: for many folks, you eventually get to where you can eat everything you used to. At that point, it’s like you never had the surgery.

This is not a good thing. In fact, it leads me to believe that those folks who complain the most about their RNY (aside from those with severe complications) are probably getting the most from it. All that sickness, not being able to eat very much, and worrying about certain foods? That’s a great way to get you to 1) reduce what you eat, and 2) pay attention to what’s going in your mouth.

So perhaps complaining about the discomfort of RNY is actually a positive indicator. Go figure.

As for me, inside of two weeks my gumball consumption went berserko. From eating one gumball at a time, I found I could eat two, then three, then four.

Hey, it was Christmas! And it wasn’t like I was eating chocolates or candy. It was just gum.

Before it was all over with, I was sitting down and chewing 20-30 gumballs at a time. Put 2 in, chew them up, then spit them out and put in another two. It was like a day-long sugar rush.

And of course, this did all sorts of nasty things to my metabolism. I would wake up with a headache. My tongue felt like I had been chewing on it, not the gum. I became hungry again quickly after I had ate. Finally I realized I had to quit. Yesterday I made it a point not to have any gum at all.

This resulted in a day-long headache. I can tell you, this was not a fun experience.

So let’s not do that again, okay?

But it goes to prove a point: as you get older, your physiological system becomes less stable. It’s easy to get out of whack, and it’s tougher to stay in whack. Very old people end up taking several different kinds of medications — and they all have side effects. Fat people probably end up with some kind of imbalance earlier on in life. I don’t think there’s any magic cure, and I don’t know if the imbalance is due to sugar consumption, growth hormones, hunger hormones, or too much rock music. But I do feel that this is a natural process of your body system getting skewed.

I also feel like you have to make a decision: how much discomfort are you willing to go through to keep your system in whack? How much of a change in lifestyle? I told the nutritionist the last time I saw her that I had lost most of my initial weight, and I was now considering what kinds of temporary changes I wanted to make permanent.

Sounds pretty obvious to most — do anything to keep the weight off! But it’s not so simple. Do you want to not be able to attend dinner parties without being the only “non-eater” there? Do you want to not socially drink alcohol? How about pre-measuring your food? Happy with pre-measuring your food — for the rest of your life?

These are not easy questions, and over the long term your body is going to go out of whack anyway. That’s just the way bodies are. So it’s always going to be a losing game. The only questions is how much you want to change your life to slow things down before the inevitable.

I don’t know the answers, but I know that I don’t want another day-long headache. Or to gain 2 pounds because of something stupid like bubblegum. If I’m gaining two pounds, dammit, it should at least involve a buffet or a cruise or something! :)

So if you know of anybody that wants 5 pounds of bubble gum? Send them my way.

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Christmas is a Really Weird Holiday

Currier And Ives Christmas Village
The ancient Romans had a problem. A new cult arrived, bringing with it the most distasteful practices. The members all were atheists. They were also incestuous, and they had secret cannibalistic rituals.

The new guys? Some jerks called “Christians”. That’s right: they refused to believe in the Gods, they called each other “brother” and “sister” and greeted with a kiss, and rumor had it that they took part in some kind of ritual that involved eating the flesh and drinking the blood of others. Most folks thought they were killing babies.

New people are always bringing in new ideas and messing things up.

Take Christmas. As far as we know, some kind of holiday around this time has been celebrated forever. Go back ten thousand years, and you’ll find humans dancing around a fire around this day. They just didn’t call it Christmas. Nowadays the best scientific name for this day is the Winter Solstice. It marks the shortest day in the year, and it’s something that any culture that watches the sky would know and wonder about. Would the sun continue retreating? What could be done to bring Spring back? People built bonfires (along with large “yule” logs), used trees in ceremonies, had great gatherings, built huge edifices to properly revere the sun and help bring back much needed warmth to the land.

Then those new guys showed up with this fancy concept called “civilization” (a word which was only invented centuries later!). They wanted everybody to kind of standardize the holiday. Some of them settled on “Saturnalia” It was a pretty fun holiday. Slaves got to play the role of masters, and masters got to be slaves. There was drinking, families visited together, and everybody was thankful to spend time together. Geesh! Did we really need human sacrifices and all of that crazy superstitious stuff this time of year when we had the God Saturn and the proper celebration that should be given to him at this time?

But that didn’t last. And it was those atheist cannibal Christian types that ruined it.

At first, Christians refused to have anything to do with celebrating the birth of Jesus. Why should they? The entire religion was based on the death and resurrection of Jesus, not his birth. The first gospel written, Mark, makes no mention at all of Jesus’ birth. Later gospels went big on the story, though, with wise men, jealous kings, and all sorts of other great themes. But even then, early Christians had little interest in the beginning of the Jesus story. It was the last part that was the important part for them.

“It is only sinners like Pharaoh and Herod who make great rejoicings over the day on which they were born into this world,” said Origen, one of the most notable early church leaders.

People have a hard time believing this today, but early on it was the story of Christianity that was far more important than the historical detail or places. It wasn’t until the Middle Ages that visiting holy sites became much of a big deal. What would be the point of visiting a bunch of old places? Those things were trivial compared to the meaning of the story.

The Gospel of John helped to change that, but it took a long time. John was unlike any of the other three gospels (stories of Jesus’ life) in that it tried to join philosophy and religion together. Many scholars view John as being the product of an early Christian church with a heavy Greek influence. As science and the scientific method has progressed, people took this theme of philosophy and reasoning and started focusing on sourcing and facts. Christians are especially interesting in becoming more interested in “proving” that all these things have historical meaning and validation. Compare this to many other religions which to this day are not concerned with these matters. But I digress.

Because of this joining of philosophy and religion, or in spite of it, Christianity took off in a big way, eventually becoming the state religion of Rome, even though many still kept to the old ways too. Eventually this was a problem: fervent adherents wanted to know: why should we allow folks to keep celebrating this Saturnalia thing? People loved it, but it had nothing to do with Christianity. In fact, it was bad for the brand. It sowed confusion, it diluted the message, it hurt adoption.

So somebody came up with a great idea. “I know,” they said, “let’s keep Saturnalia and all that other stuff, but we’ll also have a celebration at this time for the birth of Jesus! We don’t do anything for that, and that way everybody can have a big party and at the same time be doing it the right way.” (Some scholars consider this the first great ancient marketing ploy)

So the organized, official Christian church used Microsoft’s embrace, extend, and extinguish strategy, but it still didn’t sit well with many of the troops. Why do we need to create some new holiday and do a bunch of pagan stuff? What kind of belief system is that? Indeed, most Christians refused to have anything to do with it. But it was great for converting the unwashed masses. For a long, long time, most Christians would have nothing to do with a mid-winter celebration in honor of Jesus’s birthday. In fact, in the New World, it was outlawed.

But slowly, over the centuries, most all of the Western World adopted this time of year as being appropriate to celebrate the birth of Jesus — if only in a muted way. Even though, of course, Jesus was not born at this time of year. It seems that when he was actually born had little to do with when his birthday should be.

But even all of that compromise wasn’t good enough.

First, people stayed upset about keeping the old traditions around. Geesh! Did we really need yule logs, trees, partying, and all that crazy superstitious stuff this time of year when we had Jesus and the proper celebration of his birth?

Second, for out on the lawn, there arose quite a clatter. Somehow in all of this arguing over when Jesus was born, or if we should actually care about it or do anything about it, one of the obscure Catholic saints, some guy called Saint Nicholas, took on a big role. He had a red coat, a flying miniature sleigh, delivered presents, and…

Wait, what? Where the heck did he come from? And what does he have to do with anything?

And that wasn’t all. The “Santa” story kept growing. He lived at the North Pole. His sleigh was powered by flying reindeer, one of which had a glowing nose.

Those Saturnalia folks have to be spinning in their graves. Would this crazy revisionist nonsense ever stop?

Of course, with modern education people are beginning to realize this silliness. And, just like people do, instead of consolidating something to celebrate, they are digging up all the old Pagan rituals and starting to celebrate them too. Of course, none of them have any idea what they’re doing, and it really doesn’t make a lot of sense, but, frankly, it makes as much sense as singing “Frosty the Snowman” while heading to a yule log ceremony following Christmas Eve church services (which you attended after watching the Macy’s parade, of course)

Meanwhile modern folks are asking if Christmas is a religious holiday after all. Geesh! Do we really need nativities, Christmas Eve Masses, Cantatas, Madigrals, and all that other crazy superstitious stuff this time of year when we have a wonderful inclusive secular holiday with this Santa guy and all this other non-religious stuff in it?

In programming we have a saying: the two hardest things to do are naming things and cache invalidation. What to call things and how long to keep ideas around before discarding them. Seems like programmers aren’t the only ones with this problem!

Our species has gone from animal spirits, to a Sun God, to the God Saturn, to the birthday of Jesus, to this big guy in a red suit, to this mish-mash of magic snowmen, glowing-nosed reindeer, and other nonsense. None of these have a dang thing to do with the other, but historically they all are part of the same thread stretching across the millennia from prehistoric darkness to today.

Like it or not, mankind is determined to have some kind of holiday around the time of the Winter Solstice, although what to call it, why to have it, and how to celebrate it seems up for grabs. Makes you wonder in ten thousand years, if some vestige of mankind still remains in the universe, what kinds of things we’ll be doing this time of year?

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

Whatever Happened To Software Engineering?

map-clip-artI’ve been working some on my mailing list to help Agile teams do better and one of the recurring topics from readers has been how to fit “normal” software engineering principles into an Agile framework. How can you do database design, for instance, if every 2 weeks the database is actually being used?

Of course there’s an easy answer: we incrementally do things in Agile. So, for instance, you might use all those database design skills, but a little at a time, instead of all at once. The first sprint you sketch out the tables, maybe add a few fields. Second sprint you change up the tables some, add some more fields. Third sprint you’re working a bit with cardinality. And so on. The concept is that we do the same stuff, only a bit at a time instead of becoming a bottleneck.

This is a good enough answer, and it works for most stuff. But I think it’s also masking a conflict that many people have: software is supposed to be engineering, not just little dips and drabs of stuff added in here or there. To hear many YAGNI pundits and others, you don’t actually do anything until the last minute, and then only in support of the exact thing you’re working on. Most engineering disciplines, however, encourage you to solve the entire problem. If you’re building a bridge, architect the bridge first, dang it. If you’re going to the moon, you’d better have some technical work around the entire trip. You don’t just launch into orbit and figure it out from there. Building incrementally is fine. But there exists fields of inquiry where there’s a long sequential process of refinement over the entire problem domain — one in which you gain execution advantages by working the entire problem at once. We seem to either have tossed this fact away or are purposefully ignoring it.

I began noticing a problem. When we talk about these things, people shut down. I suspect many folks in software engineering, especially Agile coaching, don’t have an engineering background! This can lead to a severe disadvantage when dealing with certain areas:

  • Modeling I don’t see many teams sketch, much less model. That’s a shame, because visual information is a much more effective way to discuss technical matters. Add in a bit of formal training, say 30 minutes, and teams can sketch in UML. Then you can link diagrams. There’s something to be said for lightly sketching problems on the whiteboard. Take a picture if you want to keep it. Start using a modeling tool if you realize that you’re having a group discussion around highly technical stuff. You can sketch, you can use UML, you can use a modeling tool, all without having to become a waterfall BDUF project. Really, you can. It’s the only way to go for complex projects.


  • Process Analysis Does anybody remember structured process analysis? Not to see most teams. The way most people teach Scrum and Agile is that a list of stuff appears — I guess from the sky, brought down by a dove to the Product Owner. The team only works on the stuff in front of it. Don’t spend a minute thinking about the big picture! After all, your project could end at any point in time, and you don’t want to spend one minute on things that you’ll never need.


    Of course, there ARE projects that could end at any moment, but for most of us, we’re brought on to address some kind of system: a website, a business problem, an internal need, and so on. The team, and project, has some cohesion. You’re going to be here in six months, and you’re going to be working on the same thing. For those kinds of projects, spending some time doing process analysis is a no-brainer. You get back much more than you put in. I’m not talking about anything waterfall-like. I’m simply talking about building a process model, over time, of who does what with the system and why. This can help you cut to the chase and decide which stories should be prioritized first. It can help you define and have a common understanding of your stories. It can help the Product Owner make economic decisions about the backlog, and it can help the team interject creativity into the solution, instead of just being a bunch of order-takers. Great stuff for couple hours or so each sprint.

  • Lean Startup Another one of those end-to-end, outside-the-team areas where the team and the Product Owner need to work. What hypotheses is this work supposed to be testing? What are the revenue streams? How are we addressing the gap between market and PO? In a startup world, all these things are critical — and there’s a sequential engineering-type endeavor that can take you from point A to point B. It’s a mistake not to do it.

When we teach things like good architecture or proper database design, many times we view the developer as the center of the universe and the engineering practice as something that’s completed in toto before any other work can occur. This has caused tremendous pushback from Agile teams, rightly so, because it creates handoffs, bottnecks, and unecessary documentation. But are we overreacting the other way? Isn’t there a place for long-format, sequential, detail-oriented work, even in Agile teams in complex domains? Especially in Agile teams dealing in complex domains?

Each of these has a few areas in common: 1) they’re about more than the work directly in font of the team, 2) they’re about having the experts, the team, assist the organization in its work, 3) they’re sequential, 4) they build on themselves as work gets done, 5) they’re not the work itself, and 6) they end up discovering things for the PO and the organization that wouldn’t be discovered otherwise. Because of these attributes, they tend to “fall between the cracks” when teams adopt Agile practices. They are traditionally part of what people employ engineers to do.

How about you? Are there engineering processes you miss seeing in your Agile teams? What are you doing to make up for it?

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

WLS 22 – How I haven’t really lost anything in the past month

My last post was about losing 100 pounds in roughly five months. This post is about not losing weight.

Easy come, easy go.

I’m not sure why I’ve plateaued for the last month or so. They told me all along this would happen. “Your body will get used to the surgery” some said. “You have a natural weight that you will gravitate towards” said others.

Meh. What do they know? Don’t they realize I have plans! I’m supposed to lose another 40 pounds, damnit!

So here we are.

What to do now? Looks like there are four options.

1) Do nothing. Continue on with the plan. Exercise, use the 30-30 rule, and pre-measure your food. Even if you don’t lose any more weight, a few months of getting in the habit of eating right for this weight is a big win.

2) Do something radical. Some WLS patients do a “jump start”, where they go back on liquids for a week. This helps their mind reset portion sizes, and gives their body a bit of a shock. Then they add back in the foods, just like the first time around.

3) Measure everything. Write down everything you eat daily for a week. Look up the calories. One of the nice things about the previous six months is that I really haven’t been dieting. Sure, I’ve been severely restricted in what I can eat, but it’s not like I sat around counting points all the time. Do I really want to get back on the dieting and obsessing bandwagon again?

4) Do the same stuff, only different. Stop it with the elliptical everyday — forbid myself from using it — and only run and ride the bike. Move to liquids-only in the mornings, then solid foods the rest of the day. Do stuff that doesn’t change my activity or intake levels, but presents it to my body in a different way. Did I mention I still haven’t started running regularly yet? Sigh.

I probably should do #3 or #4, but for the next week I think I’m sticking to #1. I have a blood test on Wednesday, Thanksgiving on Thursday, and I’m back to the doc for the six-month checkup a couple of weeks after that. That’s probably a good time to go over my options with the doc and nutritionist and make a decision. After all, the “magic” part of my weight loss is over with. I’m going to stay around this weight and clothes size whether I start losing moderately or just stay the same — as long as I don’t go beserko off the program. So there’s no fire we have to put out. Remember, I got into this for the ten-year results. I have time.

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.

WLS 21 — I lost 100 pounds in 5 months

Weight loss surgery: the good, the bad, and the ugly

Weight loss surgery: the good, the bad, and the ugly

Posting the title today, it makes me feel like I’m part of some late-night infomercial. I lost over 100 pounds in five months! And you can too! Just buy my book, “Eat like a pig and gain all the weight you want, them have them chop your stomach out”

Act now! Supplies are limited! lol

People say that weight loss surgery (WLS) is “taking the easy way out” or “cheating”

Not so sure about that.

First, if you are overweight and killing yourself, what does the word “cheating” even mean? That you’re supposed to die rather than do something to save yourself? Saving yourself doesn’t sound like cheating to me. And what part of undertaking major surgery is “taking the easy way out”? I spent three months at home being sore and eating mushy food. I’m going to be on dietary supplements my entire life. The nutritionist says there are things I will never be able to eat again. I basically have a self-inflicted wound that’s something like most folks used to get in a war. Which was the easy part?

Yet for many it all boils down to 1) how much weight you lost, and 2) how fast you lost it. The first month I lost 45 pounds. That’s freaking incredible. Looking back on it, I’m still not sure I can make sense of what happened. I used to wear a size XXX Large. Now I wear just a Large. I used to worry about breaking chairs when I sat on them. Now I sit on the edge of a table and don’t think too much about it. I used to have sore muscles simply from standing and walking around for an hour. Now I can stand for several hours at a time without problem. Maybe run a mile or two when I’m done.

I’m the incredible disappearing Daniel.

I guess from the outside it does seem like cheating, or like magic, to have such a drastic change in such a short period of time.

It’s weird. Body language is all different now. I went to talk to my youngest son the other day and, joking around, stood arms akimbo and made some silly statement as part of a joke. Then I realized: hey, I can actually pull of the arms akimbo thing seriously without necessarily looking silly. I can maneuver around things much easier than I used to — don’t bump into stuff so much. I also can fit in easily and stand as part of a large group, instead of having to stand back a ways to keep from bumping into people.

At my 1-month checkup, there was a lady in the waiting room getting her 12-month checkup. Several of us started talking about how much weight we had lost. I said I was down 40 pounds. She kind of smiled and said “You know, it slows down. Those first few months you’re losing like gangbusters. But it doesn’t work that way later on”

Now I’m beginning to see what she meant. Over the last 6 weeks or so, I’ve gotten into the pattern of losing one week, then holding steady the next week. So one week I’m all happy and kicking butt and taking names. The next week I’m down in the dumps ready to give the whole thing up. Even though I feel like I’m doing the same thing.

What I’m finding out that I can’t change is this: we focus too much on weight, both as surgery patients and as a country. I was more happy about my weight when I was fat than I am weighing everyday and fretting over whether I’m losing or not. Even though in general I’m extremely more pleased with life in general without all the extra baggage to carry around! Life is about more than a number.

Need to make peace with this issue without either ignoring it or obsessing over it. I think getting out of the house and working with clients is helping a lot. After the holidays I I’m going to move my billable hours back up to 40+ hours per week. Get on the road and away from the scales during the week.

I realize that I’m very lucky that I work for myself and am able to flex my schedule. It also helps that I have disposable income to handle a lot of the money stuff. I didn’t expect that. Even with insurance, weight loss surgery has been expensive. There’s been vitamins, special foods, medicine, gym memberships, and sports drinks. I think you can get by cheaper, but it’s been nice to be able to try to deal with just the WLS stuff, instead of trying to deal with that and pinching pennies too.

Clothes have been an especially painful chore. You’d think it’d be fun to lose weight and have new clothes to wear, right? And it is. But also can be quite a hassle. I’ve kept all of my clothes over the years, so I have big plastic boxes of stuff in a storage building of all sizes. The trick is getting them all out and going through them.

So you dig out six or seven huge boxes and start sorting clothes. A good start is sorting by waist size, but as I’m learning, clothes manufacturers lie about clothes sizes to make people feel more skinny than they actually are. As a guy, this makes no sense at all to me, but that’s the way it works.

Fashions change over time, and what you need to wear changes, so even going through all the old clothes doesn’t necessarily make you have a new wardrobe. I went from size 52 pants to size 48. Then 46s. Then 44s. At the 44-inch waist size, I started running out of good dress pants and jeans. So I ordered new 42s when I reached that size. Some of the 42s were big, some were snug. They were all from the same manufacturer and were the same exact clothes, just different colors. Yet each fit completely different.

Now I’m down to 40s and it’s time to buy more jeans. I think I’m completely out of dress clothes. Hopefully with my weight loss slowing down this latest purchase will last a couple of months or more. But then again, I don’t want them to last too long! I still have a ways to go. Will I make it to 38s? 36s? Who knows? Wouldn’t it be good just to get it over and stabilize?

It was really cool finding stuff I hadn’t worn in 10 or 15 years! Some of those shirts I really missed, perhaps much more than my family did. I had forgotten that I got too big to wear them. And it kinda sucked only having a few weeks to wear some of that stuff. Some of those clothes I went through, sorted, tried out, found, remembered how much I loved them — then never actually had a chance to wear them. Now they’re already too big. Yikes!

Getting into this, I realized that I would be in for a long and bumpy ride over the next year, but it’s been weirder and bumpier in some ways than I have imagined. I’m really glad I did it, but I’ve also found that I’m a fundamentally different person than I used to be. I have a different attitude, I react to stress differently, I do things differently. I miss parts of the old me, and, like a swimmer testing the water with his toes before getting in, I’m cautiously experimenting with bringing back some of the parts I used to like a lot.

Many of the old bad habits are still there too, of course, lurking in the background. I’ve had stomach surgery, not a mind replacement. It remains to be seen whether any of this will last for a long time. I have to keep reminding myself, and others, that it’s normal to lose a lot, then regain some, then lose it back. Many gain it all back. A sizable chunk keep most of it off. Both in weight and lifestyle, I wonder how much of the “old me” will come back — or how much I want it to. But it has been a most enjoyable ride so far, and I’m extremely pleased I took it. Even with all the complaining. Because hey, if you’re not complaining, what fun is doing stuff?

Share
If you've read this far and you're interested in Agile, you should take my No-frills Agile Tune-up Email Course, and follow me on Twitter.