While doing my PhD in computer science, I need a software system to perform and test my hypothesis/research, e.g. automatically perform a calculate or experiment. Even though I try to use as many existing frameworks/libraries as possible, I still have to do a lot of programming.

So, I wonder if I should thoroughly describe my implementation along with my research in the thesis. By thoroughly, I mean to provide something like database design, class diagram, etc...

  • 2
    I have taken the liberty to suggesting an edit to slightly modify your title by explicitly pointing out you are asking about a PhD thesis rather than a Bachelor or Master thesis. jakebeal's answer is totally fitting with respect to a PhD thesis, but I would consider it only a partial answer if the question were about a Bachelor or Master thesis (thus making an analogous question about a Bachelor or Master thesis a different question). Mar 1, 2015 at 18:15
  • 1
    Have you actually implemented the system? Have others implemented similar systems? What would you do different from them? Without knowing those questions it is very premature to decide what to put on your thesis or not.
    – Alexandros
    Mar 1, 2015 at 20:15
  • @Alexandros as stated in the question, I try to use as much existing libraries in my system as possible and only implement those that I cannot find, since some features are very specific to my research.
    – user12635
    Mar 1, 2015 at 22:50

1 Answer 1


When I think about such problems, I find that there are two main aspects of mechanism documentation to be considered:

  1. Reproducibility: The standard that you absolutely must adhere to is to provide enough information to allow others to reproduce your scientific results. This means that you need to provide all of the key ideas that would not be readily re-generated by any skilled practitioner. This means that all of the "ordinary" programming work doesn't need to be explained, and indeed would probably be distracting if you did spend time explaining it. Note also that reproducing a result is not the same as reproducing data: e.g., if your system provides O(log n) growth in resource requirements, that's what needs to be producible, not the exact particulars of how you tested that experimentally.

  2. Accessibility: Even if a result or system is reproducible, it's often a lot of work to reproduce it. If your system is likely to be something that other people might want to use themselves, then you should share the code. Architecture diagrams and similar documentation are nice to make that code more accessible, but they key is to make sure the code is readily available under a free and open license (see also the question: Should I share my horrible software?).

Now, the nice thing about a thesis is that there's typically no limit to the length or types of artifacts that you can attach to it. I would thus strongly recommend that you make sure to bundle the software, with adequate documentation to allow a skilled computer scientist from another subfield to understand it and apply it. Don't worry about explaining the "uninteresting" parts of the design, however, unless it's actually directly relevant to your scientific results.

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .