Fork me on GitHub
#jobs-discuss
<
2017-02-14
>
sveri13:02:47

Following up on this one: https://clojurians.slack.com/archives/jobs/p1487071815000631 The src folder of the project has 6665 lines of code. Given that a developer has a rate of 5 lines of code per day this makes: 1330 days which are like 5 years (250 workdays / year). Lets just say that today developers might be faster for whatever reason and we can write 25 lines of code / day. This will still be a year of work. So lets go with a year (250 workdays). To make things simple I will assume a daily rate of 800$ / developer thats 200.000$. Please note that I am talking about production code when I refer to lines of code which includes everything like tests / documentation, demos, meetings and what else you think you need.

sveri13:02:58

I dont want to be negative, just wanted to throw some numbers at it 🙂

thomas14:02:36

production ready code can be quite is very expensive, I agree @sveri .

borkdude15:02:19

5 lines of code a day?

wamaral15:02:58

Heh there are days I don't even write a single line

thomas15:02:30

@borkdude I think I have seen research that on a decent sized project that is not unheard of.

wamaral15:02:31

I'll do the job for 199.900, though :)

thomas15:02:43

could have been 10 lines a day.

thomas15:02:12

(not using Lisp of course 😉 )

borkdude15:02:57

With Lisp probably less

sveri15:02:34

@borkdude Its independent of the programming language. Thats why it is so important to pick a language that lets you build good abstractions, so a line of code achieves more than in, say, assembler. For me there are also many days I dont write a single line of code. In my current job I even had a performance defect which took me like 4 - 6 weeks to figure out the problem and implement a good fix. That fix were like 20 lines of code. You can do the calculations yourself 😉

sveri15:02:30

My colleague just went over 2 months on a very hard defect where the production code fix were not even 20 lines, more so 10. Only the regression test took probably 5 weeks because of the complex setup. I dont want to think of all the discussions we had on the problem.

sveri15:02:53

But I think this just shows the variety of development. I am talking about products here with several 100.000s LOCs. Of course, a small library with well defined boundaries will be easier and faster to fix in case of problems.

sveri15:02:43

I would also like to see how others would calculate their offer. Apart from being a full time employer I only ever got paid per hour, never per project.

wamaral15:02:12

Also, porting something should be way faster than designing it from scratch

sveri16:02:26

@wamaral It depends. What does he want to have ported, just the interface of the library? The whole library? Is it ok to use javascript dependencies (given the library uses some). Also he wants to have SVG output and not html. Which browsers should be supported, etc...

lmergen16:02:10

i’m fairly confident that lines of code is a very bad measure in this case — one could argue that the Clojure port will be done in 1/10th of the lines of code

lmergen16:02:16

one could also argue that most estimates are bad any way, and that the whole discussion is moot 🙂

sveri16:02:51

You could argue. But given you are interested in this gig. How would you estimate your offer?

wamaral16:02:40

@sveri I would assume "identical functionality" as in: whatever set of inputs and transformations used on the JS library should generate the same output when applied to the CLJS library, including browser support. I'd also say that performance and library/output sizes should be the same or better. And even if one needs to port the dependencies I'd say that it's still faster than

wamaral16:02:42

designing from scratch

qqq19:02:28

@sveri: I have been translating KaTeX . bit myself. I think the above estimates may be off becuase: https://github.com/Khan/KaTeX/blob/master/src/fontMetricsData.js = huge file = computer generated metrics data https://github.com/Khan/KaTeX/blob/master/src/symbols.js = also large file = also computer generated

qqq19:02:04

the actual algorithm it self is basically just 20 pages worth of algorithms; in particular, appendix G of the TeX Book

qqq19:02:56

also, I think 25 LOC / day is a bit low -- this would come up to 3 LOC / hour -- and I'm not sure anyone would pay $150.00 for 3 LOC

sveri19:02:19

@qqq I explained above how I got my numbers 🙂 Also I just got 5 lines wrong I guess, I twas ten lines according to the mythical man month. So it might be 6 months instead of 12. But yea, I am just shooting in the dark, thats why I also said I am interested in what others come up with. I do not want to blame Luke somehow, its just an example how far off estimations can be. Look at the arachne kickstarter: https://www.kickstarter.com/projects/1346708779/arachne-rapid-web-development-for-clojure?lang=de He estimated 3 months for a fully documented alpha version. IIRC he started working on it last summer, and the first alpha came out beginning of this februar and not fully documented. I dont know if he worked full time on it or not, also again, this is no blame in any ways. It just looks like he needed double the time. When I got into my first full time job the business cancelled a contract with some well known local coder shop. They should do a web application, estimated one year and XXX€ cost. After one year they said they need one more year and the same amount of money again. But yea, why am I talking? 😄

sveri19:02:26

I wonder what you think how long it would take?

qqq19:02:32

@sveri: perhaps our disagreements may be due to different assumptions: it sounds like your analysis is "how long would it take a generic clojure programmer, who has no prior background in KaTeX / implementing TeX" to learn the background + implement the code my interest is: out of all the clojure programmers out there, there is some badass who studied KaTeX / implementing TeX; and if I could just find this person and this person is also interested in converting this, it'd be win-win ... as he/she wanted to do this already -- and I'm willing to pay them to release it open source

sveri19:02:04

Yea, you are right. I went under the first assumption 🙂

qqq19:02:35

