Monday, September 21, 2009

The ups and downs of it

Kaylee came home on Friday. I had no choice but to run around with her. It was great medicine! I missed her terribly and was so glad to be her #1 go-to person!

Saturday was rough.

Emotionally and physically, Matt and I were drained.

There was a lot of crying, doubt and fear.

It happens on this roller coaster of cancer. Remembering it will pass and I will feel healthy again was more than difficult.

Sunday was a turning point.

I ate well.

I drank a lot of water.

I laughed a lot with good friends.

And I shaved my head!

I feel like Natalie Portman in V for Vendetta.

I also had a great acupressure/reiki/massage session with Vanessa, my sister in law. She found a ginger tea that I love!

I felt reborn in positive energy and spirit.

And just in time, because Sunday night I left my family once again to stay at the RMH and resume treatment.

So, here I am.

I continue on my path of what seems to be most resistance, savoring the good days and pushing through the bad.

Wednesday, September 16, 2009

First cycle complete

A bunch more to go...

I'm now recuperating at home.

The chemo made me very ill. I'm still feeling it. I have hardly gotten out of bed the last few days.

Every day I'm a little better. I hope to go for a walk today.

Its hard to believe I'm going to go back next week.

But every week done is a week closer to being cured.

This week off has been especially hard because Kaylee has the chicken pox. She has to stay at her Grandma's until she is all better. I haven't seen her in over a week. I am beyond sad.

I hope to see her before my next treatment cycle. Her little hugs, giggles and smiles are the best motivation and cure for this cancer patient.

Tuesday, September 8, 2009

One week down

After only one week I can breathe out my nose.

I smelled flowers on the street.

Chemo certainly knows how to kill.

Unfortunately it does not distinguish cancer.

But today starts a new week and I'm feeling better.

My body knows how to heal.

Saturday, August 22, 2009

Giving up a year of my life

To save the rest of it.

That's what the doctor told me I have to do to cure this cancer.

I have a daughter that will need me in her life, so that is the plan.

I spent the past week at Sloan. Taking tests. Speaking with doctors.

And crying... a lot of crying.

It is a surreal experience. Trying to understand the complicated schedules and make sense of how my family can manage life without mom.

And not just without mom. Life with a cancer patient.

I'll be treated as an outpatient at Sloan on a clinical trial.

My treatments with be 3 week cycles of chemotherapy for about a year. Typically the cycles are 2 weeks of treatment and 1 week of rest. During my week of rest, I will have to go in for tests.

When I have radiation, it will be 6 weeks with no break. This does not change the chemo schedule.

Some treatments are an hour. Some are ten.

I live about 1.5 hours away from Sloan with no traffic.

So every day is 3 hours longer, just for driving. Probably a little more.

3 hours of being stuck in the car and potentially very ill.

My initial reaction was defeatism.

My next reaction was complete and total fear.

I have a daughter and husband who need me. Who love me.

I am determined to make this work.

I will stay in a hotel on the long days.

I will coordinate a schedule of driving with my family and friends. I hope to have enough people to call when I cannot make it to the city and someone will help.

In the event that falls through, I will use a car service. The sustainability of this option is low for its cost and the emotional drain of being alone. I hope it is a rare thing.

I will sleep in my own bed. I will get to see my daughter and husband everyday.

I will remain positive and strong.

This year of my life. The year I had cancer. The year before I was a cancer survivor starts now.

Monday, August 17, 2009

Talk about rare

The morning has been hectic. First, I went to the ENT who did my surgery (and found my lovely growth) to remove the packing in my nose -- 6 feet of guaze!! I feel about 100x better!

My husband, Matt, and I went to breakfast and mid coffee found out I have embryonal rhabdomyosarcoma. A rare childhood cancer. Weird, right?

Living in New York, I am lucky to be close to Sloan Kettering hospital and thankfully they have an oncologist who specializes in this cancer. He happens to be a pediatric oncologist but I'm a little woman, so I should feel at home with the kid size chairs :P

Matt is dropping off the pathology today, and hopefully by my appointment on Wednesday we'll have a plan of action.

Saturday, August 15, 2009

wunda's world upsidedown

The last few months I've been battling sinus problems.

First guess was an infection, but the antibiotics did not help. My dr thought I needed a longer rx, but since we weren't sure it was infection, I opted to wait and see. Allergies were also a possibility.

Some days, I felt broken -- though I figured running after Kaylee and getting little sleep were to blame.

I went to an ear, nose and throat dr last Tuesday.

He took one look into my nose and his reaction was distressing. I don't remember exactly, but once you hear cancer, you don't hear much else.

