1

I work as a Ph.D. researcher.

My supervisor told me to implement a web application in Flask that:

  1. take inputs (project name, protein sequence, secondary structure, email-id) from the user
  2. save those inputs as text files as a 'job file.'
  3. send that information to a server for processing
  4. when the server returns its output, let the user see the plots, download output data, etc.

I had to implement the app except for #3. Coz, that step was implemented using the Bash script.

Anyway, I knew Python. However, I had to learn Flask, socket-io, JQuery, and Brython from scratch. I knew some HTML; however, that was 12 years ago, so that needed some brushing up. Also, initially, the requirement was to implement the jobs using SQLite. Later the requirements changed, and I was told to implement them as text files.

Therefore, it took 2.5 months for me to implement the web app. Please, remember that I did some other things in parallel.

My supervisor says I took too much time. The app could have been developed faster, etc.

How can I make my point that the amount of time I consumed was justified?

17
  • 2
    Does it matter what your supervisor thinks, if you think it was justified? Feb 28, 2023 at 6:42
  • 3
    @mattfreake, He has an impression that I take too much time in any task I am given. This is painful to me.
    – user366312
    Feb 28, 2023 at 6:43
  • 4
    The first red flag I see is that from your description, I would say #1 takes a day, #2 can be done in the same day, #3 takes the second day and #4 takes a month or two. Is that actually the plan you gave to your boss? And does the boss know how much work each bullet point is in relation to the others?
    – nvoigt
    Feb 28, 2023 at 7:35
  • 1
    @TheDemonLord, It took 2.5 months to implement. 77 days == 2.5 months.
    – user366312
    Feb 28, 2023 at 7:38
  • 3
    @user366312 77 days is 2.5 months only if you work weekends, which is a red flag in itself (for both you and your "employer"). Feb 28, 2023 at 8:47

4 Answers 4

8

I have written similar applications myself - take user data, transform them to a specific text format, start a scientific processing pipeline, parse the output and present the output. I know the situation both in your role as well as from the supervisors perspective.

The proposed tools are a good choice, especially for a Python programmer. However, web applications and scientific programming are two completely different things - it was very hard for me to learn the web stuff coming from scientific programming - and Flask is for us scientific programmers much easier than Django. And this takes time. 2.5 month with your skill set is actually quite good, if you had no experienced help, especially for step 4 (80-90% of the work) as nvoigt has pointed out.

What could you have done better? Communication! After doing research, planning what needs to be done, what skills you need to learn you should have returned to your supervisor (after a week) and pointing out:

"Step 2 is simple (using templates), for step 1 i have a prototype - looks ugly but making it better takes sometime. But for step 4 I am lost, do you have resources or do you know somebody to advise me?" And then let your supervisor work with your assessment.

Doing a PhD (I co-supervised around 10 in their technical perspective) mainly consists of trying ideas of your supervisor to find out that they are not working - we call that research (this is exaggerated, of course you also fail with your own ideas). Doing your PhD successfully means to learn to fail faster so you can try more things - and finally find something that is working. I wish I knew that during my PhD.

Actually, research positions in academic settings are also quite different from more economy driven workplaces, hence this question would have been better asked at Academia.

2
  • +1 for your clear answer. Out of curiosity, can I ask why everybody states the fourth step is so complicated? My naive way to approach the problem would be to save the plots/data in the server once the computations are complete and then use ssh to access the information remotely.
    – Amelian
    Jun 11, 2023 at 2:05
  • 1
    @Amelian If the graphs are always exactly the same this is (relatively) easy, just write the script that creates the graphs and serve them via flask / cherrypy with the correct mimetype, by saving the image to a byte stream- or even just save it to disk and give the users access. But if the users should be able to define their own plots it gets difficult.
    – oekopez
    Jun 13, 2023 at 13:40
7

For the task that is already done I'm not sure what you can do or if you even should do anything, beside telling him that you had to learn some new technologies.

In the comment you said:

He has an impression that I take too much time in any task I am given. This is painful to me.

An easy solution for future tasks would be: When given the task, ask how much time is estimated to complete the task and/or give your own time estimate. If the task is big (2,5 months is definitely big) break it up into smaller steps/packages to make estimations easier and create milestones that you can reach. This way if you have widely different estimates, you can discuss why you think it will take longer or shorter than the other one thinks.