the precursor to this idea was: offer contracts to core devs of various clojure projects -- which goes a step even further -- already assuming that the contracter would be the most damn qualified person in the world to work on the project

sveri19:02:08

@luke Nice, while you are here, would you be willing to share some details on how long the current state of arachne took?

luke19:02:07

Sure… so it’s hard to evaluate, since it definitely wasn’t full time (technically it was 3/5 time), and because of the way things turned out we made the explicit and intentional choice to increase scope in certain ways over the lifetime of the project

luke19:02:49

I do not contest that estimation is hard, and that’s definitely true of Arachne as well, but it’s not a 100% overrun like just comparing the kickstarter pitch and the actual calendar time.

sveri20:02:50

@luke Cool, thanks for the info and good luck 🙂

yenda20:02:47

@qqq what is the reason you prefer rewrite over interop ?

qqq20:02:42

@yenda: hackability, I need to be able to do things like point at a sub expression, say I want an arrow pointing to the a in \lim_{x -> 2} (x-a)^2

qqq20:02:55

so "rewrite" is really for hackability

yenda20:02:07

and you said in (1) that you would give an estimation first, what is your estimation, I can't find it maybe I missed it

qqq20:02:38

I haven't provided an estimate yet; I was hoping people would bid to the bottom 🙂

yenda20:02:26

You changed your rules already 😞

sveri20:02:24

@qqq @yenda I think the starting bid of 200.000 is a good first one then :D:D

yenda20:02:49

Ok 200000 I do it 😄

sveri20:02:24

Hm, when I think about it, I was the only one giving a number, also a number supported by some facts and mathematics.

yenda21:02:18

@qqq and do you have any deadline ?

qqq21:02:14

I don't have 200k. I'm hacking on my own at the moment.

qqq21:02:27

I would not pay more than 5k for this port. Preferably something as long as 2k.

qqq21:02:55

I honestly think that someone who understands KaTeX / TeX Internals could do this in a week (or even a wekend), ad thus my estimates.

qqq21:02:12

I'm rather unwilling to be paying a contractor to have the contractor go out and learn on my dime.

yenda21:02:15

that's one way to see it. but let's put it the other way, what use is it for the contractor to spend time understanding KaTeX/TeX Internals outside of this project ?

yenda21:02:00

and if there is a contractor that happens to already know them + cljs and svg enough so that it can go straight to conception and development

sveri21:02:17

While I totally agree that 200k is way off. I think a weekend is way off too. Let alone 6000 lines of production code, without docs and tests would be sufficient for a tendonitis.

yenda21:02:23

I still think it will be more than a week for something of quality

yenda21:02:32

also you can add to the list of requirements for optimal development time some experience writing lexer/parsers

yenda21:02:08

svg instead of html/css will save quite some development time

wamaral21:02:30

The shortest timeframe in my opinion would be 1 month (and I would never willingly accept such job)

sveri21:02:43

I think the goal and the idea are honorable. Pay someone for doing something he wants to do anyway. But the combination might be very hard to find

yenda21:02:01

I think in 1 week someone with experience in writing parsers could get a prototype to work with a small subset of the language

qqq21:02:20

@yenda: I agree that it's unfair for the contractor to learn KaTeX/ TeX internals on their own time unpaid; which, as I mentioned earlier, was my assumption / hope of finding people who already have the background 🙂

qqq21:02:11

one more thing, (this is 100%) my fault; a parser is not required, the only part I need is: cljs data structure -> svg i.e. the contractor can assume taht it's already parsed into maps/vectors ^^ I take full blame for not explaining this clearly above

yenda21:02:47

you already have the parser ? or you are using your own grammar ?

qqq21:02:57

instead of saying "port all of KaTeX", <-- my fault, I should have said: port an algorithm which does "TeX AST represented as cljs data structure -> svg" -- so it's literally just appendiz G of the Tex Book

qqq21:02:17

@yenda: I don't need a parser; I'm buildling a WYSIWYG math editor -- I just need the "cljs data structure -> SVG" part

qqq21:02:53

btw, thanks for helping me clarify all this; my spec writing skills are not nearly as good as I assumed

yenda21:02:36

so you never actually write latex expressions

qqq21:02:52

Attempt #2 at spec: ========== I am writing a WYSIWYG math editor in SVG. I need a way to render "TeX-like AST (represented as a CLJS data structure) to SVG." This is the equivalent of Appendiz G of the TeX book, or the rendering part of KaTeX (except SVG output instead of HTML/CSS).

yenda21:02:56

you work directly with Tex AST in your app

qqq21:02:19

I work with things like: [:frac [:plus 1 [:symbol "alpha"]] 2]

qqq21:02:30

It's an AST; I'm not sure I'd call it a "TeX AST"

qqq21:02:04

The contractor can define the AST< as long as it's reasonable. The hard part is how TeX glues boxes together -- the spacing for frac, sqrt, sup, sub, stack, hbox, vbox, ...

yenda21:02:46

so now the question is does such a contractor exists, if not how much will it cost to get one willing/able to learn TeX for an amount that is reasonable for you

qqq21:02:11

@yenda: this has definitely gome from "generic interchangeable clojure dev" to "very specialized dev" -- I'm pretty sure this person exists, it's just a matter of how to efficiently find. this person

qqq21:02:10

I don't know if you saw my earlier post; this idea started out as "hmm, can I pay core devs of open source projects I use to add new features instead of hiring employes"; so "hyper specialized" was always in mind