He said the chances were small, but we should do testing quickly, to alleviate any fear.

That day I had a CT scan. That afternoon he called and brought my husband and I back to the office.

The results were easy enough to see -- the sinus cavities on my left side were filled. He said it looked a lot like an antrochoanal polyp (one side and really big). It could also be a fungal infection... and of course the possibility of cancer was looming in the room.

One thing was definite. It was big and needed to be removed.

Surgery was scheduled for Friday. He would do a biopsy and then depending on the result, stop or remove the benign tissue.

As soon as I woke up from surgery, I asked the time -- one surgery would be longer than the other... It was less than two hours. My mom and husband were by the bed and someone told me it was malignant.

Although my first reaction was "are you sure?" I was calm. The fear of what could be was replaced with reality. Cancer. I was not surprised. I had all week to prepare. I'm sure the drugs from the anesthesia helped me stay calm.

I've known many who have battled cancer.

I lost my father, my husbands aunt, my uncles wife, my grandfather, my sister's mother in law.

I know survivors too -- two uncles, my aunt, a few friends, parents of friends.

What are the chances I would be added to the list? When I was a little girl, I was a bit of a hypochondriac. I was always worried I had cancer. As I got older, my fears subsided.

When I went to the doctor last Tuesday, the last thing on my mind was cancer. I had just given birth and nurse my baby? How could a diseased body support such miracles?

I will know more about a diagnosis on Monday. The weekend is going slow.

I am nursing my daughter as much as I can. The idea of early weaning is heartbreaking. I fear she will grow up without a mother. I am thankful she is only 1 as she will not remember. She may not remember me. I hope I can live on in her through the bonding relationship we've created and the stories and memories people around her hold close.

And of course, I am not calling it quits -- I don't even have a diagnosis, or 2nd opinion. My strategy is the same I used to run a marathon. If I felt tired, in pain or I couldn't go on, I would ask myself, "can you finish the next mile? just up to that next tree? will you be disappointed if you stopped because you know you had it in you to keep going?"

As long as there is a chance (even a fools hope) and I can make it to the next tree, I will. I will come through this a survivor, regardless of my mortality.

I am scared. Writing is an easier form of communication. I say the word cancer with tears in my eyes and a closed throat. I write it with ease. I am thankful for this outlet.

Friday, August 7, 2009

Ensure test coverage when refactoring to mocks

Using real dependencies in your tests will lead to pain. A lot of pain.

Most likely, your test fixtures lack coverage, test the wrong class, be difficult to read and don't do what they say.

Eventually, your team will decide to abandon testing or introduce mocking/stubbing.

Refactoring your existing tests will be a major endeavor.

It will be tedious and repetitive.

You will feel like you are wasting time.

You will have a strong urge to rush.

To help you out, I've outlined the steps needed to refactor a test to mocks. I've noted steps that are easy to skip (yet still important) with *

1. Make a copy of the TestFixture -- call it TestFixtureNameWithMocks -- this will ensure you do not lose test coverage and can commit often.

2. Comment out all tests

3. Delete the setup code

4. Take a moment to read the first test
  • Does this test actually test anything? (if not, figure out what it should be testing and get it working right in the original fixture first!)*
  • Does it verify state of the CUT?
  • Does it verify state of a dependent (or dependent of dependent of dependent...)?
  • Does it do more than one verification?
6. If there is more than one verification, determine how many tests you actually need.

