Getting started

Something I’ve noticed is that no matter how many fields you add, there is always someone who doesn’t get all the fields they need.
This could be solved with a section (a couple of tables in the database) where a user could track his own stuff. For example millage on training shoes or millage on training wheels - racing wheels or weight loss.

The tables would look something like this:

Definition Table
User ID (f.e. Slowman)
Item ID (f.e. 1)
Item Name (f.e. Newtons Training Shoes)
Item Units (KM, Miles, LB, etc…)

Tracking Table
UserID ( Slowman )
ItemID ( 1 )
Date ( 01/07/2008 )
Value ( 10 )
Comments ( “blahblah” )

“Just curious why there is a “Two week” cut off on this?”

some of you guys will want to talk over putting a sunroof and power windows and XM radio on this car, but you really can’t do it until i provide for you the chassis, and stick an engine on it. i want to quickly get that part up. because of various things going on right now, perhaps we can have this up in two weeks or less. then, yes, it’s off to the races, but at a pace everybody is comfortable with.

“Something I’ve noticed is that no matter how many fields you add, there is always someone who doesn’t get all the fields they need.”

i don’t know if this is what you’re thinking, but what if we made the display of certain fields optional? then a person would not continue to see fields he’s never going to use on his workout log?

that established, there are fields that i will insert beyond those previously listed for functionality that is coming but isn’t here yet. there is functionality coming that i haven’t mentioned yet that will require the insertion of data into fields that will make no sense to the user now. i’ll talk about that over the next couple of days.

