-
Lessons in Consulting
Posted on April 26th, 2008 3 commentsIn December of last year, Jeremiah and I started a company, Navoty. We’ve learned a ton since then. Here’s a few items:
Time is valuable
Neither of us realized this at first, and were putting in 30-50 hours on top of our full time jobs to power Navoty. This leads to a few things: burnout (who can sustain 70-90 hour weeks?), angry families (wives and kids need attention!), and unrealistic expectations. We were doing lots of work and getting paid for it, but the short term income boost was met with the realization that we were fairly strapped and there was no growth plan. That’s discouraging. Solution: we’ve started treating our time as billable, even when it isn’t. We now look to delegate more often than not.
Freebies hurt
We did mockups, wireframes, lots of feature requests, and travel, for free. We’ve stopped doing lots of that now. Making good mockups and wireframes takes a lot of time, just like doing well written features. Doing those for free hurts our bottom line. Further, people are more likely to dismiss your work if you’re too willing to offer it for free. Solution: no more freebies.
Taxes hurt worse
“Thanks for making jobs and boosting the economy. Don’t forget to send me half of your revenue. Thanks!” – Government. Solution: ouch.
Not all money is worth taking
At first we would take any job we could get. $200? Sure. What we didn’t realize is that people who offer too little money often have unrealistic expectations for what the money can get them, because their nephew out of college can do the site for less. We’re not trying to compete with those nephews. Solution: only take jobs that understand the value we’re delivering.
We’re here to deliver value, not just code
We used to just think about time spent coding, but really, we’re delivering a lot more value than that. We’re familiar with open source frameworks, web services, and other consultants who can help out. That’s value. Solution: make our value proposition more obvious when meeting clients.
Most consulting shops are mediocre, at best
Everybody we’ve talked to has had horrific experiences with outside software shops. This makes our job much, much easier. We talk about how we keep clients in the loop, and they say, “wow, that’s a really good idea.” Exactly. Solution: keep being too good to ignore (courtesy of Steve Martin).
Add value on the top, not from the bottom
We’ve actually learned this over the years, but it needs reiterating. There are very few problems presented in the tech world where a solution hasn’t already been mostly created. This means that the correct solution is to take the previous solution and customize it to work for the new client. If you’re building a POS or CMS from scratch, you’re doing something wrong.
Uncategorized -
OMG SOMEONE ALWAYS HAS TO BE RIGHT
Posted on April 26th, 2008 No commentsI realized a while ago that if you argue in the context of a specific religion, you’re conceding a lot that can’t be compensated. If you stop arguing for the existence of a god and start debating a specific god – say, Jesus – you’re done. The other guy, granted he has an efficient handle of logic, will argue you into a corner, because you’ve conceded so much.
The same goes for arguing in the context of science. If you try to prove a god’s existence in science, you have to play by the same rules as everybody else. This means following the scientific method. This means that claims must be testable, and falsifiable (intelligent design is *not* science).
If you want to argue for a god, it’s also important to avoid arguments from final consequences (e.g.: Hitler believed in non-natural selection because he bought into Darwin’s ideas, therefore Darwin is bad; “I believed in God and I came into money!”).
Anyways, here’s a list of common arguments, taken from blogs around the internets, against scientific theories (note, please, that “theory” doesn’t mean “just an idea,” but actually means more like “shown to provide answers that are verifiable and has no obvious flaws”):
- First law of thermodynamics (matter and energy can be neither created nor destroyed): First off, let’s not get sidetracked here by semantics between “law” and “theory.” As far as science is concerned, they’re the same. “Theory of gravity” and “law of gravity” mean the same thing. Second, this is an argument from ignorance. Nobody knows how matter came to be, but that doesn’t necessitate that a god did it. It could have just as easily been a gigantic Logitech Harmony Remote. We wouldn’t know a difference. See? Arguments from ignorance provide no value to a debate. [1]
- Second law of thermodynamics (depending on how you learned it, either “you can’t break event” or “energy is lost and is unrecoverable from any reaction”): This is used to claim that nothing more complex can come from something less complex. It also requires a closed system of life on the Earth – which it isn’t. We have energy coming from external sources, and send energy to other sources. If we’re to take the law and apply it how this argument is applied, it’s impossible for a person to grow out of an embryo. [1]
- There is no anecdotal proof of evolution: This is an interesting argument, since requiring a tangible proof of evolution would require in several cases *lots* of time, but lucky us, we indeed *do* have a few cases (yay!). First, there’s the case of bacteria adapting to antibiotics. That’s a case on a small level, where organisms can adapt quickly over relatively short periods of time. Another more appreciable example of evolution can be found here, where a lizard’s digestive system changes significantly in under 30 years in response to a new environment.
- There are no transitional fossils: It’s absurd that this argument is still circulated, but it’s found on nearly every creationist page. There’s 2 problems with this claim. First, it’s a moving goal post. Every time a transitional fossil is found, creationists can just ask for the fossils in the middle of those two transitions. This can go on ad nauseam. Second, there *are* transitional fossil records. For a more detailed answer, check here.
- Darwinism couldn’t possible create complicated life as we know it: This is a little bit of an annoying argument, because it clearly causes changes over time, but it also makes the error of equating natural selection (aka “Darwinism”) to evolution. There are several mechanisms by which evolution occurs. To mention a few (not all): genetic drift, genetic variation and kin selection. None of those require that a species be better equipped to reproduce; it just demonstrates ways that gene pools can change and (tongue-in-cheek:) evolve over time.
Further, evolution is an entirely falsifiable theory that makes predictions. A great article that talks about predictions of evolution can be found here. Further, evolution is entirely disprovable. If you find a goat or rabbit fossil in the Precambrian, evolution is wrong. There’s no other explanation to it. The theory is busted. It would be wrong to say that evolution is true *because* there have been no current animal fossils found from the Precambrian (hello, argument from ignorance!), and accordingly the reason scientists agree that evolution is true hinges more on current testable claims (e.g., that we will find more transitional fossils, that homologous features won’t be found in animals that don’t share a common ancestor).
Now, notice how many metaphysical arguments I had here? None. That’s a whole different burrito, where things like social influence and morality can be brought into question. Metaphysics, I think, better determines if something should be believed/acted upon, instead of whether or not it is true. That’s an entirely different issue. I’d be stupid if I denied that believing in a god and praying hasn’t helped people in the past by realigning their values and such.
I’m just not one of them.
*I actually provided most references immediately next to their use, but this one didn’t fit well.
[1] Four Bad Arguments Against EvolutionUncategorized -
Tales of an atheist coming out party
Posted on April 26th, 2008 No commentsBefore Sara and I got married, or before we even got engaged, I’d been talked to by several family members (on both sides) about my lack of commitment to God. It wasn’t that I was anti-God or anything; I just hadn’t given it much thought. The only debates I’d engaged in were over passages from the Bible, and the debates centered entirely around a Christian god.
After we got engaged, I decided that I wanted to be a Christian. So, I prayed about it. I read about it. Probably not nearly at the length that other people do, but I did, nonetheless. I went to church (not as often as I could have, but hey, I made an effort).
Sara and I were married by my grandpa, who’s a baptist pastor. He’s a hardcore, hellfire and brimstone pastor. He told Sara not to marry me unless I accepted Jesus. When I asked Sara’s dad to marry her, he told me it always bothered him that I wasn’t openly committed to Jesus. I told him that there seemed to be too much to be going on for it to be random. I hadn’t really thought it out, but it seemed to be the right answer at the time.
Clearly, there was a lot of pressure. I just went along, and figured it was part of the conversion process. For someone who hadn’t thought about it much, it seemed normal.
Sara and I finally moved back to Austin, got a house out in Leander, and started attending the same church as her sister and brother-in-law. They’re committed to the church. I don’t know what else to say about it beyond that.
After starting to attend the church, we were invited to their small group. It’s essentially a bunch of people who meet on Wednesday nights (in our case) for a few hours, discussing God and how the previous Sunday message applies to our life, and how everybody can help each other. They’re a really good group of people, so I’m not poking fun at them at all. Most of them are still friendly and helpful to me, even now, after I think it’s clear that we don’t see eye to eye.
While I’m sure Laura (sister) and Shelby (brother-in-law) are slightly disappointed that I’ve given up on the whole Christianity thing, it’s important to note that their small group did a lot for me. It was there that I finally started to think how church messages, the bible, God, and everything else fit together.
…And that’s when it started to make no sense. About the same time as I was starting to think about this, I started reading some blogs concerning the autism/vaccine debate. I started to read a lot about logical fallacies, and try to structure my thoughts without them. Then I realized – why? Why would I think there’s a god, when there’s no evidence for one?
Saying “well you can’t explain how X happens” is called an argument from ignorance. It’s a statement of fact, but it has no bearing on any other arguments. Consequently, saying that “you can’t explain the existence of atoms,” while true, adds nothing to the debate. I realized that just having an answer for something doesn’t mean it’s true.
I read a lot of blogs, and I share a lot of stuff on Google Reader. To the point that a few of the posts offended some of my family members the other day. While I agree with their message, I’m not a fan of the hostility on the blogs. There’s no point to calling someone a “fucking idiot.” You’re not gaining anything in debate, and only adding more hate to an already combustible situation.
So, for the few readers who are theists and read my blog or my shares, I’m not out to offend you. I’m out to share my point of view. Generally I can convey it without any profanity or attacks, though occasionally an asshole like Jerry Falwell requires it.
My next post is going to be about the common arguments against Scientific reasoning for our existence, etc.
I feel like going on a blogging spree tonight. This should be interesting.
Uncategorized -
This is really just a test post
Posted on April 26th, 2008 No commentsI’m wiring up Navoty’s blog so that it’s a Yahoo pipe and comes from all of our blogs that are categorized as Navoty. I’ll post an update with a link as soon as it works.
Uncategorized -
<3 John Oliver
Posted on April 22nd, 2008 No commentsComedians usually tell the truth and avoid the whole impaling thing. Here’s another example.
Uncategorized -
Unempirical comparison of Tweeters
Posted on April 22nd, 2008 1 commentI was talking to a guy on Twitter the other day, and commented that there’s a stark difference between .NET driven codemonkeys and the rest of us codemonkeys. Now, I realize that I’m probably drawing on the wrong criterion, and that all of the .NET people I follow on Twitter are also super-agile evangelists, but I have other friends on Twitter who are agile-koolaiders and tweet significantly different.
You can tell a .NET tweeter from the following criteria:
- 90% of posts are about work
- >50% of posts are about Microsoft
- <20% of posts are about family, friends, fun, etc.
- Tweets aren’t complete thoughts and generally require 2-3 messages before conveying anything
- Tweets are vague and filled with at least 5-5 syllable words
- Everybody in the same circle follows each other, and they don’t reach out to new circles for fear of being exposed to new ideas.
- LOL Open Source
Clearly, this is because (respectively):- All .NETers do is work, because they’re using the equivalent of cave man tools
- They work with Microsoft stacks all the time, so their tweets should reflect as much
- Cave men aren’t social creatures, and being stuck at work all the time doesn’t help
- .NET isn’t conducive to thinking
- .NET is incredibly verbose
- .NET makes lots of classes sealed when there’s no reason to
- LOL Open Source
Whereas my Java/Ruby/Non-techie friends generally tweet more about life, sports, fun, family, etc.
Take “waterfalljoe,” whose name was changed to protect his innocence. Waterfalljoe is probably a good guy, and I actually saw him Tweet about family recently. NOT COINCIDENTALLY he recently started working in Rails. I’m assuming he got out of the .NET webforms before it caused irreparable brain damage.
Then, look at “sbellware” (not innocent). He worked with .NET so long that he even became a Microsoft MVP, and now he doesn’t tweet about anything but software development processes. Even though his most recent technical contributions have been in Rails, I think it’s kind of like taking a monkey out of the jungle. Even if you put him in nice clothes at a nice restaurant with an excellent beer offering, you’re still going to get shit thrown at you.
I’m not saying that it’s wrong to be passionate about your work. Nobody should read into this post like that. I’m just saying that if you work with cave man tools all day and are unhappy and sexually frustrated as a result, you’re doing an excellent job powering twitter.
* It’s a joke. Keep your damn .NET voodoo hippie magic away from me. Kthx.
Uncategorized -
Time commitments can pwn you
Posted on April 15th, 2008 3 commentsSara and I went looking for houses today, and as we’re talking about the merits of one of the houses, she says to me, “I want to stay in this house for a *long* time.”
That got me thinking. First off, for anyone who knows me, I change jobs. More than most people you know. I don’t get fired; I go somewhere that looks like a better fit.
Initially, when I’d look for a job, I’d tell the guys, “I want to work here a long time.” I realize now that this makes no sense. What’s the point of committing for a time frame? I’ll commit until it doesn’t make sense to anymore. Time blocking 5 years of my life to justify a decision only serves to tell people that for the next 5 years, my head will be in the sand – consequences be damned.
I think agile development practices stem from the same idea. You can’t know what’s coming up in 6 months, or how your client or boss or whoever is going to respond to your product, so the idea is to make your product in a way where change catastrophe is minimized.
So, for our house, I’m trying to talk Sara into thinking more immediate future. We know we’re having another baby, and we already have Nate. That means we need at least 3 bedrooms, and preferably a play area. Were we to plan for the next 5 or 10 years, we’d need either 5 or 7 bedrooms (I want 6 kids; Sara wants 4), which would make for a house that (1) we can’t afford right now and (2) would be waaaaaaaaay too big.
For those interested, I really like the neighborhood at Forest Creek. It feels a little Stepford-Wives-y, but at the same time, the houses are really well designed. I feel like our house right now was poorly designed, in that there’s no real segmentation in the house. I like borders, and knowing clearly where I am. I’m not against open houses, but I like them to at least have some semblance of a partition.
As for a job, I think the same rules apply. Right now, I’m headed to employer B from employer ST because B satisfies what I want to do and how I want to do it. It’s not an indictment of any previous employer, it just means that over time (sometimes, shorter time increments than people would appreciate) criteria for a good work environment, good work hours, good location, good benefits, etc., change.
I think from the Enlightenment, people realized that it’s better to question things than to not, and that critical evaluations lead to crystalized purpose. If we start committing blocks of time to endeavors, we’re closing our eyes to whatever might happen in the unforeseeable future. I don’t know about you, but I’d prefer not to go back to the 16th century. Kthx.
Uncategorized -
Lawdy Lawdy Vulnerability Hawdy
Posted on April 11th, 2008 1 commentLet me preface this post by saying that I’m a huge fan of dynamic programming. Code that writes code is awesome, and can save a lot of time. I got a little crazy today with some class method magic around polymorphism using eval. Specifically, I wrote something like this (simplified for the sake of argument):
def self.describe(type)
eval("#{type}.new.describe")
endNow, this code is meant to take a subclass (string), instantiate it, and call its describe method (which, if you’re curious, makes a describe call against Salesforce). Pass it something like “Contact”, and you’ll get everything just fine and dandy. Now, by itself, this isn’t much of a security vulnerability.
But, where does the “type” variable get passed in from? A controller. More specifically, it comes from an HTTP parameter. So, let’s say someone was being particularly devious, and passed a parameter that resolved to this:
class Pwn; def describe; OMG_ARBITRARY_CODE; end; end; Pwn"=> "class Pwn; def describe; puts 'you=pwnt'; end; end; PwnThat guy just got OMG_ARBITRARY_CODE executed on my machine :/
As such, I’m pretty confident that any code that can *ever* see the outside shouldn’t ever allow execution of strings. I’m sure anyone who does all their work in Java or .NET is appalled that strings can be used for this purpose, but I digress…
So I’ve thought about a few different solutions. I’ve been struggling back and forth with whether or not it’s up to my model to enforce security on something like this, or if it’s up to the controller not to pass bad information to the model. I’ve decide that it’s probably best to clean up both sides.
So, first, here’s the new describe method:
def self.describe(type)
type.new.describe
endNow I require an actual class to be passed in. This seems like a good improvement. The problem is, if I’m doing describe calls all over the place (don’t worry, they’re cached), do I need to check the parameters each time and figure out which class to pass in? That kind of sucks.
I could pass the string in, and make a method that does something to resolve the string to the correct type in my model class, but then I’ve got this horrible new requirement in my code – any time I want to add a subclass, I have to change the base class. That kind of sucks, too.
My current solution (which I’m not thrilled with, and am hoping one of you tell me how to do it better), is to put a constant in my startup script for Rails, and then check that before using eval to instantiate the type. Here’s the code:
def self.resolve_type(type)
if ALLOWED_PERSON_INSTANCES.include?(type.upcase)
eval(type)
else
raise TypeError.new("only allow lead or contact")
end
endSo, what do you think? Have a better way? Put it in the comments, por favor.
Uncategorized -
Bury the children, save the servers
Posted on April 10th, 2008 No comments“In many societies, whenever a new building is constructed, it was thought only prudent to pacify the local deities by burying children beneath the foundations (this is how faith sometimes operates in a world without structural engineers).” – Sam Harris, Letter to a Christian Nation
I came across this bit and thought about software. I’d be lying if I said I’d never put out anything and looked for random signs that things were going to be ok. Odds are, you’ve done it too. If only I’d had a few children (not my own, obviously) to bury beneath the servers!
Uncategorized -
Usability Experts
Posted on April 9th, 2008 No commentsI don’t think that highly usable products were put together like legos. It’s not, “put a button here, a tab strip here, a knob here.” I think, instead, you’re presented with a problem and several known solutions, and then you start eliminating the bad ones.
It ought to be a an entirely thought out, approach, too. If A solves one problem, and B solves another, but A and B don’t work together well, then obviously that doesn’t come out to be usable.
You don’t need to be a software developer or ux designer to figure out if something’s usable. You just need to get angry at something, and realize that if a product is causing frustration, it’s not that usable. Here’s a few examples that I’ve come across in the last week:
- Nate’s Ralph Lauren Onesie – Ralph Lauren, in his baby GENIUS, decided to put all the buttons on the back of the onesie. Now, it looks great from the front, but once you’re changing an angry Natertot, you see the problem that arises from having to turn over a baby who’s already angry to be on a changing table.
- Our new ottoman/coffee table – The piece came almost entirely assembled, except the feet. Clearly whoever devised how to attach the feet to the table hadn’t actually done it. First, there were no preset holes, so you just put the feet where you thought they should go. So, knowing that, I get a drill bit the right size for the screw and start marking my holes. 3rd foot in, boom, I snag into some ribbon that was necessary to cover some of the plywood on the bottom, which conveniently snaps my bit in half. After getting some pliers and removing the bit from the wood, I tried to screw in the foot. How did I screw in the 2″ screw? With a hand held, no-ratchet screwdriver, because the hole in which the screw is run through wasn’t big enough for any sort of drill extension. Thanks for that, whoever-made-my-furniture.
When I pay money for something, I should enjoy it, not loathe it. It’s the little things that cause extreme frustration which seem to stand out much more significantly than the remaining good parts of a product. So, please, think of the drill-users out there.
Uncategorized


