PDFXporter Project Diary :: Rapid Project Start-Up :: Day #1

No programmers or computers were harmed during the development of this project…


All of the code being reused for this project belongs entirely to the author and those companies that also belong to the author except for those modules that are Open Source or otherwise made available by companies like Adobe and others.

Disclaimer #2:

The work being done is not being done in real-time but it does reflect the work I would have billed someone to do which means the work detailed below would have cost someone 1 man-day at something like $65/hr which is where I try to keep my billable time – affordable and reasonable.

Disclaimer #3:

I use only the best of the best when it comes to computer hardware and software – I spare no expense on my equipment and I can afford to have the best of the best at my fingertips and this allows me to get the work done quickly with emphasis on the word “quickly“.

Disclaimer #4:

This project is being done while I am working for 2 other companies, who shall remain nameless here.  I am working on this project whenever I have nothing else to do and given how quickly I can work relative to what everyone else if doing – I have more than enough time to get this project done.  I also have about 100 billable hours to sell each and every week and I don’t even drink coffee or any other kind of pharmaceuticals.  I get the same 5000 hours every year every other professional gets to play with, I just know how to get the most from my professional time.

Am I the least bit challenged by working on 3 projects at the same time ?  No !  No more work than working on 1 project at a time except I can switch between them as I may wish to keep the professional juices flowing 16 hours a day.

Disclaimer #5:

This project is being done by one (1) highly motivated Software Engineer who has more than 29+ years of professional experience who has been living with the software development process for more than 36+ years and by living with I mean every single waking hour and then some.  And “Yes” one person can make a huge difference !

Disclaimer #6:

Whenever code has been written it gets tested to make sure it works.  Duh !    Once the code is known to work there is no more need to Unit Test it until that code has been modified and then only those aspects that were changed need to be tested.   Now here’s the amazing side of software development, that people who work with software would actually have to give any thought to doing something that must be done by definition which to say one cannot know if ones code is working unless one works to make sure it is working; likewise one cannot get out of a speeding car unless one makes the car stop – Duh !  I also do not give any thought to breathing or pumping blood because doing that is required to be alive on a continuous basis – likewise I do not give any thought to performing Unit Testing when I am working to validate my code because one cannot be a professional software engineer for long unless one is validating ones code and I have been doing this software engineering thing for more than 3 decades – don’t have to think about doing what I always do.  Get it ?!?

Day #1 – 6-8 Billable Hours

Project Background and Purpose

PDFXporter exists to export data from PDF Bank Statements.

Why might this be useful ?

Businesses and Individuals might wish to harvest data from their Bank Statements and when those Bank Statements are delivered in the form of PDF documents one could export ASCII text from such a document however turning that ASCII Text into usable data that could be imported into Excel or some other Accounting System is not such a slam dunk without some automation support.

What might you do with all that data once you can harvest it from your PDF Bank Statements ?   Support Tax Filings with deductions – the IRS requires two things, receipts and proof of payment.  Collection of Receipts is not enough – you also have to put your finger on the Bank Statement and this requires some support from a database once you have the data harvested from your PD Bank Statements.

There are two components for PDFXporter.  Adobe AIR 2.5 and Google App Engine.  Adobe AIR 2.5 for the RIA and Google App Engine for the back-end processor and License Management.  Adobe AIR also means the ability to produce a Web Only version as well as a Mac Version and Linux Version.  Oddly enough using Adobe AIR 2.5 also opens to the door to Android to allow all those Android handsets to export data from PDF Bank Statements whenever those Statements are downloaded directly from your Bank every month.

Day #1 – Leverage Code Reuse

Software projects get up and running a minimum of 10x faster when they begin with proven code from past projects.  Call this “Code Reuse” if you must.  Call this reducing the start-up overhead.  Call this just being smart when working with software.

Adobe AIR Project has been created in maybe an hour taking code from a past project – this gives the development effort a nice solid base for which no Unit Tests are required because the code for this part of the project comes from a past project and since that code was tested there is no need to validate that code over again at this time.

Google App Engine Project has been created from a past project that provides native Django 1.1 plus a whole number of other goodies that makes developing Django for the GAE slick and easy.

So after 1-2 hours of work all that has to be done going forward is focus on the GUI for the project – skip right over several weeks of development and get right into the heart of the project.  The License Management piece is done because code for that part can be taken from a past project with Adobe AIR Support for License Management coming from a past project.

Code Reuse at this level saves several weeks of development effort.

One developer working for 1-2 hours can pull together enough of the project to get the whole project up and running a minimum of 2 weeks faster than might have been possible otherwise.

The more projects this one developer works on the less time each successive project requires – this time 2 weeks were saved, next time 3 weeks may be saved depending on the projects being worked on.

Building RIA and Back-end in Parallel

Parallel Development in Action

On the left is Wingware IDE 3.2.12-1 with Google App Engine Back-End Project. On the right is Flash Builder 4 with Adobe AIR 2.5 Project.  Both Projects are being worked-on at the same time in Parallel.  RIA drives back-end and vice-versa.  Same developer works on both at the same time.  Development gets done a minimum of 5x faster using fewer human resources in less time at a lower cost.

Oh yeah and you are looking at 2 side-by-side 21″ 1920 x 1080 full 1080p HD powered by a nice Nvidia GTS 450; what you cannot see is the Core i7 920 2.67 Ghz with 12 GB RAM and all the rest, blah, blah, blah.

Cool thing with this setup is the Google App Engine code can be uploaded to take this whole Application into production the moment the RIA is done in-sync with the back-End.  The RIA code gets the ability to update via the Internet whenever a new version is ready.  The GAE App gets a slick link for new users to download and install the RIA App. Self-Help Kiosk allows new users to Register for a new User Account. 30 day Trial with a monthly Fee gives users extended access to the whole system.  All this can come together in 30 days or less as a minimally functional system and it all begins on Day #1 with maybe 2 hours of effort.

I spent another hour or so letting the computer do most of the work…

The computer tells me what is wrong and I make the corrections.  I do not make any attempt to force the computer [language compiler] do what it cannot do however I do whatever it takes to satisfy the compiler.  This is my process and it works for me.  This process allows me to move code around where it is needed from one project to another; it also allows me to make the most of code reuse.

Recap on the day – 3 hours into the Project…

Right now I have a complete initial Flash Builder 4 Project with some License Management code that needs to be tied into the Google Cloud using Python/Django.  I also have a complete initial Python/Django Project with License Management Code that needs to be tied-into the RIA GUI.  This leads me into Day #2…

Recap on the day – 4 hours into the Project…

Right now I have the initial License Management code installed in my AIR App Template ready to be tested – you can call this Unit Testing but really this is nothing more than some functional testing just to make sure my AIR App can talk to my Django Server that will run in the Google Cloud.  I also have a minimally functional Django Back-End with which I can begin the process of validating my License Management code.

Here again I will use the computer to validate the code for me – all I have to do is be present and fix anything that seems to be broken with a bit of code, no big deal.

Recap on the day – 5 hours into the Project…

Right now all the relevant Flex code for License Management has been brought into this project and is ready to begin cross-validation with the back-end, just need to bring some Python/Django code forward from a past project and away I go into debug mode to ensure my License Management code I wrote previously is working.

Recap on the day – 6 hours into the Project…

Rebuilt the Flash Builder 4 projects, both of them, no big deal – just a normal part of maintenance for any Flex project.

Working on the splash screen for the Demo version…  all this will change before too long to be sure.

Users need to have the option of logging into the product before leaving the splash screen – this keeps the kids off the lawn and provides a nice transition into the Demo mode for those who have not Registered to use the product.  Demo users get to use some features but not all of them.  Registered Users get to use some features but not all of them.  Registered Users who have paid some money get to use all the bells and whistles.  Just normal License Management.  Because I am reusing code I have written in the past I don’t have to bother with coding all that User Registration and User Login stuff but I may have to do some cosmetic updates, no big deal.

Recap on the day – 7 hours into the Project…

Working on the Splash Screen Logo for the Production version – dusted off some code I had produced some months ago to make this happen.  Already got my initial Production Logo – just putting on some polish since I seem to have some time.

Recap on the day – 8 hours into the Project…

By this time the Product is beginning to come together with a primitive version of License Management that has yet to be debugged and brought to full flower but hey, only had to invest 1 man-day on this project doing nothing more than slapping together some reused code that happens to work perfectly well and NO requirement to do Unit Testing other than just make sure the code works and call it a day and I have.  Stay tuned for day #2.

Video Recap for those who cannot believe what is being written here…

Is the project complete yet ?  No !  No project is every complete, give me a break – this is software.

Is the code perfect ?  No !  Again, this is software and perfection is not even possible.  I see the code most Fortune 500 companies are trying to schlep on people and I guarantee perfection is not on the list of priorities because that would be nothing less than silly.  Everybody who works on their code wants to “think” their code is nothing less than a cure for cancer, this is just human nature to delude ourselves into thinking perfection is not only possible but desirable.

Does it have to be perfect ?  No !

Does it have to look pleasing ?  Yes !

Does it have to be easy to use ?  Yes !

Is this project there yet ?  No !  But for the first day ?  This fits the bill.

Working code is less than one man-day.  This is rapid application development with emphasis on the word “rapid” and it is also functional using code that has been used time and again which means if there are any bugs they will come-out in the wash and get taken care of.

I have worked on projects where the only goal the first 30 days was to get the whole team to show-up at the same place on a daily basis let alone actually do anything useful like, dare I say “write some code”.  And then the code that was signed-off on was nothing less than horrific and largely useless, going forward, with the lady who runs the project for the client coming to me crying about how much she can’t get what she needs from her contractors… Give me a freaking break, will ya !  I’m the guy who said he had working code the first day and YOU ignored it !  Come crying to me about your contractors… Try using the code someone like me wrote before you cry about what you can’t make your contractors do.  Take your contractors into a room and tell them they will only get paid when they learn how to produce working code quickly and then mean it !