I guess my point is this...
  1. i need for athletes and their coaches to be able to input projected workouts, and then for athletes to be able to input their actual workouts. i do not know how to confront the issue of how it is coaches access the athlete’s log. does the athlete simply give his coach his user/pass? i don’t know. suggestions solicited.

  2. user/pass: obviously, the athlete must be able to create an account. but, user/pass is not necessary per se, in that it’s already been done (the forum user/pass handshakes with the training log, and logs in the athlete. i can imagine our existing developers tying in this forum user/pass to the training log, that is, perhaps training log developers do not need to worry about farting around with this element of the application.

  3. fields: i’d like the athlete to enter his data in the following fields:

A. event (swim, bike, run)
B. time of day
C. distance
D. time (how many minutes or hours it took to do the workout)
E. RPE score (a legend will be made available to users allowing them to easily assess what score to apply to the workout).

  1. feedback: i’d like the athlete to be able to call up his workouts, either backward or forward chronologically, based on a date range, or a specific month, or number of months (whatever is most customary).

**IS **the chasis. You hose this part and when you get to this…

Phase II is the sausage factory: how we grind the data. this is where i suspect our training log will set itself apart. i don’t think the data is manipulated in ways especially helpful to triathletes at the moment. i think we can do better. but, it’s Phase I i’m interested in at the moment.

is the sun roof.

Now granted I have pretty limited experience in the development end of things but enough to know if you screw up the first part it makes the second part a WHOLE lot harder. And I have tons and tons of experience with enough project management to know that time spent up front, having a clear direction and outlined goals makes it far better, cheaper and quicker in the end.

In short what I’m saying is if you just “Throw something together” with little knowledge of where you’re trying to get and how it’s going to be done you’re going to end up trashing a whole bunch of the work you put into to begin with. Often times the final product ends up being a cobbled piece of crap because no wants to go back and fix to make it right because “Well we have all this time into it already”

I think I see where you’re going with this and it could be a great community developed project with various “Modules” added on by various developers. But you can’t hand a HDTV on a finishing nail. The “Engine” has to be robust enough, easy enough to use and interface with that people of lesser development abilities can use it and not kill it. That’s a huge, massive, monster order to ask for in two weeks.

~Matt

“Just curious why there is a “Two week” cut off on this?”

some of you guys will want to talk over putting a sunroof and power windows and XM radio on this car, but you really can’t do it until i provide for you the chassis, and stick an engine on it. i want to quickly get that part up. because of various things going on right now, perhaps we can have this up in two weeks or less. then, yes, it’s off to the races, but at a pace everybody is comfortable with.

I’m starting to remember why I left the corporate environment…

When I worked at a big company, I was a big driver of instituting a formalized software development process. Back then Rational Unified Process was the biggie, and we were all over use cases, activity diagrams, etc… Once I joined a startup (5th guy hired), and realized my ass getting paid was a direct result of whether or not I could get something done in two weeks, that all changed. Now I just try to get something in front of the customer, and keep the design flexible. The code is the documentation / the design is the interface. They call it “extreme programming” or “agile programming” or something now, but back in the day we called it cowboy coding.

Language - non issue. They’ve already got a lot of Perl code, maybe PHP code, and there’s a lot of people that know one or both so the decision is simple. Especially when you consider you’re going to have to tie it in to the existing database that Gossamer threads runs on - you’ve already got a lot of the login and user profile stuff written if you’re just smart about it. I’ve written CGI programs in Perl, PHP (the interpreter uses CGI, whether the PHP programmer realizes it or not), and plain old “C” (we used to have to do that for performance reasons before Apache allowed programs to stay in memory). Language X vs. Language Y is good for mental masturbation on programming forums, but little good ever comes from it - you can write good code in any language if you have the discipline.

Mobile / etc… If you’re already sticking with Perl/PHP, then you can just change all this through the stylesheets. Same code can be used for different display formats, so it’s really a non-issue.

Just my $.02.

it’s the exceptional person who’d take this on on a voluntary basis.
Yessir. Or even for a new bike and/or wheels. 2 weeks work would be more like new top of the line QR with power setup & race wheels. :slight_smile:
Or, you might be able to find someone that is at a stage where they don’t care about the money (as) much anymore… Somebody has to be the driver though, at least on the technical side.

The hardest part of this is the design useability, the rest can be knocked out with a couple of days work. At least for phase 1.

When I say knocked out, I don’t mean as you said “Throw something together”. I mean a solid foundation with full unit and functional test coverage built on a flexible extensible platform.

Plugable architecture would take a little more time to think up the architecture but I have a few ideas.

The hardest part of this is the design useability, the rest can be knocked out with a couple of days work. At least for phase 1.

When I say knocked out, I don’t mean as you said “Throw something together”. I mean a solid foundation with full unit and functional test coverage built on a flexible extensible platform.

Plugable architecture would take a little more time to think up the architecture but I have a few ideas.

Not to overstate the obvious, but the original request post was on January 3rd. It’s 5 days later… are we done yet?

You’re basically asking to start an open-source, community based project. That is a completely different beast than a corporate or customer based product. Development by committee just doesn’t work. This project needs one idea man who will be responsible for the initial feature set as well as approval of future feature requests (check), one, maybe two lead developers/architects who will implement the original feature set and design/implement the framework that the other feature requests will hang off of (I’m assuming finding those people is the purpose of this thread?), and then build a community around that framework for others to develop the requested features.

And not that I’m throwing my hat into the ring here, but I’ve been working off and on on a similar idea. I’ve attached a rough, relatively generic XML based table diagram created in FabForce’s DBDesigner 4. I’ve got some PHP code wrapped around this on a LAMP setup but no real functionality. The idea behind this design was to make things generic enough that you could expand the metrics, activity, event information, etc. collected without having to modify the database. Also, it was assumed that a Coach would also be a user so it’s just a special case of that kind of individual. Finally, regarding user/coach data access, a user picks or is assigned a coach for a particular kind of activity. This links the coach to the user. The “users” table has a “users_accessmap” field that is used as a lookup to the activities the user participates in, and determines the visibility of those activities to the user, coach, or public.

Use it, abuse it, ignore it as you please.

The “other” MJuric.

datatrainer.xml

The hardest part of this is the design useability, the rest can be knocked out with a couple of days work. At least for phase 1.

When I say knocked out, I don’t mean as you said “Throw something together”. I mean a solid foundation with full unit and functional test coverage built on a flexible extensible platform.

Plugable architecture would take a little more time to think up the architecture but I have a few ideas.

Not to overstate the obvious, but the original request post was on January 3rd. It’s 5 days later… are we done yet?

You’re basically asking to start an open-source, community based project. That is a completely different beast than a corporate or customer based product. Development by committee just doesn’t work. This project needs one idea man who will be responsible for the initial feature set as well as approval of future feature requests (check), one, maybe two lead developers/architects who will implement the original feature set and design/implement the framework that the other feature requests will hang off of (I’m assuming finding those people is the purpose of this thread?), and then build a community around that framework for others to develop the requested features.

And not that I’m throwing my hat into the ring here, but I’ve been working off and on on a similar idea. I’ve attached a rough, relatively generic XML based table diagram created in FabForce’s DBDesigner 4. I’ve got some PHP code wrapped around this on a LAMP setup but no real functionality. The idea behind this design was to make things generic enough that you could expand the metrics, activity, event information, etc. collected without having to modify the database. Also, it was assumed that a Coach would also be a user so it’s just a special case of that kind of individual. Finally, regarding user/coach data access, a user picks or is assigned a coach for a particular kind of activity. This links the coach to the user. The “users” table has a “users_accessmap” field that is used as a lookup to the activities the user participates in, and determines the visibility of those activities to the user, coach, or public.

Use it, abuse it, ignore it as you please.

The “other” MJuric.

If I’d been asked to do it, yes I would be done now. Personaly I think the interface design feature list and useability side should be community user based but the technical side should be one person. This is not a huge undertaking, if people see it as such then Its probably being over engineered.

I have some spare time and the technical skills required but as of yet I have not heard anything back from Dan.

“Just curious why there is a “Two week” cut off on this?”

some of you guys will want to talk over putting a sunroof and power windows and XM radio on this car, but you really can’t do it until i provide for you the chassis, and stick an engine on it. i want to quickly get that part up. because of various things going on right now, perhaps we can have this up in two weeks or less. then, yes, it’s off to the races, but at a pace everybody is comfortable with.

yes and no, you might find out that you do need a sunroof and power windows later on, and if you didn’t design your car to take the load correctly you might find that you have to redo everything from scratch later on, and/or end up with a mess of unmantainable spaghetti code: it’d be like somebody coming in a custom bike shop and asking for a bike, and putting quickly a frame together without measuring because ‘we can always fix it later’, it’s not gonna work.

I have done this enough time to know that yes, having huge amounts of design is bad (I hated the only rational project I was on, with UML diagrams and so on, yikes), but having no design at all and going seat-of-your-pants is just as bad: fine for a prototype, but I don’t think you are talking about a prototype here, you want something that people actually will use, and which you will improve as time goes on, which is not going to happen unless you have a solid foundation, which is kind of next to impossible to get in a day or two (given the two weeks are for the whole thing).

Anyways, this is your site/project, so the call ultimately is yours: I am sure that you can get something if you pay somebody to work on this for a couple of weeks, hopefully the database schema is going to be sound, so if you end up chucking it and rewriting it later at least you’ll be able to reuse any data people have input in it in the meantime.

What I’m saying here is sure, putting together exactly what Slowman has up there, yeh knock it out in a couple days. But like Marco in BC is saying, what’s the point? You have something someone can log into through in a few data points. Pretty much any existing “Training log” can do this and most far more and better.

In short what I’m saying is “I Think” Slowman is shooting for something different. What’s the point of putting in the basics with no vision of what the end product is going to be. I don’t think you want to put in your 2 weeks, get your bike and a month from now throw the whole damn thing away because it just won’t work or will turn into “spaghetti code” as mentioned by Marco.

~Matt

Its very rare that a clear vision of a final product is achiveable at the initiation, In my experience it is very possible to build up an application that meets all current requirements but be flexible enough to support major requirement changes.

The point of putting together the basics with little vision is to help build the vision and define solid achiveable requirements. If it has to be thrown away its achived a least one goal of how it can’t be solved, and at a much cheaper cost than towards the end of a project that had an extensive design phase
but missed something unforseen but critical.

There are pros and cons to both sides. I’ve just experienced better results with a more agile approach to software development.

Well then maybe Dan will give you the job, because you have far more confidence in what you think you know you are doing than I think you could possible know about what you should be doing, if that makes any sense :slight_smile:

~Matt
.

In my experience it is very possible to build up an application that meets all current requirements but be flexible enough to support major requirement changes.

in my experience there is no such thing as a free lunch, to have something very flexible you give up in complexity or implementation time or performance: it is academically feasible, but nearly always practically impossible, to do the above; if it was that easy why would you always end up with upgrade issues, migration issues, integration issues and so on.

And btw, spending 2-3 weeks designing is not that ‘extensive’ for a project of this scope: we’re not advocating 6+ months of design here, but jumping in with both feet and having something done in 3 weeks to me very likely will have you end up with something nobody in their right mind would want to use (given the other free alternatives available). If Dan wants people to use this so that he can do data mining and have other benefits he needs to provide something that’s at LEAST as good as something like trainingpeaks (from the workout log perspective, not the automatic workout thing) or the buckeyeoutdoors one, and it’d be quite difficult to do that in 3 weeks start-to-finish including testing, including import wizards from other training logs (no way people are going to re-enter their x years of workout manually), including import wizards from things like PT or GPS (people nowadays expect to be able to sync their workouts to their training logs with minimum fuss) etc. etc.

If I was Dan I would also be quite careful about going out with a training log that’s not, if best-of-breed, at least quite good, because people expect a lot from ST in general and let’s face it, most tri people are type-A perfectionists, they wouldn’t stand for something half-baked.

In my experience it is very possible to build up an application that meets all current requirements but be flexible enough to support major requirement changes.

in my experience there is no such thing as a free lunch, to have something very flexible you give up in complexity or implementation time or performance: it is academically feasible, but nearly always practically impossible, to do the above; if it was that easy why would you always end up with upgrade issues, migration issues, integration issues and so on.

I never said it was a free lunch or easy, just very possible. For the past three years I’ve been working in a large corporate environment doing just that, we have had complete overnight switch back changes in requirements but have never failed to meet deadlines.

The key has always been having as complete unit and functional test coverage as possible. I practice TDD and Continuous integration, even worked with the guy who wrote one of the best books on the subject. With good test coverage you can make broad sweeping changes knowing your going to find out quickly if you break anything. TDD also encourages a style of programming that is clean concise, smell free and flexible.

“I don’t know if this is what you’re thinking, but what if we made the display of certain fields optional? then a person would not continue to see fields he’s never going to use on his workout log?”

One thing that would be nice, and you can see this in a lot of workflow applications, is allowing users or coaches to define their own custom forms. Instead of trying to guess what everyone might need, creating a bajillion fields and making them all optional, you can just define the core required fields that are necessary to uniquely define a workout/log/whatever and allow users or coaches to define the rest of the fields they want to use. Your interface would simply need to provide them with a preferences/management screen and a set of pre-defined datatypes they can use. Things like text field, date, time, whatever.

Most defect or requirements management systems have this sort of feature. It’s quite common, intuitive, and straightforward to implement.

Instead of trying to guess what everyone might need, creating a bajillion fields and making them all optional, you can just define the core required fields that are necessary to uniquely define a workout/log/whatever and allow users or coaches to define the rest of the fields they want to use.

Allowing customized ‘special’ options to be checked off for a given workout would be a unique feature. Create your own list of custom features (weight vest with 20 lbs, powercranks, etc.)

Additionally, you can allow for cumulative distance to be tracked for these unique features (so you can use it for shoes, cleats, etc.)