This is a standard concept in software development to estimate projects and discuss. Additional benefits are:

  • the goal will be more specified
  • everyone will have similar expectations
  • you potentially get hints about an existing library that does part of the work
  • pointing out things/technologies you have little/no experience and you still need to learn those. while your supervisor knows them and doesn't realize you don't

During the task as soon as you feel you will not hit the estimated target, immediately discuss with your supervisor again, what the reasons for the delay are and maybe even do another estimate.

1
  • When estimating time to completion, I learned early on that I needed to at least double my initial number. If you're quoting calendar days it's more than that, since not all of your hours are spent working on this one task.
    – keshlam
    Feb 28, 2023 at 14:51
3

Both of you basically have no idea what you're doing.

It makes no sense for a completely independent project to have stack requirements like this.

What I would typically do is create the project within the scope of everything I know, and only learn new things when I have very specific requirements, e.g.) I need to learn to use to use this package to display a graph, instead of spending 2 weeks making it from scratch.

What I suspect you did is you simply complied with what your supervisor told you, started using stuff that doesn't fit your requirements (Flask, text output, server processing), and you were stuck learning a pile of stuff that's totally pointless.

What's the point of using Flask at all? Why not just load up Django with built-in ORM and SQLite? Or drop a level lower and just fire up XAMPP with MySQL and you'll have a network capable (but definitely not internet ready) server in about 5 minutes.

Why would you need "server processing"? If you can parse the data in a shell script and SQLite, or fire up a local Python script, why would you involve a server at all? If you need the stuff to be accessible to other people, upload it to Google Drive or use Dropbox.

If you want an "online" capable thing, then this could've been done with Python Lambdas on AWS, or just share a Python script with Dropbox and have them run it locally.

4
  • 2
    All those technologies were suggested and imposed by him. I was not in a position to choose from my existing skill set.
    – user366312
    Feb 28, 2023 at 10:13
  • @user366312 Basically, both of you have no idea what you're doing. The actual technology contributes nothing to the output if you don't know how to use it. It only makes sense to pick Flask in this scenario is if your goal is to learn it. Otherwise, the requirement is strictly a negative contribution to the goal.
    – Nelson
    Mar 1, 2023 at 3:17
  • @JoeStrazzere, He said nothing.
    – user366312
    Mar 1, 2023 at 5:51
  • @Nelson, I have the impression that you do not know how the front end of a scientific analysis pipeline works. Brython, socketio and JQuery could be ommited for a minimal version of step 1-3. Step 4 would be best to solve with Dask or similiar. But for step 1 Flask is a very sensible choice - much better than Django (I tried Django, but settled with Cherrypy (ugh, but better then Django) and Flask (simple and nice) for front ends of scientific pipelines). None of your suggestions would work for OP's task.
    – oekopez
    Mar 1, 2023 at 8:54
2

It is necessary to understand the supervisor's point of view and why they say that the development of the application took too long. Maybe he is not informed about all aspects of your work on this project. Try to have an open and constructive conversation with your supervisor to resolve any objections.

When explaining your point of view:

  • You had to learn Flask, socket-io, JQuery and Brython from scratch. Learning new languages and technologies takes time, and investing time is essential to ensure that your application is implemented correctly.

  • You also mentioned that the requirements changed during the project, which unfortunately is common in projects. Changing requirements can add a lot of work and will require more time to complete.

  • It should also be mentioned that you have other tasks to complete in parallel, which may have affected the time it takes to complete the application. It is very important to consider the impact of other tasks on the project timeline and communicate these factors to your supervisor.

  • A well-developed application must be rigorously tested to ensure that it meets the requirements and works correctly. Creating and running tests can take a long time, but it's important that the application is stable and bug-free.

  • Application development is not only writing code, but also maintaining, debugging and documenting it for future use. These tasks may take extra time, but are critical to ensuring that the app is maintainable and usable in the long run.

Overall, developing an app that meets all of these requirements and will work well takes time, effort, and careful attention to detail. It is important to convey the above points to your supervisor and show him how you spent your time developing the application. If you can demonstrate the quality of your work and the effort you put in, your supervisor may have a better understanding of the time it takes to complete a project... a good supervisor.

You must log in to answer this question.

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