I’ve started a new blog series where I attempt to explain functional programming concepts in terms everyday OO programmers will find familiar. Part 1 goes over the overall case for functional programming and part 2 covers some of the ways higher order functions let us create generalized solutions to common problems. Future parts will cover topics like integrating functional programming with existing highly mutable systems and how to do functional programming in your existing language of choice.
It’s pretty well established these days that writing User Stories to capture the requirements of your project is “a good thing”. You’d be fairly hard pressed to find a small to mid size group with a giant tome of requirements handed down on high. You’re slightly more likely to see a team getting by with nothing or perhaps a haphazard whiteboard of semi crossed off todo items. Most however, will have some degree of a user story style system. Writing good stories is hard, estimating them is even harder, but the benefits in increased communication and process transparency far outweigh these costs. But what about a situation where there is no communication between developers? What if you are a solo developer and your customer (if you have one that’s not you), isn’t the type who is ever going to engage with an issue tracking system? What benefit then does writing user stories hold over the aforementioned whiteboard, or perhaps a Google doc?
Software development is still software development. Even if you have no need to communicate to another person, you still need to clarify the intent of your work to yourself (and let’s be honest, 2 weeks from now, you are another person and “sound when collected” as a task probably won’t mean jack to you). This is a situation where the format of a user story helps out. Let’s take a look at an example requirement from my primary domain, game development.
Seems simple enough. Now most everyone knows how Super Mario Bros. works and would be able to implement this feature correctly. But what if the developer didn’t know what was supposed to happen? What if they have never played Super Mario Bros.? I would imagine, that an initial implementation might lead to this.
Touching the goomba kills the player, just like the story said. Now you’re probably shaking your head and saying “of course they would know jumping on the goomba kills the goomba and not the player!” and for the implementation of a game that you can look at and play, this is true. We’re generally not interested in reimplementing old games, we are interested in creating our own new ones. If we were creating SMB initially and we wrote out the requirement as a user story, it might look something more like this:
As the player I should be able to see my character die when I touch an enemy.
Some user story advocates would say you really need the “so that…” section on there, which in some cases does seems applicable but in this case “so that the game is challenging” appears fairly redundant to me. I could see a case for “so that I understand what things can kill me” as an addendum as it gets to the reason behind seeing your character pop up and flap his arms and fall but let’s leave it off for this discussion. By phrasing it from the perspective of the player and being specific about when, in this case the “touch an enemy” writing this story has hopefully made clear that there are other ways the player can collide with the enemy, maybe collision from the side is not the same as collision from the top? Again when implementing SMB this isn’t really an issue, but when you’re trying to figure out what the app should do in the first place, this is the kind of thing I find handy to at least bring up to myself. Even if it’s crystal clear ahead of time that yes the enemy should die when Mario arrives from above this at least prompts me to go add that story so I don’t go forgetting bits of functionality.
The second major benefit of user stories to me is that they allow you to take off your project manager hat and put on your heads down programmer hat. When I have filled up my backlog with stories, picked the ones I want to be working on next and plopped them over into the “planned” column I can just grab and go. When that story is done I bump it over to “ready to test” and grab the next one. Sometimes while working on a story a new detail comes up, maybe some additional complexity that wasn’t apparent or that I simply overlooked. In that situation I have to put the old PM hat back on and decide what that does to my prioritization. Thankfully this is usually resolved very quickly and I can get back to development. I find that being able to transition between roles on the project and to be able to focus on one exclusively for periods of time (from a few hours to several days) is very liberating. This part could be accomplished with tasks written any which way you want and any sort of system such as Trello or Jira, but I find the fairly precise wording of a user story to lower the barrier to Getting Things Done more than potentially haphazardly written tasks lists.
So what system do you use? Have you found your own personal development project management nirvana is another set of tools or practices? Please share them in the comments below.
So, I’ve been interviewed by The Examiner. I think this is the first time I’ve been written about… maybe there was something about Monkeybars around the time I spoke at Java One but this is definitely the first “personality piece”.
I had the idea to wrastle up some local game designers and lock them all in a room until they unraveled the deepest darkest mysteries of game design for all to understand. Or perhaps they were just in my living room. Either way, what resulted was a massive first episode, full of disagreement and often contentious discourse that cuts to the very nature of what we think of as games. Intrigued? Luckily for you we recorded the whole 3.5 hour extravaganza and it’s now available for you to consume at your leisure. Direct all hate mail to me.
Blogging is a habit. Posting on Facebook and Twitter are as well, but blogging is much more difficult I find. It’s far to easy to tell yourself that what you have to say is not interesting or that it would be better served by a small tweet. So I became lazy, gave into that voice and stopped updating things here which basically meant that I wasn’t writing anything more significant than what could fit in 140 characters (I’m not really big on the Facebook).
So, to reacap the last (almost) 2 years.
Started tons of game projects. Cancelled most of them. Got divorced. Worked full time at ASU doing educational game development.
Students of mine were in the 2011 IGF Student Showcase for their game Dust for which I was super duper proud. Left ASU and am now contracting and doing my own projects a bit more full-bore. Spent lots of time with Xander. Met a wonderful woman. Finally found a great project that I think other people might actually be interested in playing. Released some assets on the Unity Asset store and made approximately zero monies when not part of a madness sale. Helped several local indies with their games which went on to make lots of monies.
Now I’m looking forward to my game being complete, or at least complete enough to Kickstart/Indie Fund. I’ll be writing more about that on the Happy Camper Studios blog. I’m also getting back into doing contract work, all Unity3D this time, which I of course hate rounding up as it’s lots of work for speculative returns. Currently though I’m working with the most awesome Archaeology Southwest on a 3d kiosk to be placed in Chaco Canyon. I’ve never worked on something that is a physical product, so that’s pretty dang exciting. That will be ending soon though, so then it’s back to the contractor (data) mines to find some new clients.
This is a rambly, what’s-going-on-in-Dave’s-life sort of post with very little content of interest who don’t know me and/or are stalking me. You have been forewarned.
I have a habit of jumping around between jobs. I find that I’m rarely satisfied for long in a position as the thrill of learning a bunch of new stuff wears off, the grind sets in and the drudgery of doing real work is all that’s left. To many, this penchant for flittery is a big fat check mark in the negatives column while evaluating me as an employee candidate. Then again I probably don’t want to work for people who care about such things. This is not to say I never stay put. I spent 2 years running my own company and there was plenty of drudgery amongst the fun (and terrifying) learning activities such a job afforded. So, when it seemed the end was drawing near for my time as a failed entrepreneur I made a pledge to myself. I didn’t want to get stuck right back into those boring jobs I had fled several years back.
Since there wasn’t a lot of excitement for me in the types of jobs I was likely to be offered I started wondering, where can I go? I had been teaching at the Art Institue of Phoenix for 2.5 years at that point and I knew that I enjoyed my work there. It was peripherally related to software development (which I still love) but conveniently avoided all those pesky issues like customers and deadlines and software that actually has to work. It also afforded me much more opportunity to play with and develop game technology, the very thing I had gone to college for all those years ago. Perfect!
I was all set to move over to the Art Institue when the next surprise came along. I had written a rather lengthy letter expressing my concerns and dissatisfaction with various elements of the adult hockey league at Oceanside Ice Arena. I expected to get back something stating “Your concerns have been noted, now buzz off”. What I got back was “Those are some really great points, this is what I’m going to do to address them, oh and by the way do you want a job as assistant adult hockey director?”.
That’s the first time I’ve ever been offered a job by complaining. So I met with the rink’s manager and in the next few weeks I’ll begin to take on duties as assistant adult hockey director. Check mark in the “try something new” category. Luckily the hockey gig is mostly evenings and the Art Institute is mostly daytime so they’re quite compatible.
So, I leave a full time software engineering job, go to teaching and managing a hockey league. Sounds like a pretty good career shake-up to me.
Today I got linked an article about Phil Spector’s arrival at Corcoran prison in CA. It’s mostly about him and playing music, blah, blah, blah. The interesting bit is at the end of the article.
Spector was previously held in the Los Angeles County jail and then an intake center in Kern County, where corrections officials evaluated him and assigned him to the Corcoran facility.
Spector’s wife, Rachelle, welcomed the transfer and said it would be an improvement from the Kern County prison where, she said, she was unable to visit her husband or speak to him by phone. “Anywhere is better than that place,” she said.
I was born and grew up in Bakersfield which is the seat of Kern County. Damn I’m still glad to be out of that place, even after all these years.