I have learned how to produce working code quickly, trust me on this one.  I have learned how to leverage code reuse in a positive and meaningful manner.  I have learned how to build reusable libraries and frameworks I use on every single project to get the project done quickly and efficiently because when it is my money on the line I want the code out the door in the hands of the users who can pay money as quickly as possible.

Still not sure if I am on the level or just blowing smoke…

The very last time I was engaged on a professional basis to produce a working product I began with a list of 5 things they wanted corrected in their less than stellar looking but it was being used product… I gave them a completely working prototype in 30 hours and they asked me to continue working to produce 1 product on 2 platforms (Windows and Mac) in 2 languages (English and Spanish) and I was so able to get this done they twice asked me to just take MORE money to get the work done because… I was not using enough of their budget because… I was doing the impossible – completed a working product at a lower cost than would have been possible otherwise.

Nobody can produce 1 product on 2 platforms (Windows and Mac) in 2 languages (English and Spanish) for less than $30,000.00 but me !!!

Engage me, pay me and let me do my thing before you go thinking I can’t get the work done as I have stated here.

Make me a reasonable offer and I will take it if it seems to me YOU are on the level.  I don’t take every single offer I get.  I have been turning down some offers lately because they were just crap so I passed on them.  Just because I am willing to take less to get the work done than others does not mean I don’t have really good business skills like knowing when a deal is worth taking.

Some have wanted me to work for free lately and well I don’t work for free unless I am working for myself and even then I am working for shares of stock in what I am doing.

Some have wanted me to work for 2 weeks to see what I can do – not bad when I don’t have better things happening for me so I passed on rolling those dice.  Hey, when I go to Vegas I am there for the shows and the food and by food I mean Kobe beef and by shows I mean the ones I have to pop $150/ticket to see – the best of the best.  What I do not do is waste my time and money with that gambling thing because that would be useless and stupid !  I bet on a sure thing when I roll the dice.

Some thoughts…

The next logical step after building a reusable Application Template is an Application Generator which is not all that big of a leap away from the ability to seed projects quickly.

The first version of any reusable Application Template for GUI and Bank-End might take some time assuming one began with a clean slate and no code to begin with.  There would be no need to ever bite that bullet again !

Once the reusable Application Template has been used a second time one could easily shake-out a reusable template that is actually reusable with no need to ever code any Unit Tests for the reusable part of the template (both RIA GUI and Bank-End).  Unit Tests are only required to validate the code during the development of the first Application and not again when that code is being reused unless changes were made.  Obviously people tend to use Unit Tests to validate code when more than 1 person is ever working on the code but that simply highlights the value in employing one really strong individual contributor who can knock-it-out-of-the-park every time by using a reusable Application Template otherwise nobody would ever think of building any reusable Application Templates because the Corporate Model inhibits such efficiencies of scale.

By the time the Reusable Application Template (RAT) is being used the 3rd time one could begin thinking about building-in the infrastructure for the Application Builder.  Begin with a Menu Builder that might take a few days to build OR begin with a Content Management System that allows hierarchical pages of content to be defined in a parent-child relationship the latter of which logically leads to a menu builder without the need to code a menu builder per-se.

As the RAT is used over and over and additional pieces of the Application Builder begin to take form perhaps as early as the 4th Generation or Use the RAT would have the ability to automatically generate Forms with CRUD support – Forms and CRUD are provided by the Python/Django Back-End; with little effort one can cause Django to automatically emit Forms from Model Objects based solely on the Model Objects.

Once a Form generator is achieved one would want to code a Model Generator or Model Abstraction to allow Model Objects to be defined from user input in the form of am interactive Form Builder which really just builds Ad-hoc Model Objects for Django; again this is not difficult to achieve.

Where would all this lead ?

Into the real of being able to automatically and quickly generate Cloud-based RIA Applications using very little effort and trust me when I tell you there are companies around the world willing to pay millions of USD $$$ for this functionality – give some thought to how much companies are paying for SalesForce.Com and software from BMC.Com !!!  Millions of Dollars per year for nothing more than the ability to build Forms and tie those Forms into some kind of Application using Workflows and Triggers and the like.

All too easy !!!  But this is the power of building RATs (Reusable Application Templates).

PDFXporter Project Diary :: Rapid Project Development :: Day #2

About Ray C Horn
See my profile at http://www.linkedin.com/in/raychorn with more than 1286+ connections and growing all the time.

One Response to PDFXporter Project Diary :: Rapid Project Start-Up :: Day #1

  1. Pingback: PDFXporter Project Diary :: Rapid Project Development :: Day #2 « Agile Developer's Blog

%d bloggers like this: