Tuesday, August 26, 2008

Agile Development: why it rocks, who it helps, and why it's failing


The Agile method was the best thing that happened to me in my career as a developer. Before I came across Agile, one of my biggest frustrations was the difficulty I had with getting large assignments and breaking them down in little pieces. Usually, in the beginning, I'd be at full steam, really motivated, really excited, and rearing to go. This would last for a little while then the chunky middle part of the project came, some of the more boring parts, and before you know it I'm at a crawl. Then, when things are due in a week, full panic mode would commence and there would be ridiculously late nights followed by incredibly sleepy mornings, then sleepless nights all because I thought I had a handle on the scope and how long it would take to complete.


 


Agile was a new awakening for me. For those of us who aren't aware the concept is to plan your software development X amount of weeks in advance then break up that time into still smaller sections before you get started. The reason for this change is that seeing how dynamic and fickle the world of software and software development is it just isn't prudent to plan that far ahead. You go with the brightest and best new tools and concepts and three years later when your plan is complete it's mostly obsolete. Planning only small parts at a time allows for the ever changing industry. The unit of weeks that you choose to use is called an iteration. Each iteration you plan out exactly what your team will deliver when it is complete. Then as a group you break down your plan into projects. Then personally you break down your projects into tasks that are anywhere between .5 and 3 days long. You then have daily stand up meetings to discuss how you are doing on your tasks, if you are ahead, or possibly running into issues you can cut them off at the pass. There are all kinds of permutations like Scrum and XP, but you get the drift.


 


I myself took to this like a fish to water. No longer did it feel like I was sitting in front of a ton of unpeeled potatoes, I had something to accomplish today. Just one thing. Then tomorrow I have something else that will take me two days, then after that another day on something else. Honestly, I haven't looked back since, I could never go back to the old way of doing things.


 


Frankly, the industry hasn't been the same. Agile development lends itself to huge wins for well designed, awesomely developed software. However, nothing has surprised me more then the rumblings I've been hearing lately about how “Agile sucks, everyone said it was so cool and it just doesn't work.” “We have an Agile shop and they are four months behind and no one gets anything done ever.”To me, that's like saying “Water is a solid” or “Aaron Heilman is a dependable reliever,” it just doesn't make any sense.


 


So, I've done a little investigating of my own. An insightful email from a reader who goes by the name Abhishek Parolkar really got my brain churning. I asked myself what was consistent about the complaints I have been hearing. I had my Eureka moment a few moments later (sans bathtub)


 


See, what was making these Agile shops so successful and productive was not purely Agile at all it's a combination of some very key traits that allow for unfettered growth in technology and development. What the initial adopters of Agile had in common was that it was a “start up” type of idea. In other words, it was the small companies adopting this methodology, not the bigger firms. And this makes sense, because it's a lot easier for 5 guys to make a process change then 150 people of varying skills and specialties. We see this everytime a new software or tool that is popular among industry professionals. Like, right now it's Git and RoR the majority of the shops you will see focusing on these things are the progressive, smaller companies.


 


So, what else did these smaller companies have in common then the fact they were using Agile? Well, the time from approx 2003 on I think we will grow to view that as the re-awakening of the start-up. A little of the sting of the “bubble burst” had passed, people got some of their money back, and had some new ideas. The perks and the relaxed atmosphere and the focus on employee satisfaction retuurned. The developer as a species appreciates these type of places, it's our natural environment and the condition in which we thrive. Where our ideas are welcomed, where there is no pre-approval paper work, where there aren't 2 week long QA processes, where the hard part of implementing a great idea together is walking from the big white board to your desk without getting another one.


 


See, what's happened lately is the bigger IT departments have attributed this success and prosperity to the Agile process, when really they need to look at the minds that recognized this process as a great idea and what other things they think are important. Making a process change as big as a new methodology is huge, so most places with > 50 people are either slowly switching over or seriously considering it now. The kind of complaints I've been hearing are followed by statements like “Plus, my boss is such a dick he makes me subtract out my cigarette breaks when I bill” or “I just can't stand it everything they ask me to do just makes no sense and there is nothing I can do about it.” That's where the larger companies are loosing it, being an Agile shop isn't good enough. When your employee dreads Mondays no methodology is going to make them want to work hard for you, and therein you get no similar productivity boost as the other Agile shops, you may have better architected software, but the huge measurable profitability successes just aren't there.


 


What about Google you say? Well, they are the perfect example of how you do it correctly when you have a lot of people. They are a large company, however they run their development teams as a bunch of smaller more intimate groups. They take the time to make sure every employee loves being there, that their immediate needs are met and all their individual ideas are considered and encouraged.


 


So what's the moral of the story? Implementing the newest ideas  is simply not going to get you the incredible department you have been waiting for. Sometimes, you can get caught up in pomp and circumstance about your “sophisticated and professional” team. However, your “sophisticated and professional” team of developers is hating every second, so you get behind, and you miss deadlines, and you get stuck in backlogs. Not because Agile doesn't work, but because when people aren't happy they don't care if your company succeeds or not. They care about their Saturday nights, or where they are going after work, or if they remembered to TiVo Heroes. So it's simple: when you care about your developers, they care about you and that ALONG with the best practices and tools are the keys to success.


 



Sunday, August 24, 2008

//TODO:



There have been a few too many posts in the "Some Junk" category lately. Just been a lot of work building up, and not a lot of time to work on the site.


NEVER FEAR!



I have this week off, well, technically. I am working, but I am also relaxing a bit and I plan on writing some blockbuster stuff.


All in all I hope to educate and entertain... in that order.  


Thanks for your patience and response. It's been great getting involved in this community (of developers) and I've learned loads since I've started. I hope


to continue learning together.



Wednesday, August 20, 2008

if(this.GirlDeveloper == sickDeveloper) break;



yes, I'm sick. horrible being inside this time of year. was going to have sheer entertainment for you, but until then you can entertain yourself with this:


Youniverse



I thought it was a fun cute little social media - y things.



Monday, August 18, 2008

Reflection - Iteration 3



Iteration 3 has come and gone. (First of all, I'm hella sick today, in the office but not 100% here if you get my drift, so if I seem distant that's why. )


How do I think things went? Well, I had to stop mid-iteration and replace some thigs because some pre-reqs weren't completed. That has

less to do with time management and more to do with me not being familiar with the process of sending things out to be done.


This iteration is a short one, my employer likes to give employees lots of random time off. He thinks this makes them happy and work harder.

I have to admit this to be true, however, I will be working next week even though I technically have off. This project really can't afford to

lose a week. I haven't factored that time into my iteration planning though because I want to see where I am at the end of this week then decide

what needs to be done.


I am still working on the controls as literals because I haven't gotten the comps back yet. This adds a little extra work. Today I am revisiting the session issue, I got some feedback from the guy doing the "Summer of NHibernate" series. I highly reccomend those videos if you're working with NHibernate. I appreciate his fresh approach, the videos are funny and interesting.... I have learned a lot. Anyway he said something about session-per-http-request so I'm going to look into that.


Right now I'm wrestling with where to get some of this extra stuff done that wont be feasible for just me in this time period. The questions are things like "Should I hire someone?" "Should I outsource?" "To whom?" "Should I start now or wait until it's a little closer to deadline so I know what needs to be done exactly?"


If there is anyone reading that has been in my shoes I'd appreciate any words of wisdom that you could pass my way. There is a lot of work on my plate and exactly 10 weeks left. I'm not afraid it wont get done, because it will and it will be a great product... I just want to limit my stress and not give myself extra work while watching budget.


Happy Coding!



Wednesday, August 13, 2008

Dev Diary - 8/13