7. If your test relied on the state of a dependent, verify that behavior is tested in the correct test fixture (i.e. the dependent's!). If not, you need one, use this test as an example. Create a failing test now, before you forget. If you have a rabbit hole of dependents, make a test for the top dependent.*

8. If needed, break out the test into multiple verifications -- select one to do, comment the rest.

9. Uncomment test and rewrite using mocks/stub. You will find that some tests are quite different. Some similar. Some will require refactoring of the CUT or dependents to make mock friendly.

10. Run the test and verify it passes. If it does not, figure out what preconditions are missing -- check the CUT and old test. Keep doing this till it passes.

10. Comment out code that is being tested.*

11. Run test, verify it fails for the right reason. If it does not, check the test and verify your assumptions. Make it fail for the right reason!*

12. Uncomment code, verify it passes. If you didn't change code in 11, you can skip this step -- I am paranoid and usually do it anyway :)

13. Repeat for every test in the fixture (and any new tests you find). Pull out common setup if needed. Rename tests since the original names will most likely need it :P

14. Remove old test fixture and rename new one.

If you made it this far imagine how long rewriting one test takes. In the best case you still need to run each test at least 2 times.

Now imagine doing this for more than one class.

How about for how many tests exist by the time our tests are painful enough to require this change.

If done right, this will take a lot of time. If we do it wrong, we take great risks and have tests that give us a false sense of security.

Clearly, if we want to continue delivering end user value, we cannot do this all at once.

Here is one way to do this:
1. Whenever a test is updated (bug fix, enhancement, refactor), update the test fixture to use mocks.
2. Have a policy where it is ok to have 2 fixtures for 1 CUT (one with mocks and one without) to encourage people to start using mocks w/o the overhead/context switch of a big refactor. Stress that finishing the refactor takes precedence over starting new work.
3. Let everyone on the team know that it is expected to take time and include that in commitments and estimations.
4. Remain disciplined

Good luck!!

Thursday, July 30, 2009

Adding to the team

We've all felt the pain of the interview process.

It sucks. And its not just the candidates out there. Its also the way we find them.

Typical Procedures:
  1. Recruiter or ad
  2. Phone interview
  3. Written questions or code samples
  4. In person interview
  5. Meetings with other team members
  6. References, background checks, drug tests, security clearance, street fighter challenge
There certainly is dysfunction here. Many interviews feel like a game and its not played well (or fair).

I think of finding a new team member as a process of filtering:
  1. The process is a series of filters each more fine than its predecessor
  2. A filter should have definite output
  3. Good people are difficult to find. Too fine a filter early in the process is a risk
  4. Most filters have manual steps. Filters that filter too little are a risk.
  5. Finding the right person is personal to the team, so any filter that does not involve a team member is less accurate
  6. A good fit is unique to a team, so rarely will the same sequence of filters fit multiple jobs.
  7. Some criteria may give someone a pass around filters -- personal recommendations, proven methodology expertise and already working for company are a few examples
Before we can setup our filters, we need to know our goals for a candidate. This is a lot harder than it sounds. You may find you don't really know your "goals" beyond a "senior" developer who is a "team player" and "experienced" with our technology and methodologies.

Once we know what is important, we need to figure out how to filter this behavior. We must also look at a persons ability to grow into a goal and the team's desire to teach (which will be biased depending on the person).

  • Goal: We want someone who is an enjoyable pair programmer
  • Importance: We only pair so friction here is best avoided
  • Ability to Learn: Developers, like all humans, are known to be stubborn in changing their personality. Though people can come around.
  • Ideal Filter: Spend a day pairing with them, switching people so at least a few team members weigh in
Clearly this is not a recommended starting point, unless you want to have a stranger on your team everyday poking around in some code in your project. Or maybe it would work if you have a lot of spikes?

Now what?

We can dig deeper into this goal:
  1. What kind of traits make someone a good pair?
  2. Are there ways we can define questions that will clue us in on these traits? Do any of these questions have answers that we can entrust an outside party to interpret?
  3. Can we use their past work experience to help?
If we find this goal is best saved for later in the process, we can move on to goals that are better found at coarser levels. Do we required a certain amount of experience or schooling? Do we want people from a similar background (domain, technology, methodologies)? Do we care if they change jobs a lot? Too little? Are they active in learning new technologies? Are they interested in our methodologies? Do they live nearby?

We may not care about individual answers to pass judgment, though a combination of answers is sure to give us something.

How we find people to review is also a filter. If we want someone who is involved in the community, we can use those channels to find people either passively (twitter we're looking, ads on blogs we like) or more actively (read blogs and tweets to find people, find people working on open source projects).

Remember, its not just what you want, its what they want. Make sure your job description includes things that will attract the good fits (or have some people running to the hills), like weekly book readings or Star Trek Fridays.

Finally, there are unique things at every environment. What attracted the team there? What are team member strengths and weaknesses and what is the state of the project -- how can a new team member help most? Do we need another good pair or is it more important we get someone who can help us fix our data layer and quick.

Finding a good fit is a lot of work. If we spend the time to figure out what we want, we can figure out better questions and ways to find them. I'd say its a good exercise, even if its not quite possible to create a systematic filtering process.

Off topic, I'm in favor of speed dating style of interviewing: open house at your company, each team member gets 7 min with each person who shows up. Anyone with all yays moves on to the real interviewing. It may waste a day of everyone's time, but I bet it would be fun and if it worked, it would save a lot of money on recruiters, ads, phone interviews, code reviews and spending time figuring out what "questions" will help us find the best fit.

Thursday, January 29, 2009

Can't seem to ever finish a post...

Between working and mommying, I can't seem to finish any of my blog posts -- this is bothering me...

So, I signed up for twitter -- wundarous

Maybe I'll get some ideas out...

or maybe it will be random thoughts that make no sense..

Either way, no excuses not to add a sentence here and there!