Pages

Wednesday, March 19, 2014

Pitfall of Agile Development

First, let me say I'm am an Agile Development believer and evangelist. Not all projects and teams are created equal, and agile seems to make the most of any team. However, Agile methodology is an incremental and results driven approach, and focusing too much on the results can have its pitfalls.

The average developer designs code specifically for their problem. Even with broad software pattern usage, software is generally developed for a specific need. In a common agile development team, once the iteration's worth of issues are resolved, the next iteration obtains a new set and they move on. The software is only programmed to meet the needs of that iteration. Which is great because you get incremental value and functionality as you go. The problem comes when you take a look back at your code and you need to change something because you ran into an issue you didn't foresee, which you now have to accommodate in software written in a previous iteration. Now since that iteration already provided value, and you need to modify what that previous iteration gave you, you may even need your program manager's approval.

This change could happen in various ways. A lot of developers prefer addition over modification (open/closed principle), which is great when you design it that way from the start. Commonly however, the task was handled with naive forethought (to nobody's fault) and needs to be re-factored to account for these new issues. The code may have even been written by somebody else with a different vision in mind. The issue is then solved in a less than ideal way.

This sort of development occurs over and over because the leads and architects are busy, have different technical vision, and peer reviews are usually after thoughts. Here's what makes it worse. Peer reviewed code is considered "done". For some programs code is essentially untouchable after peer reviewed. So even though the term "iteration" implies you can go back and improve, it doesn't really happen, and it's more of just a series of small cascading waterfalls. It creates Frankenstein code.

So sure, the software works and is demonstrable but you're left with a hodge-podge of brittle software with little enforced technical vision. What needs to change is having the freedom to re-factor and improve upon already written code. Most programs stray away from doing this because it doesn't add function/value to the program tangibly. They are too focused on results and not the product. To the developers though this freedom is a godsend; a breathe of fresh air; a re-paved road to drive on again.  Here's what I mean:

  • Technical vision becomes more clear because we revisit WHY we do certain things.
  • Future iterations are easier because the infrastructure is more flexible.
  • Integration becomes more seamless.
  • Communication becomes more succinct since everybody's on the same page again.
  • Team works closer together because they're not arguing over which way to do things.

No one can see the future, so even though the above practices help, you still need to consider actually re-iterating over software. Here's a few ideas on how to improve your Agile Development for proactive software development, you can keep re-iteration to a minimum:

  • Have small iterations.
  • Everybody can do anything. (Don't force roles (quality testers, database admins, and et.al.))
  • Rotate a two person team and have them take an entire iteration to enforce technical vision.
  • Have a team design meeting before every iteration.
  • Include software design in your retrospectives.
  • If you have multiple small teams, mix up the team members every few iterations.
  • Have the leads have separate design meetings as needed and look as far forward in software requirements as possible (and don't come out without a commitment in your design).
  • Have developers not write any code until a buddy developer approves their approach.
  • Have a dedicated engineer (product owner) keep track of requirements and update documentation as needed per scrum team.
  • Peer review rules:
    • Early as possible peer reviews.
    • Small peer reviews (200 lines of code max).
    • Critical peer review comments are non-deferrable - deal with and escalate that bigger issue in that iteration even if it means the task overflows into the next iteration.
    • Peer review must be signed off with an end to end test.

I'd like to hear your stories and any feedback, please comment below!


Monday, March 3, 2014

The trivial will change you. Or at least it should... let me explain.

Programming is magic.

Whether it be fun, stressful, and/or challenging, there's something magical about software development where our minds meld with a machine in a language we both understand and can communicate. When your non-programming friends first learn you're a programmer their eyes glaze over the magic (as they understand it) of programming. Even to us programmers, even though we know exactly how the machine works we can admit to being a little bit of a programming wizard.

That said, when your development turns into a monotony of trivial typing instead of casting magnificent spells of programming sorcery, your mind can go numb from complacency.

Don't let this happen to you!

Let that be an opportunity to bring your spells to maximum potency where you close in on the gap between perfect code and your code. Make it be an excuse to participate in #extracareercular activities, such as code retreats, reading up on the latest coding blogs, getting up to speed on the latest API releases, and et cetera. I did to escape from the dull plateau of development I was in.

Challenge yourself. Promote yourself. Apply yourself. Go get your magic back.

Sunday, October 27, 2013

grassroots corporatism, celebratory revolutions, and inverted economic policies?

So my Facebook has been blowing up with the Russel Brand video talking about the failures of government to serve the people. http://www.youtube.com/watch?v=3YR4CseY9pk

I totally watched it and it's sort of mesmerizing. The British always seem to have a way with words. Russel admits he doesn't vote because (and I'm totally paraphrasing) "we all know our vote doesn't provide for any real change. The problems of the people are not being addressed because the system only entertains the rich, so why would anyone vote for it."

I think he certainly speaks for a lot of people that feel despondent with the current system. Growing unemployment and a growing disparity between the wealthy and middle class are now at red alert in our minds. I would be cautious however to think that a revolution is our only hope. Russel sort of back tracks from the word revolution and clarifies what he means by saying that he's calling for change and that there should be a socialist egalitarian system, heavy taxes on corporations, and taxes on pollution, and et cetera.

I'm not a big fan of socialism, but I do realize that America is already much more socialistic than most think. Social security is by definition a socialistic implementation, and yet most Americans despise the idea of losing it. The interesting thing here is that I'm noticing two distinct groups emerge recently. They both look grassroots and they both use rhetoric like "Wake up America" and "Revolution" and use ideas like "the current system is broken."  The funny part is that apart from that they have one-hundred and eighty degree political viewpoints.

On the right side we have ideas like:
  • Abolish welfare
  • Reduce taxes on corporations and everywhere really
  • No government involvement in healthcare
  • Abolish cap and trade
  • Abolish social security
  • Climate change is a hoax
  • Obama is a communist/Marxist 
  • Free markets
  • Our liberties are being lost
  • The rich create jobs
  • Big government is bad

On the left we have essentially the opposite:
  • Increase taxes on corporations
  • Socialize healthcare
  • Cap and Trade
  • Climate change is real
  • More Regulations to prevent corporate corruption
  • Consumer demand and a strong middle class create jobs
  • Big government isn't bad in the right places.

The fact that there are two almost tangible sides that are so very different and polarizing lets me generalize a bit with who I think these people are. With that said, let's take a closer look at what kind people make up these two groups. We have the Koch brothers who are in the top 10 richest people on Earth funding organizations such as the Americans for Prosperity, and the Tea Party, and Libertarian Party. Tea Party'ers however are supposedly grassroots and not supported by corporations. Yes, while the people themselves may not be paid to promote Tea party ideas, they are certainly learning from those who are paid to. https://www.youtube.com/watch?v=LJTV-WXcx1U I don't think it's any secret that the Koch brothers are funding these organizations, so it doesn't seem very grassroots if it's being started and funded by a corporation. These people are also associated with really liking if not loving Fox News and Glen Beck and others on that side of the media. 

On the other side we have people who might show up to an Occupy Wall St event. Celebrities like Russel Brand, and Billionaire Nick Hanauer. https://www.youtube.com/watch?v=bBx2Y5HhplI I'm not sure what kind of crazy person would want his fortune to be more taxed unless he was incredibly altruistic, or unless he actually believed that it would eventually end up benefiting him and/or America at large. He makes a good point in this video (which is funnily enough "too politically controversial" to be uploaded by TED). However I can't help but think that both sides are technically right, and that having the rich create jobs as well as having a strong middle class is the foundation for a healthy capitalistic system, not just one or the other. The Occupy movement folk believe that that the recent corruption precipitates the need for regulation, not to let greedy corporate fat cats lie, cheat, and consequently obliterate the economy into a Part II of the Great Depression.

I freely admit that there's government powers that are certainly getting bigger, such as spying, wiretapping, police brutality, and etc, and I completely despise and condemn those abuses of power. Further I feel like those issues are being planted in the people's minds as the foundation of hating "big" government. Where big government is anti-American, and therefore further regulations and more taxes is anti-American. This is obviously not a directly stated proposition, but an indirect-propaganda induced idea. It kind of works like this. Once you tell someone an idea that they already are passionate for and agree with, you can propose other ideas that follow the same sort of logic. I'd like to think most people are somewhat skeptics like me, but even I find myself believing ideas I've heard over and over and even find myself arguing those ideas without any empirical evidence (although a lot of the times I just like getting other people's opinions when I do that). With politics there's so many factors and so many ideas that are essentially impossible to prove, that you can say almost anything and then throw the burden of proof on someone else. The person who wins is the one with the bigger audience in agreement and therefore their idea wins as well. Almost all of the political arguments I've ever heard is done with rhetoric, opinion and zero facts. Further, even with facts or statistics, you'd get correlation but you won't see any root cause analysis.

I despise this type of propaganda, and usually can see through a lot of it, because it's starting to get so obvious. Rhetoric like Obama is a communist is absurd and classically propaganda. Ideas like you're Anti-American or a Communist if you speak out against your government and/or current system is also propaganda and also completely absurd. Isn't free speech and the right to protest and condemn your system the heart and soul of Americanism? Bear with me, but why couldn't America be a socialistic society and still be true to democracy and free speech and our Constitution? It's not like America was founded as an anti-socialistic country. We have so many examples of socialistic laws that it's insane to think that we are an anti-socialistic. We have libraries, police, fire departments, postal service, public roads, military, student loans/grants, farm subsidies, corporate subsidies, CIA, FBI, EPA, FDA, social security, public schools, prisons, public parks, sewer system, and etcetera. People benefit everyday from these programs, and live prosperous lives because we don't have to worry about the infrastructure of a modern country. We just pay for it through taxes, hence being socialistic. Don't get me wrong the socialistic laws that Stalin/Hitler wanted were extreme and would never work. Capitalism is amazing, everyone benefits from the competitive and quality products our great minds and investors have been able to manufacture. Capitalism and Socialism coexist beautifully in this country. Sometimes private companies work far better than government programs and sometimes vice versa. It's hard to say when sometimes, but why not learn from other countries and why not experiment? Why can't we do something akin to changing the display resolution of our computer monitors and have it roll back if chaos ensues? (Comic relief woo!) I see these types of experiments done all the time in the company I work for. We try different processes and then a year later decide to go back to what it used to be. Everyone would complain about it, but hey at least we're trying to improve! Lesson learned and nobody really got hurt. But watch out for propagandist who will have you believe the country will implode and everyone's a communist if we try something new to improve. 

Personally I have a dichotomy of beliefs, and I know I'm not alone on this. I have personal beliefs that I hold myself to, but I would never automatically assume that those beliefs should be law. Politically I'm a big fan of John Locke who I believe was the biggest inspiration for what makes up the Constitution of the United States of America. That said, America is a nation for all cultures because it is a democracy. If it weren't, my personal convictions would bleed into what I think should become law, but then again so would everyone else (how chaotic would that be?). Lawmaking should make sense to enforce on all people. Let me give you an example of an issue that I struggled with when I was young. I was raised Christian and the Bible says that homosexuality is a sin. However I voted no on Prop 8 because I grew up and realized that religion should not automatically dictate law. Disrespecting your parents or your friends parents is a sin right? But I'll be damned if "yo mamma" jokes ever become illegal (more comic relief! ..or maybe that wasn't very funny.. T.T). My experience has taught me that homosexuality isn't necessarily a choice and according to the Bible it's really no more a sin than lying. In either case, people will try to get away with what they can at the voting booth, and I completely respect that. It's very American to be passionate for an idea and try to make a difference in the government. Just please please, don't let propaganda get the best of you and try to not let your personal beliefs blind you of what's best for everyone.