Soooo, the communication with the payment gateway is complete, which is awesome. That's great, right now I'm mapping imports. Going to be pulling a nightly import from a Apple program from "FileMaker Pro" it's a bit tedious to work with because the imports/exports are not easy to work with. However, the current business runs off it and instead of re-inventing the wheel I'm just adding some rubber and rims to the current one. There are container fields that contain images, now, SQL can hold images, no? I'm pretty sure I remember hearing this and that would be conveinient. 




Otherwise I can just store paths to images in the database, which will give me a chance to use LINQ for objects, that will be fun. 



Ok, I have a question, I really hope someone out there can help me with this becuase it's something I haven't worked with before. I am working with NHibernate which relies heavily on session. Now, for each data object there is work with the current session. Where should I open -> close that session? On the page level? On the method level? On the application level? If on the application level where would I configure that? web config? app config? how?



I'm getting a realization of exactly how much needs to be done in how much time, I'll be outsourcing some stuff I believe. I have a good friend that does these things.... time for a motivational meeting tomorrow I think. 


Happy coding. 



Thursday, August 7, 2008

Yeah, you know that whole Microsoft/Apple war? We made that up.




 




 


Now wait, before you say anything, I want you to do me a favor, I want you to pretend we're just having a chat. It's you and me, we were just at a conference, or an expo, or a workshop or something. I noticed your tee shirt on the street, whatever, something happened and now we're talking tech, it's going well. Have you seen the stuff you can do with Jquery? RIA, what do you think? Then it happens, one of us brings it up and the lines are drawn.




 


Oh, you're a .NET developer? Run Vista? That's cool.




 


Wait, you live on Leopard? You think iPhone apps are the new wave?




 


We both know this wont end well. One of us is going to talk UI and hardware performance, the other computability and support... we're never going to agree, so let's just talk politics... FISA, will we ever recover?




 


There are wars fought world wide over arbitrary ideals, developers will be the first people to tell you that. Why can't we apply the same unbiased principles to ourselves? Why must we throw our souls behind any million dollar corporation that makes the thing we happen to relate to the most? What exactly do Apple, Linux, and Microsoft compete on? Operating systems? They all specialize in very different things, it doesn't seem like they should be a threat to each other. They also offer much more then just OS's, I bet Apple and Microsoft both make much more money in other things than OS packages. Why are we feeding their gluttonous revenue streams by turning against each other?




 


Linux/Unbutu guy, we know how little you need UI. You make your own operating system, and you're not afraid of a challenge. No one holds your hand, if it's tough you figure it out. You're the triathelete of developers, and we'll never forget that.




 


Oh you Apple lover, we know how close your relationship is with your users. OS X is good looking, and easy to use. We know what respect you have for true color, for beauty and art in design, you can't accept a sub par UX in exchange for functionality. You know simple and attractive is agile, we think you have a point.




 




 


.NET developer, we don't think you're a fanboi. We know that you respect quality, reputation, and stability. We don't think you're a follower, really, we know you're leading the way in cutting edge technology. So what people don't think you're edgy off the bat, they have no idea what kind of difference you are making in the industry.




 


Instead of letting big brother corporations buy our allegiance with straw man advertisements and snazzy swag, why don't we make this market what it should be. Let's invest in the products that are the BEST. Also, that's just a matter of preference and opinion! There is no Bible here. Myself? I love my Vista, it's really snazzy and fast, after all I develop in .NET. I'm running it on a Mac Book Pro. I have an iPhone, I'm writing this article in Open Office, I use Subversion. I think that when I'm editing HTML/CSS the only place to be is in Firefox, when I'm surfing it's only IE. I keep Leopard on my machine so that I can be more familiar for my users. For me this isn't about a “team” or a “side.”




 


Believe me, I know. Mac is the little guy, Linux even littler. Microsoft is the New England Patriots of the Software world, secretly, lots of people love to see them lose. Guess what, though, they do a lot of things really well. Until they stop, I'm going to use their product. When someone makes what I need better I will be using that.




 


Though, if you really just want to take the side of wherever the cool kids are have I got a product for you. It's an operating system, and it's brand new, cutting edge. Not even out yet, don't ell anyone but I can get you a hot copy of Windows Mojave before it even hits the streets. Just make your check out to “Girl Developer” and you'll be one step ahead of those Apple dorks. They'll be too busy eating their granola and smelling like patchouli to know what hit them.



Wednesday, August 6, 2008

Hi.


Happy mid-week, all. GEO CODING. <cringe> we're always afraid of things we don't understand, no? Well, looks like I will be implementing it in my application (the dubious 007). I'm always excited to learn new things, that's part of my charm... 


SO I'm going to the Microsoft talk about working with Google Maps today. Should be interesting and as always there's free pizza, so you should be hearing about it from me soon, I hope to learn a lot. I hope I don't get nervous and ask a stupid question like I did last time.


See, I put a lot of pressure on myself being the only girl in the room sometimes I think. Usually when I go to these type things the mean age is 34 and the only gender is male. Sara != Norm. So, I think that everyone is thinking "oh, it's a girl, how cute.... she looks like she's thinking hard" (which they prolly are thinking "hmmm, this pizza is delicious, that guy's hair is weird") and when I want to ask questions I analyze them 23488795 times to make sure they aren't dumb. Then I usually fearfully ask one trying to sound clever, but not explaining my reasoning and only succeeding in sounding dumb.


Like last time asking if HTML was packaged in XAML because people were making a big deal about bots not being able to read silverlight videos. My logic was "well, if it can't read your video why not throw some discriptive tags around it and be done with it. Stop complaining." However, I didn't add that part. I just asked about the HTML which made it seem like I hadn't paid attention the entire time.   


I need to rent some confidence.



Is anyone going to the Web 2.0 conference in NYC next month? If so keep a lookout for a 5'4" blond with a "GirlDeveloper.com" tee shirt on I hear she's all that and a bag of chips. Real expert on Geo Coding.



Right now I'm doing the payment gateway. It's cool, I'm wrestling where to store security keys and how to encrypt billing information. That's what today is for, to make those decisions.



Anyone see the X-Files movie? I liked it because it seemed just like a really long episode, stayed pretty true to the show. Not congruent with the last movie, though. That was disappointing.



Brett Favre is a Jet! Those of you who know me know I'm a huge Brett fan. I like my men looking corn fed and american made (not a huge fan of wranglers, though).  I'm excited because now he's a local. Maybe we can make friends, I can loan them some sugar when they need it (or when HE needs it.)



Alright, peace out cub scout.



Monday, August 4, 2008

Reflection - Iteration 2


   Ok, so this iteration was a little more stressful. I have learned one valuble lesson (a lesson I have learned many times before) nothing is completed until it is TESTED TESTED TESTED. I ran into some issues with the nHibernate when I went to implement it with my controls I had scheduled. So when it came time to test those controls they didn't populate. I ended up spending a lot of time debugging my nHibernate implementation which actually has carried over to a half day task in this iteration.

   I also experienced some scope creep, so today I had to introduce a "parking lot" of back log items that I can take from when I have extra time in my iterations. I had to ask around about what to do when a three day task falls in your lap, and that was my feed back.

   With that three day task I was bitten by a monster I have met before, "That? That's easy. I can do that, it will only take me..." Some of you are laughing right now, I suppose everyone has been there, but "That is easy" without knowing exactly what goes into "that" is out of my vocabulary. FOREVER (this is different then the last time it was gone forever because hopefully it will stick.) 




   It sounds like this iteration was horrible, and it really wasn't as bad as it sounds. I did get a lot completed and learned a lot. I will also be taking time this week to clean up my solution because there are extra files and code that were generated when I was trying to fix things.




  Ok, so I have all my task cards done for this iteration, and they are up, so I'm going to get started. Happy developing!